2009-07-02 17 views
3

SQL Serverのクラスタリングを使用する環境用に開発している場合は、何を知っておく必要がありますか?私が見たものから、SQL Serverクラスタ用の開発

は、私は、データベース操作の例外を処理し、二つのオプションが必要です。

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

これは間違いありませんか?これは私がする必要がありますか?

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

何かアドバイスは、接続は十分なはずただ、再試行

ダンカン

答えて

3

いただければ幸いです。インスタンスは、フェイルオーバーの真ん中にあり、我々のアプリケーションは、オープンな接続を持っている場合は、ここでは何が起こるかです:

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

この場合、接続を再試行する必要があります。 SQLサーバーが一般的にかなり応答性が高い場合は、30秒後にデータベース呼び出しがタイムアウトするクラスで接続コードをラップすることができますが、クラス内ではタイムアウトを短くして、何度か再試行します。そうすれば、大規模なアプリケーションで大量の呼び出しを行うことができ、必要に応じて内部接続時間をフェールオーバーできるようになります。

ネットワーク名とIPアドレスの移行はシームレスですが、フェールオーバーが発生した場合に復旧するために特別な処理は必要ありません。ただし、処理中のトランザクションはロールバックされるので、切断が発生したときに実行中のものがあれば、新しいノードで再実行する必要があります。

関連する問題