【问题标题】:SQL Server 2005 Replication Integrity Violations SQL Server, Error number: 28549SQL Server 2005 复制完整性违规 SQL Server,错误号:28549
【发布时间】:2011-06-24 17:49:44
【问题描述】:

我希望有人可以帮助我解决一个非常奇怪的问题。

当用户同步他们的设备时,他们会收到此错误:

无法重新应用行操作 由于违反完整性。查看 发布过滤器。 [表= 资产细节,操作 = 插入/更新,RowGuid = {C92038E4-18EA-EE11-4C9F-2952CDECFCC7} ] HRESULT 0x80040E2F (28549)

当我们去服务器查询这一行时,它的父行(表称为 Asset)似乎是有效且正确的。当我们探索完整的过滤树时(为了更好的描述),所有数据似乎都是正确的。

从我们在数据库中看到的情况来看,应该发送给订阅者的数据遵守数据库中的参照完整性约束。它也服从发布过滤器。

我们为什么会在订阅者身上遇到这个问题?我们如何解决这个问题?

另外,是否可以准确记录正在发送到设备的数据 - 如果不是数据,针对 sdf 文件运行的语句以确定发生的情况?

提前感谢您的帮助,

莫里森

【问题讨论】:

  • 我们遇到了完全相同的问题。在一种情况下,我们能够通过删除有问题的外键并尝试在不强制引用完整性的情况下解决这个问题。我在这个问题上提供了赏金,因为关于这个问题的任何信息都很少。最近在 Microsoft connect 上发布了一个类似的问题,但没有解决:connect.microsoft.com/SQLServer/feedback/details/668349/…

标签: sql-server sql-server-ce replication referential-integrity merge-replication


【解决方案1】:

是否与在您的约束中使用“不用于复制”条款有关。见http://msdn.microsoft.com/en-us/library/ms180843.aspx或http://msdn.microsoft.com/en-us/library/ms152529.aspx

因此,当使用 OrderHeaders 和 OrderLines 的复制时,复制可能会在 Orderheader 记录之前将 OrderLines 插入您的订阅者中,然后您就会遇到违规。

指定不用于复制意味着当通过复制系统插入行时不会对约束进行检查,因为它们已经在发布者处进行了。

【讨论】:

    【解决方案2】:

    不确定这在技术上是否是一个答案,但它是我们遇到的问题的答案。

    我们发现一位同事在我们的数据库中删除了 FK 关系,却没有告诉任何人。因此,当我们查看数据库和数据时,一切正常。

    只有当我们将架构与我们的测试版本进行比较时,我们才意识到发生了什么。

    因此,在这种情况下,答案是使用单独的数据库验证架构。

    【讨论】:

      【解决方案3】:

      命令通常通过存储过程应用于订阅者。当您的订阅者重新连接时运行分析器以查看正在运行的内容以及使用哪些参数。这可能会给你一个关于正在发生的事情的线索。不幸的是,我不能说得更具体了。

      【讨论】:

      • 我们试过这个,但没有得到多少我们能够感觉到的。根据我们从设备获得的信息,我们提供了行 guid 和表格,但我们无法进一步跟踪它。
      • 如果您知道导致问题的行,那么您几乎解决了问题。该记录很可能是孤儿记录,请检查以确保满足所有外键约束并且父项未被删除。
      猜你喜欢
      • 2010-10-21
      • 1970-01-01
      • 2013-01-08
      • 2011-01-10
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      相关资源
      最近更新 更多