具有 EF6 的 SqlServer 数据库镜像故障转移仅镜像原则
本文关键字:镜像 故障 转移 原则 数据库 EF6 SqlServer 具有 | 更新日期: 2023-09-27 18:36:16
SQL Server 2014,实体框架6.1.2,.net框架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(从原理到镜像)进行手动故障转移时,它失败并显示无法打开连接 - Erro 40。
开头:A = 镜像,B = 原理
手动故障转移有效。
现在:A = 原理,B = 镜像
然后,我不重新启动站点,再次故障转移回来,错误40。
重新启动 IIS,再次工作正常。
下面是用于测试连接的代码:
while (!_exitFlag)
{
using (var context = new EntityContext())
{
var result = context.Foos.Count();
}
}
有什么想法吗?
因此,事实证明,客户端是从不同的 LAN 加入的,因此在 sql 服务器上注册的故障转移伙伴在客户端上不可解析。
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"值中指定的服务器时,它会从数据库中检索故障转移伙伴并忽略连接字符串中的故障转移伙伴。(很棒的****工作Microsoft。
我没有研究为什么相反的工作,但显然有些单独行,再次检查连接字符串中的"数据源"服务器。
我从这篇文章中得到了这个想法: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