合并过程无法更新订阅列表

时间:2009-08-31 15:12:04

标签: sql-server synchronization replication

我在sql-server 2005实例和多个sql-server 2000实例之间建立了复制。在我收到以下错误消息之前,复制将成功一段时间:

违反UNIQUE KEY约束'unique_pubsrvdb'。无法在对象'dbo.sysmergesubscriptions'中插入重复键。 (来源:MSSQLSERVER,错误号:2627)

当我检查sysmergesubscriptions时,有额外的条目似乎来自2000个实例。

我的问题是有没有人遇到过这个问题,你是如何处理它的(没有重建整个事情)

2 个答案:

答案 0 :(得分:1)

问题是其中一个订阅者在系统表中有旧的发布和订阅,这些发布和订阅在整个系统中被复制。这导致违反UNIQUE KEY约束。

一旦我们删除了这些旧的entires,我们就能够重新启动复制。

我们能够在sysmergepublication中识别有效记录,因为我们在复制无效条目之前知道了该表的状态。如果您需要,此forum post会向您展示如何定位无效的出版物。

我们使用以下sql检查其他订阅条目:

select * 
  from sysmergepublications

select * 
  from sysmergesubscriptions 
 where pubid in ( select pubid from sysmergepublications) 

select * 
  from sysmergesubscriptions 
 where pubid not in ( select pubid from sysmergepublications) 

以下是我们用于删除无效订阅的SQL:

delete from sysmergesubscriptions 
      where pubid not in ( select pubid from sysmergepublications)

注意:上面的代码示例假定sysmergepublication仅包含有效的出版物

另外:您可以使用EXEC sp_removedbreplication @dbname='<dbname>'完全删除数据库中的复制。此命令似乎从数据库中删除所有复制触发器。

答案 1 :(得分:1)

在我处理多个订阅的情况下,只需要适应删除有问题的订阅:

delete
from sysmergesubscriptions
where pubid not in (select pubid from sysmergepublications)
and subscriber_server = 'SUBSCRIPTIONSERVER'