我有一个事务复制,订阅是从多年前的快照同步的。现在我有一个新表需要添加到复制中。问题是该表接近 TB,我不想为该表生成快照,而只想同步新数据,有点像从备份同步时。它只插入到表中,我可以稍后手动同步旧数据。
如何进行复制以在不生成快照的情况下开始传输数据。
我有一个事务复制,订阅是从多年前的快照同步的。现在我有一个新表需要添加到复制中。问题是该表接近 TB,我不想为该表生成快照,而只想同步新数据,有点像从备份同步时。它只插入到表中,我可以稍后手动同步旧数据。
如何进行复制以在不生成快照的情况下开始传输数据。
确实没有受支持的方法来执行您的要求。您可以使用备份/恢复,但那将是一个新的数据库。您可以尝试过滤文章,您只在特定创建日期后获取数据。
或者,您可以使用 SSIS 包或 T-SQL 脚本等手动过程来暂存架构和数据。但是快照或多或少是必需的项目。
如果您可以过滤 create_date > getdate() 然后在您有这样的列或标识列等之后手动添加行,我可能会做一篇文章快照或者可能会寻求过滤。
几个链接:
关于手动准备。
关于使用备份或其他方法。
关于过滤。
您要寻找的是“手动初始化订阅者”。为此,您可以将订阅者设置为使用一个选项,
@sync_type = 'replication support only'
这让系统知道您已经手动准备了环境。Here is Microsoft's documentation on initializing a subscriber manually.
显然要小心 ID 冲突,因为您正在绕过系统检查的所有内容并告诉它您确定所有内容都已经同步并开始复制。
在这种情况下,您甚至不需要为该发布运行快照代理,如果它已经很好的话。本文为您提供了更多背景知识。
编辑以下问题的问答:
看起来你会想要在你设置新出版物的评论中讨论的计划。如果您拥有双方的完全控制权并且可以停止所有事务,您可能只想重做订阅和发布以包含所有内容并执行 @sync_type = 'replication support only'。或者使用该表作为您的文章进行第二次发布,并仅将复制支持作为您拥有的 2 个选项发送出去。
按照这篇 MSDN文章中的步骤操作。去引用:
这是一个古老而好的解决方案 http://www.sqlservercentral.com/articles/Replication/119650/。每次我使用它时,对我来说就像魔法一样。
exec sp_changepublication @publication=N'testWOM',@property=N'allow_anonymous',@value='false';执行 sp_changepublication @publication=N'testWOM',@property=N'immediate_sync',@value='false';去