SQL Server双向事务复制仅单向正常 反向发布未初始化或报错求助
SQL Server双向事务复制反向同步故障排查及配置指引
前置校验
- 确认两台服务器的SQL Server代理服务处于持续运行状态,且服务账号拥有复制相关的全部权限:发布库、分发库、订阅库的db_owner权限,同时拥有分发服务器的访问权限
- 检查两台服务器的主机名、IP地址、默认1433端口是否能互相正常访问,hosts文件无错误映射,防火墙未阻断SQL Server通信端口及复制所需的RPC端口
- 确认两台服务器的SQL Server版本、补丁层级一致,避免跨版本兼容性导致的初始化失败
反向复制(B→A)未初始化/报错解决方法
1. 发布未初始化问题修复
配置双向复制时,反向订阅禁止使用快照初始化,否则会覆盖A服务器上已有的数据,正确操作是选择仅支持复制的初始化方式:
操作路径:新建订阅向导的「初始化订阅」步骤,初始化选项选择「不要初始化订阅对象」,该操作的前提是A和B两端的表结构、主键约束、初始数据已经完全一致
检查反向发布的属性中,冲突检测配置是否开启。双向事务复制必须开启冲突检测,否则会因重复更改触发主键冲突等报错,可执行以下命令开启:
EXEC sp_changepublication @publication = N'替换为B到A的发布名称', @property = N'conflict_detection', @value = N'true', @force_invalidate_snapshot = 1;
2. 常见报错排查
- 主键冲突报错:检查是否未配置
@loopback_detection参数,该参数会避免复制操作被循环同步回源端,配置命令参考:EXEC sp_addsubscription @publication = N'替换为B到A的发布名称', @subscriber = N'替换为A服务器的实例名称', @destination_db = N'替换为A服务器的订阅库名称', @sync_type = N'replication support only', @loopback_detection = N'true'; - 分发代理运行报错:执行以下命令查询分发库的错误日志,定位具体故障原因:
SELECT * FROM distribution.dbo.MSrepl_errors ORDER BY time DESC; - 标识列冲突报错:如果同步的表包含自增标识列,需要提前拆分两端的标识列范围,例如A端使用1-1000000,B端使用1000001-2000000,避免生成重复的标识值触发冲突。
配置验证步骤
- 重启B到A对应的分发代理、日志读取代理
- 在B服务器的发布库中插入一条测试数据,确认1-2分钟内可以正常同步到A服务器的对应库
- 验证A到B的原有同步仍然正常,未出现循环同步问题
内容的提问来源于stack exchange,提问作者Afraheem Khattak
相关产品推荐
相关产品推荐

