SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

时间:2023-03-09 03:15:02
SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

在可更新订阅中,在订阅设置更新方法,将 “排队更新” 设置为 “立即更新”

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

接着在订阅数据库更新表数据,出错:

消息 21079,级别 16,状态 1,过程 sp_getpublisherlink,第 52 行

没有发布服务器的 RPC 安全信息,或该信息无效。请用 sp_link_publication 指定该信息。

消息 20512,级别 16,状态 1,过程 sp_MSreplraiserror,第 8 行

可更新的订阅: 正在回滚事务。

消息 3609,级别 16,状态 1,第 1 行

事务在触发器中结束。批处理已中止。

查看该存储过程 sp_getpublisherlink ,确认抛出错误的语句 raiserror(21079, 16, 1) 和raiserror(21079, 16, 3),其中主要为表 MSsubscription_properties
没有求分发代理程序的参数信息行。 (可以直接查表MSsubscription_properties 或执行存储过程 sp_helpsubscription_properties 查看有没有信息)

按提示,执行存储过程 sp_link_publication 添加相关信息:(参考sp_link_publication

--设置在连接到发布服务器时立即更新订阅的同步触发器所使用的配置和安全信息
sp_link_publication
@publisher = 'publisher'
, @publisher_db = 'publisher_db'
, @publication = 'publication'
, @security_mode = 2 --2:使用现有的通过 sp_link_publication 创建的用户定义的链接服务器登录名

执行失败,错误信息如下:

链接服务器"publisher"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。

消息 7391,级别 16,状态 2,第 1 行

无法执行该操作,因为链接服务器 "publisher" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。

没有启用分布式事务,启用就是了!嘿嘿!~以下在每台服务器都做相同操作:

1. 启用MSDTC相关服务器

控制面板 ——》管理工具——》服务:

Distributed Transaction Coordinator

Remote Procedure Call(RPC)

Security Accounts Manager

2.启用本地协调器

开始——》管理工具——》服务组件(或者运行:dcomcnfg.exe)

控制台根节点——》组件服务——》计算机——》我的电脑(右键属性)

点击“MSDTC”选项,确认勾选“使用本地协调器”

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

控制台根节点——》组件服务——》计算机——》我的电脑

(继续点击)Distributed Transaction Coordinator——》本地DTC(右键属性)

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

3. MSDTC使用135端口

确认开启135端口或关闭防火墙或用services.msc打开服务启动TCP/IP
NetBIOS Helper服务

重启服务Distributed Transaction Coordinator并把“延迟启动”改为“自动”

此时在执行,完成后即可使用分布式事务,在订阅服务器可同步提交到发布服务器。

--设置在连接到发布服务器时立即更新订阅的同步触发器所使用的配置和安全信息
sp_link_publication
@publisher = 'publisher'
, @publisher_db = 'publisher_db'
, @publication = 'publication'
, @security_mode = 2 --2:使用现有的通过 sp_link_publication 创建的用户定义的链接服务器登录名

更多参考:

sp_link_publication (Transact-SQL)

管理分布式事务