2

ミラー データベースに正しくフェールオーバーできないという問題があります。プリンシパル データベース (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 名を強制的に使用させる他の方法はありますか?
4

1 に答える 1

0

誰かが同じまたは同様の問題を抱えている場合に備えて、この質問に対する答えを見つけました。

SQL で @@SERVERNAME プロパティを変更する必要がありました。内部的にコンピューターの WIN-... インスタンス名に設定されていましたが、次のコマンドを使用して、それを削除し、必要なサーバー名を追加することができました。

現在のサーバー名を取得 (WIN_NAME)

SELECT @@SERVERNAME

WIN-NAMEをドロップ

SP_DropServer  'WIN_NAME' 
GO
SP_AddServer 'SERVER_NAME',local
GO

SQL Server を再起動して、変更が有効になることを確認します。

于 2015-06-22T20:59:47.053 に答える