3

SQLミラーリングと監視サーバーを使用した自動フェイルオーバー用に3台のサーバーをセットアップしています。これは期待どおりに機能します。

これで、データベースに接続するアプリケーションで、フェイルオーバーが発生したときに問題が発生したようです。再度接続するには、手動で介入して接続文字列を変更する必要があります。私がこれまでに見つけた最善の解決策Failover Partnerは、接続文字列のパラメーターを使用することですが、直感的でも完全でもありません。Data Source="Mirror";Failover Partner="Principal" ここにあります

上記のブログの例(シナリオ#3)から、最初のフェイルオーバーが発生し、プリンシパル(フェイルオーバーパートナー)が使用できない場合、代わりにデータソース(新しいプリンシパル)が使用されます。再度失敗した場合(そして限られた期間内にのみ試した場合)、エラーメッセージが表示されます。これは、接続文字列がキャッシュされているために発生します。したがって、これが更新されるまで、エラーが発生し続けます(接続文字列は、エラーが発生してから約5分後に更新されるようです)。フェイルオーバー後にデータソースとフェイルオーバーパートナーを交換すると、もう1つサイレントフェイルオーバーが発生します。

ミラーリングデータベースを使用するアプリケーションでも(エラーが発生することなく)完全自動フェイルオーバーを実現する方法はありますか?

現在アクティブなデータベースノード名をポーリングし、それに応じて接続文字列を調整するカスタムスクリプトを使用して、潜在的な回避策を確認できますが、現時点ではやり過ぎのようです。

4

5 に答える 5

1

You can clear the application pool in the case a failover has happened. Not very nice I know ;-)

  // ClearAllPools resets (or empties) the connection pool. 
  // If there are connections in use at the time of the call, 
  // they are marked appropriately and will be discarded 
  // (instead of being returned to the pool) when Close is called on them.
  System.Data.SqlClient.SqlConnection.ClearAllPools();

We use it when we change an underlying server via SQL Server alias, to enforce a "refresh" of the server name.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.clearallpools.aspx

于 2013-02-06T15:35:23.267 に答える
0

解決策は、接続プールをオフにすることですPooling="false"

これは小規模なアプリケーションには最小限の影響しかありませんが、1 分間に数百 (またはそれ以上) のリクエストを受信するアプリケーションではテストしていません。コメントしたい人はいますか?

于 2012-09-11T07:43:33.117 に答える
0

.net 開発を使用している場合は、ObjAdoDBLib または PigSQLSrvLib と PigSQLSrvCoreLib を使用してみると、コードが単純になります。

コード例:

新しいオブジェクト
ObjAdoDBLib

Me.ConnSQLSrv = 新しい ConnSQLSrv(Me.DBSrv、Me.MirrDBSrv、Me.CurrDB、Me.DBUser、Me.DBPwd、Me.ProviderSQLSrv)

PigSQLSrvLib または PigSQLSrvCoreLib

Me.ConnSQLSrv = 新しい ConnSQLSrv(Me.DBSrv、Me.MirrDBSrv、Me.CurrDB、Me.DBUser、Me.DBPwd)

このメソッドを実行すると、ミラー データベースがフェールオーバーした後、オンライン データベースに自動的に接続されます。

Me.ConnSQLSrv.OpenOrKeepActive

詳細については、関連するリンクを参照してください。

https://www.nuget.org/packages/ObjAdoDBLib/

https://www.nuget.org/packages/PigSQLSrvLib/

https://www.nuget.org/packages/PigSQLSrvCoreLib/

于 2021-06-20T11:36:15.107 に答える