gpt4 book ai didi

c# - 使用 EF6 的 SqlServer 数据库镜像故障转移失败原理仅镜像

转载 作者:行者123 更新时间:2023-11-30 12:26:39 27 4
gpt4 key购买 nike

Sql server 2014,Entity framework 6.1.2,.net framework 4.5,IIS 8,无见证的高安全模式数据库镜像。

我有以下连接字符串

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 的手动故障转移(原理到镜像)时,它失败并显示无法打开连接 - 错误 40。

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

下面是测试连接的代码:

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

有什么想法吗?

最佳答案

事实证明,客户端是从不同的 lan 加入的,因此在 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 连接到“数据源”值中指定的服务器时,会发生什么情况,它会从数据库中检索故障转移伙伴并忽略连接字符串中的那个。 (伟大的 **** 微软工作。)

我没有研究为什么反向工作,但显然在某些地方,连接字符串中的“数据源”服务器被再次检查。

我从这篇文章中得到了灵感: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

关于c# - 使用 EF6 的 SqlServer 数据库镜像故障转移失败原理仅镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27774400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com