可更新订阅的事务复制错误:列名 'msrepl_tran_version' 无效
2013-01-06 14:00
363 查看
问题描述:
首先,不知道你有没有类似的经历,在可更新订阅的事务复制,当初始化订阅时,发生了类似这样的错误:列名 'msrepl_tran_version' 无效 。(源: MSSQLSERVER,错误号: 207 )
图1.通过复制监视器来检查错误
图2.通过作业的历史记录来检查错误
问题分析:
我们知道,在允许可更新订阅的发布中发布表时,会将列 msrepl_tran_version 添加到表中。本文章中,在发布表Product是把列msrepl_tran_version添加到表中。
CREATE TABLE[dbo].[Product](
[Name][nvarchar](50)NULL,
[ID][uniqueidentifier]NOTNULL,
[msrepl_tran_version][uniqueidentifier]NOTNULL,
CONSTRAINT
[PK_Product]PRIMARYKEY
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]ADDDEFAULT
(newid())FOR[ID]
GO
ALTER
TABLE [dbo].[Product]ADDCONSTRAINT[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_versionuniqueidentifierNotnull
Default(newid())
在订阅数据库表Product增加字段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]NOTNULL,
[msrepl_tran_version][uniqueidentifier]NOTNULL,
CONSTRAINT
[PK_Product]PRIMARYKEY
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]ADDDEFAULT
(newid())FOR[ID]
GO
ALTER
TABLE [dbo].[Product]ADDCONSTRAINT[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_versionuniqueidentifierNotnull
Default(newid())
在订阅数据库表Product增加字段msrepl_tran_version后,保持之前发布表,【目标对象】中【名称已被使用时的操作】选的【删除数据。如果项目有行筛选器,则仅删除与该筛选器匹配的数据】。或者选择【现有对象保持不变】。然后就等初始化订阅,或手工启动初始化订阅。
相关文章推荐
- 可更新订阅的事务复制错误:列名 'msrepl_tran_version' 无效
- 可更新订阅的事务复制错误:列名 'msrepl_tran_version' 无效
- SqlServer 使用脚本创建分发服务及事务复制的可更新订阅
- SQL Server 可更新订阅事务复制的trigger处理
- SqlServer 使用脚本创建分发服务及事务复制的可更新订阅
- 在Sql2000 sql2005 sql2008 下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示
- SQL Server 可更新订阅事务复制的identify列自动分配取值范围
- PowerShell应用之-可更新订阅的事务复制
- 复制订阅错误处理。
- SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误)
- SQLServer 事务复制分发错误 The process could not connect to Subscriber
- 编译器错误消息: CS1617: 选项“6”对 /langversion 无效
- 解决VMWare“Could not get vmci driver version:句柄无效”的错误
- 如何通过程序实现同一事务中多次数据库更新的错误回滚?
- SQL Server删除/创建复制订阅失败,报15517错误
- 高级复制时出现“ORA-01846: 周中的日无效”的错误
- sqlserver批量删除字段 msrepl_tran_version
- SQL事务发布错误:当 IDENTITY_INSERT 设置为 ON 或某个复制用户向 NOT FOR...
- 解决在sdk manager中更新文件后出现This Android SDK requires Android Developer Toolkit version 23.1的错误
- 第四篇 Replication:事务复制-订阅服务器