ミラーリング データベースをセットアップしました (コンピューター名: SQL-Prim、SQL-Mirr、ドメイン名: sql-1.ooo.org、sql-2.ooo.org)。私は AD を持っておらず、パブリック IP アドレスとドメイン名で構成しています。フェイルオーバーの動作をテストする C# アプリケーションを作成しました。接続文字列は次のようになります。
data source=sql-1.ooo.org;Failover Partner=sql-2.ooo.org;initial catalog=TestDB;User Id={0};Password={1};App=EntityFramework
C# アプリケーションは、データを継続的に更新します。
while (true)
{
try
{
using (TestEntities context = new TestEntities())
{
//update data
}
}
catch (Exception ex)
{
//log error
}
System.Threading.Thread.Sleep(1000); //sleep for a while
}
最初に、アプリケーションは SQL-Prim に接続し、正常に動作します。SQL-Prim から SQL-Mirr に手動でフェールオーバーすると、アプリケーションは例外をスローします。
"The underlying provider failed on Open."
アプリケーションを再起動すると、SQL-Mirror に接続され、正常に動作します。次に、SQL-Mirr から SQL-Prim に手動で再度フェールオーバーします。アプリケーションは引き続き正常に動作します。SQL-Prim から SQL-Mirr に手動でフェールオーバーすると、アプリケーションは再び同じ例外をスローします。
テスト アプリケーションのコンピューターの「C:\Windows\System32\drivers\etc\host」に SQL-Mirr の IP アドレスを追加してみます。アプリケーションは正常に動作します。エラーなしで任意に 2 つの DB をフェールオーバーできます。
私はこの問題に混乱しています。ホストファイルの変更を避けるためのアイデアはありますか? ご協力いただきありがとうございます。