首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并进程无法更新订阅列表

合并进程无法更新订阅列表
EN

Stack Overflow用户
提问于 2009-08-31 15:12:04
回答 2查看 2.8K关注 0票数 0

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

违反唯一键约束' UNIQUE _pubsrvdb‘。无法在对象‘dbo.sysmergesubscription’中插入重复的键。(来源: MSSQLSERVER,错误号: 2627)

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-11 19:05:54

问题是其中一个订阅服务器在系统表中具有旧的发布和订阅,这些发布和订阅是在整个系统中复制的。这导致了唯一键约束的违反。

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

我们能够识别sysmergepublication中的有效记录,因为我们在复制无效条目之前就知道了这个表的状态。此forum post向您展示了如何在需要时定位无效发布。

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
delete from sysmergesubscriptions 
      where pubid not in ( select pubid from sysmergepublications)

注意:上面的代码示例假定sysmergepublication只包含有效的发布

Alternatively:您可以使用EXEC sp_removedbreplication @dbname='<dbname>'从数据库中完全删除复制。此命令显示为从数据库中删除所有复制触发器。

票数 1
EN

Stack Overflow用户

发布于 2012-09-19 11:25:24

在我的例子中,我处理多个订阅,只是不得不适应删除有问题的订阅:

代码语言:javascript
复制
delete
from sysmergesubscriptions
where pubid not in (select pubid from sysmergepublications)
and subscriber_server = 'SUBSCRIPTIONSERVER'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1357941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档