SQL SERVER2005 复制失败——插入重复键

本文记录了SQL SERVER2005复制过程中遇到的重复键冲突问题。在尝试重新初始化发布快照、管理主键以及调整全文索引后,问题仍然存在。最终发现是由于一个定时任务导致的重复数据插入。解决方法是停用该任务并重新初始化复制,从而恢复正常。总结中强调了发布库的约束规范和默认值复制问题的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

SQL SERVER2005 复制失败

 

时间:2012-02-14

错误现象:

 

尝试的命令:
if @@trancount > 0 rollback tran
(事务序列号: 0x0000D32900004BF9000600000000,命令 ID: 1)

错误消息:
违反了 PRIMARY KEY 约束 'PK_dv_topic'。不能在对象 'dbo.dv_topic' 中插入重复键。 (源: MSSQLServer,错误号: 2627)
获取帮助: http://help/2627
违反了 PRIMARY KEY 约束 'PK_dv_topic'。不能在对象 'dbo.dv_topic' 中插入重复键。 (源: MSSQLServer,错误号: 2627)
获取帮助: http://help/2627

 

 

检查:

1、重新初始化发布快照,并重新管理该表的主键。

因为该库使用了全文索引,并且在该表的主键列上创建了全文索引。而启用复制时,将库的全文索引禁用了。

故而考虑的解决方式是重新启用全文索引,然后禁用表主键使用全文索引,再禁用库全文索引。然后重新发布即可。

 但依然没有效果。

 

2、检查订阅服务器,因之前订阅服务器上的数据并不是在复制时完全生成,到时某些表的数据多次重复插入(具体原因待查)。

不得已,再保证好发布数据库中的表以及表本身的约束比较规范的情况下,删除并重建了订阅库,最后重新启动复制。

 

解决:

最后发现有一个定时任务,不知何时运行的,每隔15分钟就从发布库向订阅库写入新数据。就是这个定时任务导致的。

停用之。并重新初始化。恢复正常。

 

总结:

按理说,事务复制时,订阅库跟发布库应该是完全一致的,实际上,并不完全是:

1)发布库中表各列的默认值无法复制到订阅库。(因此,希望从订阅库备份数据恢复为主库的,这条路就不要考虑了,否则后果自负。)

2)发布库中表的约束要确保规范。不然就会出现重复发布数据的错误。

3)如果订阅库中已有数据,很可能是其他会话向定阅服务器写入

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值