3

SQL Serverクラスタリングを利用する環境向けに開発している場合、(もしあれば)何に注意する必要がありますか?

私が見てきたことから、データベース操作の例外を処理し、2つのオプションがあります。

  • ユーザーに「再試行」を表示します。ユーザーが再試行するまでに、フェイルオーバーノードが起動しているはずです。
  • 数秒待ってから、ユーザーに通知せずに再試行してください。

これは正しいです?これが私がする必要があるすべてですか?

これはASP.NETアプリですが、これがアプローチに大きな違いをもたらすとは思わない。

アドバイスをいただければ幸いです

ダンカン

4

1 に答える 1

3

接続を再試行するだけで十分です。インスタンスがフェイルオーバーの最中で、アプリケーションが接続を開いている場合、次のようになります。

  1. 接続は機能しています
  2. SQLException: "リクエストをサーバーに送信するときにトランスポート レベルのエラーが発生しました。(プロバイダー: TCP プロバイダー、エラー: 0 - 既存の接続がリモート ホストによって強制的に閉じられました。)"
  3. SQLException: 「SQL Server への接続を確立しているときに、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: TCP プロバイダー、エラー: 0 - ターゲット マシンがアクティブに拒否したため、接続を確立できませんでした。)"
  4. 手順 3 のメッセージは、フェイルオーバーが完了するまで繰り返されます。
  5. 正常に再接続します。

この場合、接続を再試行するだけで済みます。SQL サーバーの応答性が一般的に高い場合は、データベース呼び出しが 30 秒後にタイムアウトになるクラスに接続コードをラップしてみることもできますが、クラス内ではタイムアウトを短くして、数回再試行してください。これにより、アプリケーション全体で呼び出しを 1 回だけ行うことができ、必要に応じて内部接続の時間をフェイルオーバーできます。

ただし、ネットワーク名と IP アドレスの移行はシームレスであるため、フェイルオーバーが発生した場合に回復するために特別なことをする必要はありません。再接続して、チャグを続けるだけです。ただし、処理中のトランザクションはロールバックされるため、切断が発生したときに実行していたものがある場合は、新しいノードで再送信する必要があることに注意してください。

于 2009-07-07T20:16:43.107 に答える