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();
}
}
有任何想法吗?
最佳答案 事实证明,客户端正在从不同的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连接到“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