MSSQLサーバー。 リンクサーバーアプリケーションの例

本日、MSSQLを使用してリンクサーバーが助けになったときに記事を共有することにしました。 最初に、私が彼に会わなければならなかった状況を説明します。



私は約100の下位機関を持つ省庁の情報センターでWebプログラマーとして働いていました。 各下位機関では、デルファイで書かれたデスクトッププログラムがサーバーにインストールされ、データが毎日入力されました。 四半期に一度、そのような各機関はdbfファイルをアップロードし、このアップロードのデータに従って私たちのセンターに来て、レポートを受け取り、省に提出する必要がありました。 そのため、それはまだdosovプログラムにあり、このアルゴリズムは、単に何も変更せずに、デルファイに転送されました。 アンロードはTransact-SQLを使用して実行され、そのロジックは単純ではありませんでした。



これと並行して、バスはオフラインモードで動作し、単一の中央サーバー上のすべての機関からデータを収集しました。 バスにはバギーがありました。主キーに重複が作成され、すべてのデータが到着したわけではありません。 これらのエラーを修正するための特定のアルゴリズムはありませんでした;異なる従業員が互いに通知せずに異なる期間にこれに従事していました。 タイヤ設計者は辞めた。 このような作業を3年間行った後、中央サーバーのデータは機関のサーバーのデータとは大幅に異なりましたが、すべて正式にバスに問題がないというバージョンに忠実でした。



ある時点で、ファイルアップロードスキームは廃止されたと見なされ、修正のためにお金が割り当てられました。 ボタンをクリックするだけで、アカウントのサイトに関するレポートを送信することが決定されました。 現在、機関の従業員は、最初に報告書を私たちに提出し、次に省に提出する必要はありませんでした。すべてのコミュニケーションは、サイトを通じて行われるべきです。 データは中央サーバーから取得する必要がありました。 バスの問題を知っていたにもかかわらず、部門の長は、施設のサーバーで機能する手順を実行するように命令し、サンプル内の施設のセグメントを考慮した条件を追加し、中央サーバーからサイトにレポートをアップロードしました。 これが行われた後、彼は私にこのプロセスの責任者を任命し、経営陣は新しいスキームに従って省に報告書を提出することを正式に発表しました。



すべてが崩壊しました。 サーバー間のデータの不一致により、レポートの数値は正しくありませんでした。 パフォーマンスの点でもすべてがダウンし、そのような負荷に対応する準備ができていませんでした。 問題を迅速に解決する必要がありました。 各機関のウェブサイトでデータベースに接続するためのパラメータを登録し、サーバーで(プログラミング言語を使用して)手順を開始するオプションは適切ではありませんでした。データを受信することに加えて、このデータをレポートに変換するために毎回処理を開始する必要があったためです 処理手順は、中央サーバーのmssqlで既に実装およびデバッグされており、プログラミング言語に転送するには多くのリソースと時間がかかります。 データベースの手段に対処する必要がありました。



グーグル、MSSQLにリンクサーバーがあるという情報を見つけました。 それらを使用して、サーバー用に、私のネットワークと同じネットワーク上にあり、認証データがあるリモートサーバーとの通信を構成できます。 セットアップ後、サーバーに要求を書き込み、実行するリンクサーバーを指定し、データベースとリソースを使用して、リモートサーバーで要求を実行できました。



リンクサーバーを作成するには、スクリプトを実行する必要があります。



EXEC master.dbo.sp_addlinkedserver @server = N'MY_SERV_1', @datasrc=N'192.168.1.1' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MY_SERV_1',@useself=N'False',@locallogin='sa',@rmtuser='sa',@rmtpassword='1111111'
      
      





サーバーオプション



server-アクセスするサーバーの名前

@datasrc-リモートサーバーのIPアドレス



サーバー認証設定



@rmtsrvnameは、サーバーに割り当てた名前です

@locallogin-アカウント名

@rmtpassword-アカウントのパスワード

@rmtuser-DBユーザー



リンクサーバーを作成すると、データにアクセスするためのパラメーターの一部が「false」に設定されます(パラメーターのリストはこちらで確認できます )。 「rpc」や「rpc out」など、一部のパラメーターを「true」に設定する必要がある場合は、作成スクリプトに次のコマンドを追加する必要があります。



 EXEC master.dbo.sp_serveroption @server=N'MY_SERV_1', @optname=N'rpc', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server= N'MY_SERV_1', @optname=N'rpc out', @optvalue=N'true' GO
      
      





serverパラメーターで、リンクサーバーに付けた名前を指定したことに注意してください。



その結果、リンクサーバーを作成するスクリプトは次のようになります。



 EXEC master.dbo.sp_addlinkedserver @server = N'MY_SERV_1', @datasrc=N'192.168.1.1' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MY_SERV_1',@useself=N'False',@locallogin='sa',@rmtuser='sa',@rmtpassword='1111111' GO EXEC master.dbo.sp_serveroption @server=N'MY_SERV_1', @optname=N'rpc', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server= N'MY_SERV_1', @optname=N'rpc out', @optvalue=N'true' GO
      
      





作成されたサーバーへの要求は、それ自体と同様に実行されますが、最初に、関連付けられたサーバーの名前を持つプレフィックスが示されます。 また、アクセスするときは、スキームの名前を指定する必要があります(以下の例では、スキームは「DBO」と呼ばれます)。



 SELECT * FROM [MY_SERV_1'].MY_BASE.DBO.MY_TABLE
      
      





一般に、接続されたサーバーを処方されたすべての機関に対する数日間の技術サポート。 機関のサーバーからデータが受信されるようにコードを追加しました。 レポートの数値が再び正確になり、パフォーマンスの問題が解決されました。 それが私が困難な状況から素早く簡単に抜け出した方法です。



もちろん、最初は、システムを開発する際に、説明した機能を実装するためにリンクサーバーに横たわるべきではありません。 最初にシステムの設計に正しくアプローチすることをお勧めします。たとえば、1つの中央サーバーが存在するWeb上で作成し、データベースの最適化に精通したスタッフスペシャリストを維持するためにすべてが遅くならないようにします。 この例は、システムがすでに設計されており、やり直すことができる可能性が低い場合の例です。 また、データが本稼働サーバー上にのみ存在し、開発サーバー上でのみストアドプロシージャを変更できる場合、レポートの調整時にリンクサーバーが役立ちます。



All Articles