如何处理SQL合并复制冲突

时间:2013-01-08 22:49:26

标签: sql replication conflict merge-replication

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

我有4个SQL 2008数据库,使用合并复制在互联网上同步。 1个发布者和3个订阅者。

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

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

其他人在处理复制冲突时做了什么?

2 个答案:

答案 0 :(得分:2)

来自Advanced Merge Replication Conflict Detection and Resolution

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

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

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

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

答案 1 :(得分:0)

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

  • 添加最后更新日期'每个表格中的字段
  • 设置' Microsoft SQL Server DATETIME(稍后获胜)冲突解决方案'作为复制架构中的默认冲突解决程序

然后冲突每月降到几个,并且可以训练用户通过冲突查看器界面对其进行处理,有三个基本规则:

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

就是这样。