【问题标题】:SqlServer db mirror failover with EF6 fail Principle to Mirror only使用 EF6 的 Sql Server db 镜像故障转移失败 Principal to Mirror only
【发布时间】:2015-01-05 06:25:34
【问题描述】:

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();
    }
}

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    事实证明,客户端是从不同的局域网加入的,所以在 sql server 上注册的故障转移伙伴在客户端上是不可解析的。

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

    当 .net 应用程序连接到主体时,将为您提供故障转移伙伴的“名称”。此名称需要在 .net 应用程序所在的客户端上“可ping”。

    当 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多