SQL Server 2019合并复制无法从行级跟踪切换为列级跟踪怎么办?
SQL Server 2019 合并复制列级跟踪配置失效解决方案
常见遗漏配置项
- 参数值设置错误:合并复制的
sp_addmergearticle存储过程中,@column_tracking参数设为true才是开启列级跟踪,设为false代表使用默认的行级跟踪。你之前脚本设置的@column_tracking = 'false'本身就是行级跟踪配置,属于参数值写反的常见问题。 - 运行中的同步任务阻塞配置修改:修改跟踪级别前必须停止所有关联该发布的合并代理作业,确保没有正在执行的同步任务,否则未完成的同步状态会导致配置修改被自动回滚。
- 已初始化项目不支持动态修改:针对已经完成初始化、正在运行的发布项目,无法直接在属性页修改跟踪级别,必须删除对应表项目后重新添加,再重新初始化订阅才能生效。
- 数据库兼容级别不匹配:需确认发布数据库的兼容级别不低于150(SQL Server 2019 对应的默认兼容级别),低兼容级别下部分合并复制参数会被强制重置为默认值。
正确配置操作步骤
- 停止所有关联该发布的合并代理、快照代理作业
- 删除需要修改跟踪级别的现有表项目,清理旧的快照文件
- 重新添加表项目时指定列级跟踪参数,T-SQL 示例如下:
EXEC sp_addmergearticle @publication = N'替换为你的发布名称', @article = N'替换为表项目名称', @source_object = N'替换为源表名', @column_tracking = N'true', @row_tracking = N'false';
- 重新运行快照代理生成新的快照
- 对所有订阅服务器执行重新初始化操作
- 重启合并代理作业完成同步
配置生效验证方法
执行以下查询,查询结果中column_tracking值为1即代表列级跟踪已成功开启:
USE [替换为你的发布数据库名称] GO SELECT name, column_tracking FROM sysmergearticles WHERE name = N'替换为你的表项目名称' GO
内容的提问来源于stack exchange,提问作者Rob Marsh
相关产品推荐
相关产品推荐

