在可更新订阅的同步复制中,有行筛选的项目表,移除的时候会提示重新初始化所有的快照并且应用此快照,这将导致所有的订阅数据库被重新初始化。
如下图,移除项目的时候提示:
此时如果取消则则取消操作
如果点击【标志为要重新初始化(M)】,勾选【立即生成新快照】,则立即生成新快照并初始化所有!——千万别操作!
如果点击【标志为要重新初始化(M)】,不勾选【立即生成新快照】,则下次启动快照时立即生成新快照并初始化所有!——千万别操作!
解决办法:
不要使用界面操作,用sql代码执行!
--如, 一个数据库有多个订阅 exec sp_dropsubscription @publication=N'发布名次A', @article=N'表名', @subscriber=N'all' exec sp_droparticle @publication = N'发布名次A', @article = N'表名', @force_invalidate_snapshot = 0 GO exec sp_dropsubscription @publication=N'发布名次B', @article=N'表名', @subscriber=N'all' exec sp_droparticle @publication = N'发布名次B', @article = N'表名', @force_invalidate_snapshot = 0 GO @subscriber=N'all' --要删除其订阅的订阅服务器名。 subscriber 的数据类型为 sysname,无默认值。 --如果为 all,则删除所有订阅服务器的所有订阅。 @force_invalidate_snapshot = 0 --0 指定对项目所做的更改不会导致快照失效。 --1 指定对项目所做的更改可能会导致快照失效
执行命令则完成!
其他同步正常!
注意:此时不要在订阅数据库中操作刚才除去发布的表,因为还有触发器,得禁用或删除,否则队列代理会出错使订阅不能同步回发布数据库。
(操作其他表不会使队列代理出错,同步正常。)
若操作除去发布的表使队列代理出错后,可把表添加回去发布,队列代理自动回归正常!
(但是队列中断时期在订阅数据库中操作的数据,因没有同步回发布数据库中,只能手工同步)
此时若继续添加该项目(表)并且有行筛选,正常用界面进行操作,不会有任何提示。
再启动生成快照,此时只对此单个表生成快照并初始化单个表!
如图:
参考:
记住:在操作的时候,建议测试多次!