具有EF6的SqlServer数据库镜像故障转移失败原理仅限镜像

时间:2015-01-05 06:25:34

标签: c# sql-server entity-framework sql-server-2014 database-mirroring

Sql server 2014,Entity framework 6.1.2,.net framework 4.5,IIS 8,DB镜像处于高安全模式,没有见证。

我有以下连接字符串

Data Source=A;Failover Partner=B;Initial Catalog=DB;Integrated Security=False;User Id=sa;Password=Password;MultipleActiveResultSets=true;Connect Timeout=10

开头:A =原则,B =镜子
当我从A到B进行手动故障转移(原理到镜像)时,它无法打开连接失败 - Erro 40。

开头:A =镜子,B =原则
手动故障转移工作 现在:A =原则,B =镜子
然后我没有重新启动站点,再次故障转移,错误40 重新启动IIS,再次正常工作。

这是测试连接的代码:

while (!_exitFlag)
{
    using (var context = new EntityContext())
    {
        var result = context.Foos.Count();
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

事实证明,客户端正在从另一个局域网加入,因此在sql server上注册的故障转移伙伴在客户端上无法解析。

SELECT DB_NAME(database_id) AS 'DatabaseName', mirroring_partner_instance
FROM sys.database_mirroring WHERE mirroring_guid IS NOT NULL;  

会给你"名称" .net应用程序连接到该原则时的故障转移伙伴。这个名字必须是" pingable"在.net应用程序所在的客户端上。

当ado.net连接到" Data Soruce"中指定的服务器时会发生什么?值,它从数据库中检索故障转移伙伴并忽略连接字符串中的一个。 (伟大的****工作微软。)

我没有调查为什么反向有效,但显然有些只是在线,"数据源"再次检查连接字符串中的服务器。

我从这篇文章中得到了这个想法:http://blogs.msdn.com/b/spike/archive/2010/12/15/running-a-database-mirror-setup-with-the-sqlbrowser-service-off-may-produce-unexpected-results.aspx(基本上,当您在自定义端口上搜索数据库镜像时,会更突出地讨论此问题。)

编辑 - 我已经跟着另一个问题,现在我正面临解决问题: https://dba.stackexchange.com/questions/87607/set-up-sql-server-db-mirror-specifying-ip-address-for-mirroring-partner-instance