0

サーバーのリストをループしてマスター DB にクエリを実行するストアド プロシージャがあります。これらのサーバーの 1 つがダウンすると、ストアド プロシージャのクエリがタイムアウトします。非アクティブなサーバーのクエリをスキップするにはどうすればよいですか? または、サーバーのタイムアウトをキャッチして残りのアクティブなサーバーでクエリを続行するにはどうすればよいですか? IsActive 列を含む Server テーブルがありますが、サーバーがダウンしても値が自動的に変更されません。現在、照会するサーバーのリストは、テーブル内のこの IsActive 列に基づいています。別の解決策は、サーバーがダウンするたびに IsActive 列を自動的に変更する方法を見つけることですが、その方法はわかりません。何かご意見は?

編集:私はこれをすべてSQL Server 2008で行っています

4

1 に答える 1

2

エンジン(リンクされたサーバー)の内部からこれを行わないでください。

外部プロセスからのクエリ。接続タイムアウトを設定して、クエリを並行して起動します。'query'はすべての情報を一度に取得し、ダウンしているサーバーごとに1回ではなく、ダウンしているすべてのサーバー(おおよそ設定したタイムアウト)を1回待つだけで済みます。接続を試みることがテストであるため、接続の「テスト」はお勧めしません。たとえば、サーバーを繰り返し処理し、最終的にはさらに待機するリスクがあるサーバーを呼び出す場合、テストはまだシリアル化されており、接続を試みるのと同じ時間がかかるためです(これは、テスト行​​うことです。接続する)。sp_testlinkedserver

はるかに優れた解決策は、代わりに信頼性の高いトランスポートと非同期メッセージングを使用することです。サービスブローカー。programmignモデルは非同期ですが、メッセージングは​​信頼できるため、サーバーがダウンしているかどうかは関係ありません。後で最終的にオンラインに戻ったときに、必要な結果が得られます。

于 2012-12-18T14:17:22.280 に答える