上周末发现db02组的alwayson 同步异常,所以权衡了各个方法后决定采用重新加载DYY数据库的方式来修复异常。
但是当在主库上执行全备和log备的操作时,发现以下的错误信息。
The log was not truncated because records at the beginning of the log are pending replication. Ensure the Log Reader Agent is running or use sp_repldone to mark transactions as distributed.
当时的log已增长到了380G,且无法trancate,这样就造成了同步后的从库上的lsn异常,无法再重新加载DYYdb的alwayson。
网上搜索了一下资料,找到了以下的解决方法
--run
sp_replicationdboption 'DYYdb','publish','true'
--then run sp_repldone with the following parameters
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
--then unpublish the database
sp_replicationdboption 'DYYdb','publish','false'
--Run
dbcc traceon(3604)
dbcc opentran --- against the database to ensure there are no replicated transactions.
这时可以看到结果中会显示还有活动的transaction连接在DYYdb上
而这就引起了开头备份log文件时所遇到的错误。
kill 掉这个Session。
注意:由于我们的数据库有开启Log备份,请确认将log备的job停止后在做log的备份,不然将会导致加载到AG组失败。
另外如果我们的cdc在备份时出于综合考虑而关闭,之后需要用 sp_replflush 来开启,
否则重新启用Cdc job后会得到以下的错误:
消息
已以用户 SH-DM-DB03\dba_monitor 的身份执行。 另一个连接已经在当前数据库中为变更数据捕获运行 'sp_replcmds'。
[SQLSTATE 42000] (错误 22903) 数据库 'DYYdb' 的捕获作业对 sp_MScdc_capture_job 的调用失败。请查看当前会话中的以前错误以确定原因。
[SQLSTATE 42000] (错误 22864)
后续的步骤请参照附件中的3.2, 3.3完成数据库的备份和恢复后,右击添加数据库将DYYdb重新加到AG组,后续的不需要修改按默认添加下去就好
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16131092/viewspace-2137897/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16131092/viewspace-2137897/