系统:Windows Server 2008 +MS SQL 2008 2R
场景:在将SQL 2005数据库迁移到SQL 2008上时对链接服务器的数据表做增删改是正常的,在触发器中对链接服务器的数据表做增删改就有问题了,上图
来自微软官方的决解方案:
来自网络对该问题处理方式(测试无效做个记录方便以后排查问题)
--1、是否启动MSDTC服务(需确认双方服务器都开启)
--2、双方135端口是否开启、是否被占用(可用 telnet IP 135 指令检测端口是否打开)
--3、保证没有在发起事物的服务器里执行链接服务器上的查询、视图、存储过程中包含有访问发起事物服务器的操作,
-- 这样的操作叫环回(loopback),举个“栗子”:A服务器中执行链接服务器B的存储过程sp_b,在sp_b中存在访问A的操作
--4、查看MSDTC设置
-- 打开“管理工具-》组件服务-》计算机-》我的电脑-》MSDTC选项-》安全配置
-- 在安全配置里选中:
-- (1)网络DTC访问
-- (2)允许远程客户端、允许远程管理
-- (3)允许入站、允许出站、不要求进行验证
-- (4)DTC登录用户必须保证为:NT Authority/NetWork Service
-- 配置完以上所有重启服务器使配置生效(有些电脑可能要先启动DTC服务然后在启动SQL SERVER服务)
--5、链接服务器名称解析问题
-- 找到服务器中的hots文件添加IP + 服务器名称解析
以上所有步骤执行完发现问题依旧存在(这时候基本可以排除MSDTC服务的问题了)
继续排查MSDTC依赖组件是否有问题
可以看出DTC依赖的几个系统组件
这时候祭出微软的dtcping.exe 下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=2868
(dtcping 可能无法直接ping IP 所以需要在系统的host文件中添加IP映射)
.
从这里看的出是RPC服务有问题
CMKERP2 IP=xxx.24.78.30
ERP-GHN0 IP=xxx.24.78.65
但是在CMKERP2中 用DTCPING工具ping ERP-GHN0 IP=xxx.24.78.100
到现在为止问题很明显了就是存在两台服务器名称一致但是IP不同并且两台电脑存在同一个域中
导致了两台服务器通过服务器名称相互访问时一直导致RPC有问题
最后将.100这台服务器名称改了,并且在域中的映射也改了,最后ERP-GHN0指向了.65
问题决解
最后可通过cmd指令 nbtstat -a IP来取得主机名
结论:因为链接服务器‘’的OLE DB访问接口 ‘SQLNCLI’无法启动分布式事务问题处理 这个问题产生的原因不一定是因为MSDTC服务配置的问题、有可能是MSDTC依赖的系统组件有问题造成的,所以排查该问题时在确定MSDTC配置正确之后该问题依旧存在的话,那么就去排查MSDTC依赖的组件是否存在问题.
有遇到其他情况的歡迎留言讨论这个问题!!!!