我设置了镜像数据库(计算机名称:SQL-Prim,SQL-Mirr,域名:sql-1.ooo.org,sql-2.ooo。 ORG)。 我没有AD,我使用公共IP地址和域名进行配置。 我编写了一个C#应用程序来测试故障转移行为。 连接字符串是这样的:手动故障转移后,C#应用程序无法连接到镜像SQL Server
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-普里姆并运行良好。 当我从SQL-普里姆到SQL-MIRR手动故障转移时,程序会抛出异常:
"The underlying provider failed on Open."
如果我重新启动应用程序,它连接到SQL-镜像和运行良好。然后,我再次从SQL-Mirr手动故障转移到SQL-Prim。该应用程序运行良好。如果我从SQL-Prim手动故障切换到SQL-Mirr,应用程序将再次抛出相同的异常。
我尝试在测试应用程序的计算机上将SQL-Mirr的IP地址添加到“C:\ Windows \ System32 \ drivers \ etc \ host”。 该应用程序运行良好。我可以任意故障转移2个DB,没有任何错误。
我很困惑这个问题。 有没有想法避免更改主机文件? 感谢您的帮助。