You need to enable JavaScript to run this app. SQL Server双向事务复制仅单向正常 反向发布未初始化或报错求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 22:27:04