首页 > SQLServer数据库 > SQL镜像“已断开连接”解决办法
201506月15

SQL镜像“已断开连接”解决办法

一、故障概要:11日晚上镜像数据库服务器网卡异常,联系机房重插拔网线后,网络恢复正常。但12日6点开始数据库镜像异常,显示已断开连接

二、故障解决过程:

  1. 网络连通检测 ping正常
  2. 镜像端口检测 telnet正常

说明网络连通是正常的

select from sys.database_mirroring_endpoints 端口状态也是正常的

  1. 尝试重启镜像服务器的SQLServer服务,无法解决,问题依旧
  2. 最后重启镜像服务器就好了

虽然问题解决了,但为什么需要重启服务器才能解决,这个还是没搞懂

三、后续改进

发现数据库镜像问题较晚,是在上班时间才发现,而镜像服务器还有其他的应用,不方便重启服务器,但镜像不会恢复的话,又会影响数据库复制。当天临时的处理办法时取消复制数据库的镜像,确保复制正常,不影响业务运转。

如果可以更早的发现问题,就能在业务低峰期重启服务器,切换成本就更低了,所以需要加上数据库镜像状态的监控,以便及时发现问题及时处理

简单的实现方法,实现邮件短信通知到dba

DECLARE @MirroErrorCount int=0

SELECT @MirroErrorCount =count(*) FROM sys.database_mirroring WHERE mirroring_state NOT IN (2,4)

    IF @MirroErrorCount > 0

    BEGIN

        RAISERROR (N’#紧急# SQLServer %d 个数据库镜像状态不正常.’,– Message text.

                 10,– Severity,

                 1,– State,

                 @MirroErrorCount);– First argument.

        SELECT 1/0

    END

    DECLARE @MirroSafetyCount int=0

    SELECT @MirroSafetyCount =count(*) FROM sys.database_mirroring WHERE mirroring_safety_level NOT IN (1)

    IF @MirroSafetyCount > 0

    BEGIN

        RAISERROR (N’#一般# SQLServer %d 个数据库镜像未设置为高性能(异步)状态.’,– Message text.

                 10,– Severity,

                 1,– State,

                 @MirroSafetyCount)– First argument.                

        SELECT 1/0

    END

相关资料:

throw https://msdn.microsoft.com/en-us/library/ee677615.aspx

raiseerror https://msdn.microsoft.com/zh-cn/library/ms178592.aspx

sys.database_mirroring https://msdn.microsoft.com/en-us/library/ms178655.aspx

分享按钮

文章作者:peas
本文地址:http://bugnotes.net/database/sql_mirror_not_connected_resolve.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论