重新发布时合并复制未通过事务复制接收更新

Posted

技术标签:

【中文标题】重新发布时合并复制未通过事务复制接收更新【英文标题】:Merge Replication not receiving updates via Transaction Replication when republishing 【发布时间】:2014-11-10 15:05:31 【问题描述】:

我正在尝试从服务器 Z 迁移到服务器 A 和 B,服务器 Z 复制到两个数据中心的十几个订户,服务器 A 和 B,每个数据中心一个。为了避免数据中心之间的中断,我们正在考虑在 A 和 B 之间进行合并复制。

我最初的计划是使用 Z 并使用事务性转到 A,然后将其复制到 B。然后,当我们迁移进程以使用 A 时,我们可以一次滚动一个进程。

但是,虽然我可以直接对 A 或 B 进行更新并将它们发送到另一台服务器,但通过事务复制 (Z) 对 A 的更新不会到达 B!

身份设置为 NOT FOR REPLICATION,但其余部分几乎是标准的。

【问题讨论】:

为什么要在 Z 和 A 之间进行事务处理,然后在 A 和 B 之间合并?您可以设置一个合并复制方案 Z->A->B,然后摆脱 Z。 有趣的想法,@PhilippeGrondier。没有考虑过,主要是因为我想首先确保一切都坚如磐石,并且不希望任何工作意外地“上游”。但这是一个有趣的想法。 合并复制确实“坚如磐石”,事务复制仅在有限的情况下才有意义。 【参考方案1】:

好问题。

您需要将参与事务发布的所有合并文章的合并文章属性 @published_in_tran_pub 设置为 true。您可以在服务器 A 上使用sp_changemergearticle 执行此操作:

    EXEC sp_changemergearticle 
        @publication = 'MyPublication', 
        @article = 'MyArticle', 
        @property = 'published_in_tran_pub', 
        @value = 'true';

您可以随意执行此更改,无需生成新快照或重新初始化订阅。

【讨论】:

以上是关于重新发布时合并复制未通过事务复制接收更新的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver 2008同步复制创建后新增表/函数/存储过程(不重新初始化快照)

SQL Server在复制时触发

MySQL5.7多源复制配置过程

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

如何在 Python 解释器中重新导入更新的包? [复制]

MySQL 主从复制介绍