上篇提到MSSQL的跨库查询和链接服务器,在链接服务器的使用过程中,涉及到事务处理的时候,经常会遇到一个报错,错误提示就是:
链接服务器xxx的 OLE DB 访问接口 “SQLNCLI” 返回了消息 “没有活动事务。”
无法执行该操作,因为链接服务器 xxx 的 OLE DB 访问接口 “SQLNCLI” 无法启动分布式事务。
出现这个问题的直接原因就是链接服务器对于事务的处理,需要在链接的两端都用到分布式服务,如果这个服务配置上有问题就会出现这个错误。在这里,我把所有我遇到的没遇到的排查方法都写下,以供查询所需:
(1)链接双方都启动MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。
注意:服务里面有两个 Distribute开头的都给启用并设置为自动。
(2) 打开双方135端口与RPC服务
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))