You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Service Broker多源单目标复制场景下单源连接失败问题咨询

故障根因定位

结合你提供的SSB诊断结果和故障现象,根因集中在约定一致性、对话安全、实例级身份验证三个层面:

  • 约定定义不匹配:SBCTR_FLOW_ROWS约定在源端和目标端的定义不一致,目标端接收消息时不校验约定合法性(所以能正常收消息),但返回应答时会校验约定匹配度,校验不通过就不会生成应答消息。
  • 对话安全证书配置缺失:故障源端的对话证书CRT_PMS_SERVICE_BROKER_DIALOG_SOURCE_1未部署到目标端数据库,且USR_PMS_SERVICE_BROKER_DIALOG用户未完成跨实例证书映射,导致目标端尝试向该源端返回应答时,对话安全校验失败,无法建立回连会话,触发网络层64错误。
  • 实例级身份验证未通过:两个实例的SSB端点都未部署对方的实例级身份验证证书,如果SSB端点未开放Public角色的CONNECT权限,回连请求会被直接拒绝,表现为连接被远程端关闭。
可行解决方案

按以下顺序修复配置即可解决问题:

  1. 统一两端约定定义
    分别在源端、目标端执行以下命令查询约定和关联消息类型配置,确保两端完全一致:
-- 查询约定基础信息
SELECT * FROM sys.service_contracts WHERE name = 'SBCTR_FLOW_ROWS'
-- 查询约定关联的消息类型和发送方向
SELECT m.name, u.is_sent_by_initiator, u.is_sent_by_target 
FROM sys.service_contract_message_usages u
JOIN sys.message_types m ON u.message_type_id = m.message_type_id
WHERE u.service_contract_id = (SELECT service_contract_id FROM sys.service_contracts WHERE name = 'SBCTR_FLOW_ROWS')

如果存在差异,删除错误端的约定后重新创建,保持和对端完全一致。

  1. 补全对话安全证书配置
  • 导出故障源端数据库中CRT_PMS_SERVICE_BROKER_DIALOG_SOURCE_1证书的公钥,保存为.cer文件
  • 将证书公钥导入目标端DB_PMS_VILLAGE数据库,映射到USR_PMS_SERVICE_BROKER_DIALOG用户
  • 同理导出目标端的对话证书公钥,导入所有源端的DB_PMS_VILLAGE数据库并完成用户映射
  1. 修复实例级SSB端点身份验证
    生产环境推荐使用证书验证:
  • 分别导出两个实例master库中SSB端点使用的证书公钥,导入到对方实例的master库
  • 为导入的证书创建登录账号,并授予CONNECT权限到SSB端点:
GRANT CONNECT ON ENDPOINT::[你的SSB端点名称] TO [证书对应的登录名]

测试环境可临时开放Public权限快速验证:

GRANT CONNECT ON ENDPOINT::[你的SSB端点名称] TO [PUBLIC]
  1. 配置验证
    修复完成后重新运行SSB诊断工具,确认错误和警告全部消失后,发起测试消息验证双向通信正常,检查sys.transmission_queue系统视图无堆积的异常消息即可。

内容的提问来源于stack exchange,提问作者SQLpro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:03