飞吧,我们一起飞吧

飞吧,我们一起飞吧

导航

报错:因为链接服务器 “192.168.1.XXX” 的 OLE DB 访问接口 “SQLNCLI10” 无法启动分布式事务。

问题背景:
有两台服务器A,B,分别装上SQL SERVER 2014数据库,现在需要当A服务器上数据库a表有一条数据插入后,通过表中触发器,将数据经处理后同步到B服务器数据库b表中。
报如下错误:
链接服务器"****"的 OLE DB 访问接口 “SQLNCLI10” 返回了消息 “没有活动事务。”。
无法执行该操作,因为链接服务器 “*****r” 的 OLE DB 访问接口 “SQLNCLI10” 无法启动分布式事务。

服务器 *********上的 MSDTC 不可用。
解决方法:第一种两台服务器均关闭防火墙,第二种两台服务器开启防火墙。


第一种:两台服务器关闭防火墙,具体进行如下操作:
(注:两台服务器均做相同配置)
1、双方开启MSDTC服务
(1)net stop msdtc
(2)net start msdtc
如果无法启动再运行如下命令:
(1)msdtc -resetlog
(2)net start msdtc
2、MSDTC设置
(1)在windows控制面版–>管理工具–>组件服务–>Distributed Transaction Coordinator–>本地DTC–>属性–>确定(启动)

 


(2)在客户端管理中选中“允许远程客户端”“允许远程管理”

(3)在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”

 

(4)保证DTC登陆账户为:NT Authority\NetworkService


3、创建数据库链接
创建数据库链接有两种方法可自行百度,此处不做详细介绍

总结:通过以上步骤,基本上在关闭防火墙的情况下是可以实现的。

第二种:两台服务器开启防火墙,具体进行如下操作:
(注:两台服务器均做相同配置,我当时就卡这了 TAT,下面我把能加的都配置上了,可能有些会多余,因为具体细节有些也不太明白,但是最后结果是好的)
1、前三个基本步骤同上
2、打开双方135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。

 

使用“telnet IP 135 ”命令测试对方端口是否对外开放。如果出现白色光标闪烁证明未阻断,如果报错则需要开启。(一般默认都是开启的)
3、指定端口范围(为了防止耗尽DCOM端口,导致报错“终结点映射器中没有其他终结点”)
在windows控制面版–>管理工具–>组件服务–>计算机–>我的电脑
找到后右击属性,出现如下图所示:

 

 

选中默认协议后,单击属性后如下所示

然后进行分配(例如5000-51000,视具体情况而定,一般范围小于30会报错,所以我干脆一次性先整大点)

4、打开防火墙,高级设置
添加入站和出站规则,一些关键信息两边尽量同步,比如数据库端口号,刚定义的DCOM端口范围(5000-51000)等。其他的一些入站出站规则需要的话直接开启即可。

 

5、远程服务器上名称解析
分布式事务的参与服务器是需要相互访问的,发起查询的服务器要根据机器名或ip查找远程服务器的,同样远程服务器也要查找发起服务器,

远程服务器通过发起服务器的机器名查找服务器,所以要保证远程服务器能够通过发起服务器的机器名访问到发起服务器。
一般的,两个服务器在同一网段机器名能就行很好的解析,但是也不保证都能很好的解析,所以比较保险的做法是:
在远程服务器的在“C:\WINDOWS\system32\drivers\etc\hosts”文件中增加一条记录:
xxx.xxx.xxx.xxx 服务器名

总结:开启防火墙后需要配置的比较多,总之最后模拟插入一条数据后,成功了。
————————————————
版权声明:本文为CSDN博主「Marcus丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37559253/article/details/116273061

posted on 2025-07-18 20:38  飞吧,我们一起飞吧  阅读(126)  评论(0)    收藏  举报