ミラー データベースに正しくフェールオーバーできないという問題があります。プリンシパル データベース (dbx) に接続し (ミラーリングが有効でセットアップされている)、プリンシパル データベースをフェールオーバーすると (クラッシュをシミュレートするために SQL Server をシャットダウンします)、クエリを送信できなくなります。これは、以前の接続が失われたためです。
単純に接続とハンドルを閉じて、同じ接続文字列を使用して新しい接続を再確立し、ミラー データベース (現在はプリンシパル データベースである dby) に再接続したいと考えています。
私の接続文字列は次のとおりです。
Driver={SQL Native Client};Server=dbx;Failover_Partner=dby;Database=db;Uid=uid;Pwd=pwd;Network=DBMSSOCN;
調査の結果、接続の Failover_Partner パラメータはほとんど役に立たないことがわかりました。これは、プリンシパル サーバーがダウンし、新しい接続が初めて確立されるときにのみ使用されます。何らかの理由で、プリンシパルへの接続が確立され、代わりに sys.database_mirroring テーブルにある mirroring_partner_instance が使用されると、Failover_Partner が内部的に上書きされます。そのため、Failover_Partner を dby に指定すると、接続を確立した後、フェールオーバー パートナーと見なされるものをクエリすると、DNS 名 (dby) ではなく、フェールオーバー パートナーのインスタンス名が返されます。
ここに問題があります。INSTANCE 名をフェールオーバー パートナーとして使用できません。DNS 名をフェールオーバー パートナーとして使用する必要があります。
だから私の質問はこれです:
- sys.database_mirroring エントリを変更して mirroring_partner_instance を変更する方法はありますか?
- このフィールドはどこから値を取得しますか?
- SQL Server にインスタンス名ではなく DNS 名を強制的に使用させる他の方法はありますか?