1

フェールオーバー シナリオで 2 つの Microsoft SQL 2005 データベースをセットアップしています。アプリケーション接続文字列には、接続文字列で指定された「フェールオーバー パートナー」があります。

現在稼働中のデータベースがスレーブ データベースにフェールオーバーするとき、ユーザーが「リモート ホストによって既存の接続が強制的に閉じられました」というメッセージを含む SqlClient.SqlException を取得できる期間がわずかにあります。

これは主に、データベースのフェールオーバーの速度によるものですか? それとも、これらのエラーを防ぐために他にできることはありますか?

4

3 に答える 3

2

おっしゃる通りです。データベースのフェイルオーバーにかかる時間と関係があります。

同期ミラーリングのフェールオーバー タイムラインは次のようになります。

  1. プライマリ サーバー A がシャットダウンし、すべての接続を閉じます。この時点から、サーバー A に接続しようとするすべてのクライアントは、その接続を強制的に閉じられます。
  2. プライマリ サーバー A は、そのログがセカンダリ サーバー B と完全に同期されていることを確認します。
  3. サーバー B の SQL サービスが開始します。
  4. サーバー B の SQL サービスは接続の受け入れを開始し、その時点でクライアントは再び接続できるようになります。

サーバーがどれだけ高速であっても、接続が爆発的になる短い期間 (少なくとも 1 秒) があります。Steven Lowe が言ったように、その例外をトラップし、待ってから再試行する必要があります。アプリが大規模なトランザクションの一部として複数のクエリを連続して発行すると、より複雑になることに注意してください。トランザクションが失敗する可能性があります。

于 2009-03-06T14:38:05.353 に答える