代码之家  ›  专栏  ›  技术社区  ›  Sergey Lobanov

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

  •  1
  • Sergey Lobanov  · 技术社区  · 6 年前

    我读过一些非官方的文章,其中说合并复制实际上将数据存储为事务,并将它们复制为事务。但在msdn上没有官方信息,也没有任何官方消息来源。

    拜托,有人能帮我弄清楚吗?如果它存储事务-是否存在 MSMerge_contents 对应的交易?为什么它会过滤插入/更新/删除 here ?

    如果它不复制事务,那么它将实际数据存储在哪里进行复制?

    在我看来 合并复制不使用事务日志存储数据。

    表触发器(MSMeGGE触发器)在增量生成信息中转换每个事务,并将该信息存储在系统元数据表MSMeGeGeEngEng内容、MSMeGeGeTimbStand和MsMeGeGy历史中,在这里,您可以通过TabLink并加入ROWGID列来查找每一个表(查找MSMeGeEngEng内容和MSMeGeGeTimbStand)。

    复制代理比较发布服务器和订阅服务器的MSMeGeGEY内容,它根据行的行数和每行的生成号复制新行并改变现有的行。它使用实际表中的实际行,由rowguid连接。 对于msmerge_tombstone table也是这样。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   M.Ali    6 年前

    合并复制或对于任何类型的复制总是从快照初始化的初始步骤开始,在发布服务器上创建快照、所有数据和对象并发送给所有订阅服务器。(在此步骤中,实际数据正在从发布服务器移动到订阅服务器)。

    事务复制

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

    合并复制

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

    数据移动只发生在第一步(快照初始化)之后,它的所有日志和代理移动和同步数据。我希望这能有帮助。