SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!相关的知识,希望对你有一定的参考价值。

原文: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 指定对项目所做的更改可能会导致快照失效


执行命令则完成!

其他同步正常!

注意:此时不要在订阅数据库中操作刚才除去发布的表,因为还有触发器,得禁用或删除,否则队列代理会出错使订阅不能同步回发布数据库。

(操作其他表不会使队列代理出错,同步正常。)

若操作除去发布的表使队列代理出错后,可把表添加回去发布,队列代理自动回归正常!

(但是队列中断时期在订阅数据库中操作的数据,因没有同步回发布数据库中,只能手工同步)


此时若继续添加该项目(表)并且有行筛选,正常用界面进行操作,不会有任何提示。

再启动生成快照,此时只对此单个表生成快照并初始化单个表!

如图:

技术分享图片

技术分享图片
参考:

sp_dropsubscription

sp_droparticle


记住:在操作的时候,建议测试多次!






















以上是关于SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!的主要内容,如果未能解决你的问题,请参考以下文章

两个服务器做数据库同步(sql server2008)发布和订阅提示成功但是在复制监视器中有红叉,跟进到订阅监视

Sql Server同步之订阅

如何实现sql server实时备份数据库

sql server 2008新建好了发布订阅后,在每天自动同步完成后怎么删除发布数据库中快照文件

SQL Server 事务复制分发到订阅同步慢

SQL Server 2008 数据库同步的两种方式 (发布订阅)