【问题标题】:Merge Replication - Triggers firing on Both Publisher and Subscriber合并复制 - 在发布者和订阅者上触发触发
【发布时间】:2011-10-12 01:08:39
【问题描述】:

服务器版本:SQL Server 2008R2 客户端版本:SQL Server Express 2008R2

我在运行合并复制过程时遇到了似乎是锁定问题。似乎是对订阅者进行更改并与发布者同步时。我很肯定来自触发器,因为它们似乎再次向发布者触发,并且可能试图再次将数据发送给订阅者。我在触发器中添加了“NOT FOR REPLICATION”,但这似乎没有帮助。我也研究并尝试添加以下子句。

DECLARE @is_mergeagent BIT

SELECT @is_mergeagent = convert(BIT, sessionproperty('replication_agent'))

IF @is_mergeagent = 0 --IF NOT FROM REPLICATION

这似乎也没有帮助。您如何使用插入/更新触发器处理合并复制?我可以阻止他们“双重”射击吗?

永远感谢这些信息。

--S

【问题讨论】:

  • 你的意思是他们也在向订阅者开火?
  • 嗨亚伦,它在订阅者的初始插入时触发,然后在同步时触发发布者(在不应该创建第二个条目时)然后第二个条目返回给订阅者在同一个同步运行中......这似乎导致了锁定。

标签: sql-server sql-server-2008 replication sql-server-express


【解决方案1】:

不确定触发器是否触发,但SESSIONPROPERTY 将在此处给出 NULL。所以后面的测试总是失败。

<Any other string> [给出] NULL = 输入无效。

你的意思可能是APP_NAME

这至少应该有助于故障排除...

【讨论】:

    【解决方案2】:

    我会在导致问题的表中添加一个位字段,并将其称为“已处理”或类似的名称。让它默认为 false,然后在触发器更新该记录时设置为 true,并让触发器在执行任何操作之前检查 false 值,否则不执行任何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2010-12-21
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多