【问题标题】:Bidirectional replication update record双向复制更新记录
【发布时间】:2009-10-07 08:33:59
【问题描述】:

我想向您介绍我与 SQL Server 2005 双向复制相关的问题。 我需要什么? 我的团队负责人希望使用两个数据库之间的双向复制来解决我们的一个问题,每个数据库都由不同的应用程序使用。一个应用程序在表 A 中创建记录,更改应复制到第二个数据库,复制到表 A 的副本中。当第二个服务器上的数据发生更改时,必须将这些更改传播回第一个服务器。 我正在尝试在一台运行 SQL Server 2005 的服务器上实现两个数据库之间的双向事务复制。我已经设法使用脚本进行设置,建立了 2 个发布和 2 个带有环回检测的只读订阅。创建分发数据库,​​启用两个数据库上的发布。发行商和出版商都起来了。我们正在使用一些规则来控制哪些记录将被复制,因此我们需要在复制期间调用我们的自定义存储过程。因此,文章设置为使用更新、插入和删除自定义存储过程。

到目前为止还不错,但是呢?

一切正常,正在复制更改,直到同时在两个表上完成更新或在复制更改之前(这大约需要 3-6 秒)。两条记录最终会得到不同的值。

UPDATE db1.dbo.TestTable SET Col = 4 WHERE ID = 1
UPDATE db2.dbo.TestTable SET Col = 5 WHERE ID = 1

结果:

db1.dbo.TestTable COL = 5

db2.dbo.TestTable COL = 4

但我们希望最后的更改赢得复制。请问有什么办法可以解决我的问题吗?如何确保两条记录中的值相同?还是有比这种复制更简单的解决方案?

我可以提供我正在使用的示例复制脚本。
我期待你的想法,
米雷克

【问题讨论】:

    标签: sql replication sql-update bidirectional


    【解决方案1】:

    我认为在两个表上添加 dateUpdated 字段可能会有所帮助。这样,在您的复制代码中,仅当 dateUpdated 大于已存储的记录时才会更新记录。

    dateUpdated 字段显然会存储原始记录更新时的日期时间,而不是执行复制时的日期时间

    【讨论】:

    • 但这意味着,我必须对包含此日期时间值的更新列进行所有更新,对吗?
    • @Mirek:如果您遵循 kristof 的建议,您将需要一个带有 NOT FOR REPLICATION 子句的 INSTEAD OF 触发器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2013-07-18
    • 2015-10-18
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多