我设置了镜像数据库(计算机名: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,应用程序会再次引发相同的异常。
我尝试将 SQL-Mirr 的 IP 地址添加到测试应用程序计算机上的“C:\Windows\System32\drivers\etc\host”。应用程序运行良好。我可以任意故障转移 2 个数据库而不会出现任何错误。
我对这个问题感到困惑。有没有办法避免更改主机文件?谢谢你的帮助。