合并复制实际存储数据的位置是什么?

时间:2018-05-28 22:36:10

标签: sql-server merge-replication

我读过一些非官方文章,说合并复制实际上将数据存储为事务并将它们复制为事务。但是在MSDN或我可以达到的任何官方来源上都没有官方信息。

拜托,有人能说清楚吗?如果它存储交易 - MSMerge_contents中是否有相应交易的链接?为什么它按照here所述过滤插入/更新/删除?

如果它不复制事务,它存储实际数据以进行复制?

我个人认为合并复制不会使用事务日志来存储数据。

表触发器(MSmerge触发器)转换增量生成信息中的每个事务,并将该信息存储在系统元数据表MSmerge_contents,MSmerge_tombstone和MSmerge_genhistory中,您可以通过tablenick连接每个表并使用rowguid列查找行(对于MSmerge_contents和MSmerge_tombstone) 。

Replication Agent会比较发布者和订阅者的MSmerge_contents内容,它会根据rowguid列和每行的代数复制新行并更改现有行。它使用实际表中的实际行,通过rowguid连接。 MSmerge_tombstone表也是一样。

它不使用事务日志。它甚至没有激活日志阅读器。

1 个答案:

答案 0 :(得分:1)

合并复制或者就此而言,任何类型的复制始终从快照初始化的初始步骤开始,在发布者上创建所有数据和对象的快照并发送给所有订阅者。 (在此步骤中,实际数据将从Publisher移至订阅者)。

交易复制

将初始快照发送给订阅者后,对于事务复制,SQL Server从发布服务器读取事务日志并将其推送到分发服务器和分发服务器发送(或订户提取,具体取决于用户的类型)日志记录到所有订户。这些日志通过触发器和一些元数据表在订户上重放。

合并复制

在合并复制中将初始快照传递给订阅者后,SQL Server开始从发布服务器和所有订阅服务器读取事务日志,并将它们发送到合并代理程序(此代理程序仅适用于合并复制,它不存在于任何其他类型的复制中),合并代理使用特定算法来排序应用插入/更新/删除的顺序(通常先删除,然后更新,最后插入应用)到所有参与订阅者和发布者,一旦合并代理整理了订单,日志就会像在事务复制中一样在分发服务器上排队,并被推送/拉到订阅者。

数据移动仅在第一步(快照初始化)中发生,之后是关于日志和代理移动并同步数据的全部内容。我希望这有帮助。