求教:数据库复制问题,订阅时报错,如何解决?

SpringChan 2003-08-27 09:43:51
我有一个数据库进行事务发布,当订阅数据库选择不进行初始化架构与数据时(订阅数据库已有相应的数据表和数据),在建立订阅时产生错误,“违反了PRIMARY KEY约束,'PK_@snapshot_seqnos_75D15A31'。不能在对象'#74DD35F8'中插入重复键。”。是什么原因导致的?
我在订阅数据库的表和数据是用初始化架构和数据建立的,这样可以建立订阅,但停止订阅后(没有改变数据),再用不进行初始化架构和数据建立订阅时就出错。同样处理,有个数据库可以,但另一个数据库就报错。
应该不是数据的问题,在分发代理程序的错误提示中的错误消息为“{call sp_MSget_repl_commands(2, ?, 0, 7500000)}”,判断是在订阅过程中在distribution数据库中产生的错误,我将在其它服务器上正常的发布数据库和订阅数据库备份到此服务器上进行订阅时也报同样的错误,原来的服务器没有安装SP3,这台服务器安装了SP3。
...全文
48 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SpringChan 2003-09-10
  • 打赏
  • 举报
回复
我将打了sp3的分发数据库的系统存储过程sp_msget_repl_commands进行修改后就可以了,将其中定义临时表中的一个字段的数据类型修改,declare @snapshot_seqnos table(subscription_seqno varchar(16) primary key),将varchar(16)改为varbinary(16)。
SpringChan 2003-08-29
  • 打赏
  • 举报
回复
我现在判断是在数据库打了SP3补丁后的问题,没有打补丁时发布订阅正常
shaken 2003-08-29
  • 打赏
  • 举报
回复
具体解决方式看看ms sql 在线帮助中的【复制】-【复制数据考虑事项】一节。
shaken 2003-08-29
  • 打赏
  • 举报
回复
不是,就算sql70的也会出现这种情况,在复制中使用 IDENTITY 值。

在为某列指派 IDENTITY 属性时,系统自动为表中插入的新行生成连续递增的编号。因为标识值通常唯一,所以标识列常定义为主键。

在发布中包含标识列和可在订阅服务器上插入新行的复制拓扑中,可能需要额外的配置以免出现重复标识值或违反约束。

为说明如何管理带有副本的标识值,假定来自发布服务器 A 的三行数据(含标识值 1、2 和 3)

被复制到订阅服务器 A 而且订阅服务器 A 允许插入。如果同一项目中插入两个新行,一行在发布服务器 A,一行在订阅服务器 A,并且复制代理程序未采取其它措施,则两行数据的标识值都赋为 4。复制代理程序会尝试在发布服务器和订阅服务器之间复制新行。如果成功,每个副本中都存在标识值为 4 的两个不同的行。结果,每个发布项目将包含多个具有相同标识值的行。如果标识列定义为主键或定义有唯一约束,则不会复制数据。

复制提供几个选项以保证相同的标识值不赋给插入不同副本中的行,或避免发生违反主键约束。
xiangqy 2003-08-28
  • 打赏
  • 举报
回复
我的数据库今天也出现该问题!找到原因通知我一声!!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧