我在一个sql-server 2005实例和多个sql-server 2000实例之间设置了复制。复制将成功一段时间,然后我收到以下错误消息:
违反唯一键约束' UNIQUE _pubsrvdb‘。无法在对象‘dbo.sysmergesubscription’中插入重复的键。(来源: MSSQLSERVER,错误号: 2627)
当我检查sysmergesubscriptions时,有额外的条目似乎来自2000个实例。
我的问题是,有没有人遇到过这个问题,你是如何处理它的(没有重建整个事情)
发布于 2009-09-11 19:05:54
问题是其中一个订阅服务器在系统表中具有旧的发布和订阅,这些发布和订阅是在整个系统中复制的。这导致了唯一键约束的违反。
一旦我们删除了这些旧的条目,我们就能够重新启动复制。
我们能够识别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只包含有效的发布
Alternatively:您可以使用EXEC sp_removedbreplication @dbname='<dbname>'从数据库中完全删除复制。此命令显示为从数据库中删除所有复制触发器。
发布于 2012-09-19 11:25:24
在我的例子中,我处理多个订阅,只是不得不适应删除有问题的订阅:
delete
from sysmergesubscriptions
where pubid not in (select pubid from sysmergepublications)
and subscriber_server = 'SUBSCRIPTIONSERVER'https://stackoverflow.com/questions/1357941
复制相似问题