事物日志中如果大的发布项目(Article)出问题了,并且影响了系统的使用,如何快速的解决?

一般的做法是重新用快照或者备份初始化,但是如果出问题的表非常大(上亿的记录,几十GB的数据),使用初始化是非常耗费时间的。

其实可以重建发布订阅,而不用快照初始化的方式解决,这样就极大的节省了初始化的时间,而且不会对主库的表加锁。

具体的步骤如下:

1.  将发布订阅的脚本导出到SSMS新的查询窗口

事物复制中大项目(Large Article)出问题如何快速修复-LMLPHP

这里我们需要注意的是两个参数:

execsp_addarticle  @pre_creation_cmd =N'drop'

drop:表示删除存在的对象重新创建

exec sp_addsubscription  @sync_type = N'automatic'

Automatic:数据和Schema由发布表初始化

2.  修改脚本,将上面的两个属性修改为:

@pre_creation_cmd=’none’ (数据架构都已经在订阅段准备好了,不需要snapshot同步了).

@sync_type = N'replication support only' (架构和数据已经初始化)

3.  使用SSMS删除发布订阅

4.  同步数据,可以使用Redgate’sData Compare比对数据将发布订阅表数据完全同步,也可以通过其他方法比如BCP之类的。

5.  数据同步完成后执行第二步保存的脚本,就会创建新的发布和订阅,数据保持同步。

通过这样的步骤相比Snapshot初始化时间大大减少。因为要保证两边的数据完全同步,所以在创建发布订阅的过程中不能有新的事物发生,所以要有停机时间。使用之前一定要自己测试哦。

05-11 17:21