原文:
SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!
在可更新订阅的同步复制中,有行筛选的项目表,移除的时候会提示重新初始化所有的快照并且应用此快照,这将导致所有的订阅数据库被重新初始化。
如下图,移除项目的时候提示:
此时如果取消则则取消操作
如果点击【标志为要重新初始化(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 指定对项目所做的更改可能会导致快照失效
执行命令则完成!
其他同步正常!
注意:此时不要在订阅数据库中操作刚才除去发布的表,因为还有触发器,得禁用或删除,否则队列代理会出错使订阅不能同步回发布数据库。
(操作其他表不会使队列代理出错,同步正常。)
若操作除去发布的表使队列代理出错后,可把表添加回去发布,队列代理自动回归正常!
(但是队列中断时期在订阅数据库中操作的数据,因没有同步回发布数据库中,只能手工同步)
此时若继续添加该项目(表)并且有行筛选,正常用界面进行操作,不会有任何提示。
再启动生成快照,此时只对此单个表生成快照并初始化单个表!
如图:
参考:
记住:在操作的时候,建议测试多次!