SqlServer教程

SQL Server ->> AlwaysOn高可用副本同步失败

本文主要是介绍SQL Server ->> AlwaysOn高可用副本同步失败,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前段时间我们生产环境有台alwayson高可用副本挂了,一开始是发现数据库账号不能登录,以为是密码过期,登录到副本上面发现数据库同步中断。

 

这个时候肯定第一时间是先查下SQL SERVER日志看下是什么报错原因引起的。

 

 

然后在SQL SERVER日志里面找到凌晨2点15分30秒的时候目标数据库有一条错误日志,提示Always On Availability Groups data movement for database 'xxxx' has been suspended for the following reason: "system" (Source ID 2; Source string: 'SUSPEND_FROM_REDO'). To resume data movement on the database, you will need to resume the database manually.  ,紧接着的一条日志 During redoing of a logged operation in database 'XXXX' (page (1:9) if any), an error occurred at log record ID (372842:430056:1). Typically, the specific failure is previously logged as an error in the operating system error log. Restore the database from a full backup, or repair the database.

 

 

第一条日志提示日志redo中断,第二条日志直接指出哪条日志的redo失败。

也就是SQL SERVER卡着这条log的redo上面,所以数据库进入Not Synchronizing状态。

后面我们是按照常规的做法,ALTER DATABASE XXX SET HADR RESUME尝试恢复数据库。

这是常规微软推荐的做法,让数据库尝试自然恢复。

 

但是执行完命令后,第一时间打开windows 事件查看器查看下MSSQLSERVER日志提示,还是提示无法redo (372842:430056:1)。也就是SET HADR RESUME没办法恢复数据库。

其实这个问题发生过不止一次,这算是第二次了吧。后来我们咨询了微软(我们的服务器是Azure云,SQL SERVER是RDS版),微软的工程师让我们把SQL SERVER服务重启就行。

两次都是重启SQL SERVER解决问题,只是日志redo的时间会比较久。

重启SQL SERVER后刷新一下SQL SERVER 日志,看到有提示数据库在恢复中。

 

随后提示恢复完成

 

 

 

然后注意通过监控脚本观察副本的同步状态以及剩余redo日志,只要有变化,剩余redo日志在减少,就说明恢复成功。

 

 

 

这篇关于SQL Server ->> AlwaysOn高可用副本同步失败的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!