我已经在相距 40 英里的两台服务器之间配置了数据库镜像。
服务器规格:SQL Server 2008,标准版 64位
这对于主服务器、镜像服务器和见证服务器都是一样的。该配置具有高安全性和自动故障转移功能
最初,我们在主服务器和镜像服务器上测试了我们的.net 应用程序(web 应用程序),并确保登录不是孤立的。
一切运行正常。但有时在镜像服务器上,我会看到登录失败的尝试:
用户“d0main\user”登录失败。原因:无法打开明确指定的数据库。[客户端:xx.xx.xx] 消息错误:18456,严重性:14,状态:38。
此错误每天出现 3-4 次,但不会超过此次数。
我对专家的问题是:如果主体还活着,那么为什么应用程序尝试连接镜像?.net 网页的默认超时时间为 30 秒,因此,应用程序是否可能尝试连接主体,并且 30 秒后,即使主体还活着,它也会假定主体已死亡,因此尝试打开与镜像的连接,但最终失败。
请帮我解决这个问题。
答案1
你好,我希望这个网站能解答您的问题,因为我不确定您的问题到底是什么。
http://msdn.microsoft.com/en-us/library/ms190913.aspx
或者直接:更改超时值(仅限高安全模式)
* Use the ALTER DATABASE <database> SET PARTNER TIMEOUT <integer> statement.
查看当前超时值
* Query mirroring_connection_timeout in sys.database_mirroring.
另请查看客户端重定向下的这篇文章:http://technet.microsoft.com/en-us/library/cc917680.aspx
如果与初始主体服务器的连接失败,则连接字符串中的故障转移伙伴将用作备用服务器名称。如果与初始主体服务器的连接成功,则不会使用故障转移伙伴名称,但驱动程序会将其从主体服务器检索到的故障转移伙伴名称存储在客户端缓存中。
答案2
您确定错误来自应用程序吗? IP 地址是否指向应用程序服务器?或者可能是其他应用程序(如 SSMS)尝试专门连接到镜像?
如果没有,请确保主服务器没有过载,如果 CPU 占用高,则可能无法响应连接尝试,我会运行 Perfmon 来查看其情况。
还要检查主服务器上的 SQL 错误和服务器事件日志,查找与镜像服务器上的登录时间相匹配的任何异常错误。