可更新订阅的事务复制错误:列名 'msrepl_tran_version' 无效

问题描述:

  首先,不知道你有没有类似的经历,在可更新订阅的事务复制,当初始化订阅时,发生了类似这样的错误:列名 'msrepl_tran_version' 无效 。(源: MSSQLSERVER,错误号: 207 )

  

图1.通过复制监视器来检查错误

  

  图2.通过作业的历史记录来检查错误

问题分析:


  我们知道,在允许可更新订阅的发布中发布表时,会将列 msrepl_tran_version 添加到表中。本文章中,在发布表Product是把列msrepl_tran_version添加到表中。

 
CREATE TABLE [ dbo ] . [ Product ] (
[ Name ] [ nvarchar ] ( 50 ) NULL ,
[ ID ] [ uniqueidentifier ] NOT NULL ,
[ msrepl_tran_version ] [ uniqueidentifier ] NOT NULL ,
CONSTRAINT [ PK_Product ] PRIMARY KEY CLUSTERED
(
[ ID ] ASC
)
WITH (PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ]
)
ON [ PRIMARY ]

GO

ALTER TABLE [ dbo ] . [ Product ] ADD DEFAULT ( newid ()) FOR [ ID ]
GO

ALTER TABLE [ dbo ] . [ Product ] ADD CONSTRAINT [ MSrepl_tran_version_default_A796A587_FA04_4EC3_BD9E_6F4B54F32206_2105058535 ] DEFAULT ( newid ()) FOR [ msrepl_tran_version ]
GO
 

而文章开头部分,描述了初始化订阅时,列msrepl_tran_version无效。在详细信息里面可以,错误发生在 create procedure [dbo].[sp_MSins_dboProduct] 过程中。在create procedure [dbo].[sp_MSins_dboProduct] 动作之前,没有对订阅数据库表Product增加字段msrepl_tran_version。 接下来,去看看发布表Product的项目属性:

  

  图3. 发布表Product的项目属性

  从图3. 可以看到【目标对象】中的【名称已被使用时的操作】选的是【删除数据。如果项目有行筛选器,则仅删除与该筛选器匹配的数据】,这里的就会导致,在初始化订阅的时候,不会对表Product增加字段msrepl_tran_version。也因为导致了,文章开头说的那错误:列名 'msrepl_tran_version' 无效 。(源: MSSQLSERVER,错误号: 207 )

  

提示在允许可更新订阅的发布中发布表时,会将列 msrepl_tran_version 添加到该表。 此列用于更改跟踪和冲突检测。 如果订阅服务器更新的数据副本已过时,立即更新中将发生冲突。

问题解决:


  出现列名 'msrepl_tran_version' 无效,问题原因找出来了,接下来,就是解决问题,这里从两个方法去解决,你可以根据自己实际的生产环境,选择哪一种更快捷的方法:

  1. 在发布表的项目属性,【目标对象】中的【名称已被使用时的操作】选【删除现有对象并创建新对象】

  

  图4.设置发布表Product的项目属性。

  设置完成后,需要重新初始化各个订阅,这样就ok了。

  

  图5.同步复制初始化操作过程

  

  2. 在订阅数据库表中,增加字段msrepl_tran_version

Alter Table Product Add msrepl_tran_version uniqueidentifier Not null Default ( newid ())

  在订阅数据库表Product增加字段msrepl_tran_version后,保持之前发布表,【目标对象】中【名称已被使用时的操作】选的【删除数据。如果项目有行筛选器,则仅删除与该筛选器匹配的数据】。或者选择【现有对象保持不变】。然后就等初始化订阅,或手工启动初始化订阅。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值