zoukankan      html  css  js  c++  java
  • 可更新订阅的事务复制错误:列名 'msrepl_tran_version' 无效

    问题描述:

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

       

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

      

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

    问题分析:


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

    View Code
    CREATE TABLE [dbo].[Product](
        
    [Name] [nvarchar](50NULL,
        
    [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  = ONON [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后,保持之前发布表,【目标对象】中【名称已被使用时的操作】选的【删除数据。如果项目有行筛选器,则仅删除与该筛选器匹配的数据】。或者选择【现有对象保持不变】。然后就等初始化订阅,或手工启动初始化订阅。

        (完.)

     

    No incapable except unthinkable.                 

    MSN:weiguohao008@hotmail.com

     


  • 相关阅读:
    《如何评价Kaiming He的Momentum Contrast for Unsupervised?》
    多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
    GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
    上Github,北大、清华、浙大、中科大4大名校课程在线学,加星总数超1.8万
    使用Python+OpenCV进行图像处理(二)| 视觉入门
    重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
    巴黎不哭!十亿数据精准扫描,帮卡西莫多重新找回他的玫瑰花窗
    机器学习算法系列:FM分解机
    百道Python面试题实现,搞定Python编程就靠它
    学习GAN必须阅读的10篇论文
  • 原文地址:https://www.cnblogs.com/wghao/p/2041714.html
Copyright © 2011-2022 走看看