【问题标题】:How to handle SQL Merge Replication Conflicts如何处理 SQL 合并复制冲突
【发布时间】:2012-12-22 22:06:18
【问题描述】:

我有一种情况,我正在寻求一些指导。

我有 4 个使用合并复制通过 Internet 同步的 SQL 2008 数据库。 1 个发布者和 3 个订阅者。

通常,在数据库中输入的记录也只能从同一个数据库更新,并且一切正常。但是,有时在发布者处对在订阅者处创建的记录进行更新,如果自上次同步(通常为 60 秒)在订阅者上更新同一记录,则可能会导致冲突。

我使用了 SSMS 中内置的冲突解决程序,这对我来说效果很好(我了解架构和基础数据)。但是,我正在寻找一种解决方案,在这种解决方案中,最终用户(管理人员)可以在冲突发生时收到警报,并在没有我任何干预的情况下以他们可以理解的方式解决冲突?

当不得不处理复制冲突时,其他人做了什么?

【问题讨论】:

    标签: sql replication conflict merge-replication


    【解决方案1】:

    来自Advanced Merge Replication Conflict Detection and Resolution

    当使用默认的冲突解决程序和客户端类型订阅时,写入发布者的第一个更改将赢得冲突。当使用默认的冲突解决程序和服务器类型订阅时,优先级值被分配给各个订阅者,并且在具有最高优先级的节点上所做的更改会赢得冲突。

    默认情况下会发生此行为,即使发生冲突并出现在冲突查看器中,也无需手动干预。冲突查看器仅提供一种查看保留期内发生的冲突并手动更改结果的方法。

    如果您需要默认解决机制未提供的冲突解决行为,您可以选择:

    业务逻辑处理程序或自定义冲突解决程序将提供一种在发生冲突时发出警报并根据业务需求自动解决冲突的方法。

    【讨论】:

      【解决方案2】:

      和您一样,我们首先实现了内置的冲突解决程序,但我们经常需要手动解决多个复制冲突。然后我们决定通过以下方式改进我们的系统:

      • 在每个表中添加“最后更新日期”字段
      • 将“Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver”设置为我们复制架构中的默认冲突解决程序

      冲突下降到每月只有几个,并且可以通过三个基本规则训练用户通过冲突查看器界面处理它们:

      • 如果有两条记录被修改,请选择较新的(我仍然不知道为什么没有自动处理这些记录,但有一些)。
      • 如果没有较旧的(同时修改),则选择任何(相当常见的“假”冲突情况)
      • 如果一条记录被删除而另一条记录被修改,选择删除

      就是这样。

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 2015-06-24
        • 2012-05-09
        • 2016-12-18
        • 2012-03-18
        相关资源
        最近更新 更多