关于分布式事务的 OLE DB 访问接口 “SQLNCLI” 无法启动分布式事务
<! 注意,接口涉及两边系统,所以 以下设置在事务的两台服务器都要设置 !>
检查一:访问接口设置。此步不是必要。通常我会这么设置而已。
检查二:确定服务已经开启
检查三:组件服务里面MSTDC
检查四:MSDTC依赖RPC,RPC使用端口是TCP 135 Port。所以防火墙放行135端口
出站规则同样设置一次
检查五:允许应用通过防火墙
检查六:打开smss
选择服务器,右键选择属性
右键链接服务器,选择属性
查看选项是否都为
检查七:虚拟机克隆问题
到此还是事务执行不成功,是因为我的虚拟机是克隆的。克隆的虚拟机会导致 MSDTC 具有相同的ID值,从而出问题。通过查看操作系统的event 日志。所以出现问题怎么也解决不了的时候,可以考虑使用安装的系统来操作。
执行以下命令
msdtc -uninstall
msdtc -install
重新安装后服务是自动启动的,修改为手动启动
并且启动此服务。
检查八:保证链接服务器中语句没有访问发起事务服务器的操作
在发起事务的服务器执行链接服务器上的查询、视图或存储过程中含有访问发起事务服务器的操作【即事务的 发起方和接受方 都在一台服务器上。比如同在一个SQLServer 中,有DB1,DB2 两个数据库。DB1和DB2之间用 链接服务器 就会出现 环回 现象。此时应该把 链接去掉,因为可以直接连】,这样的操作叫做环回(loopback),是不被支持的,所以要保证在链接服务器中不存在此类操作。
检查九:在事务开始前加入set xact_abort ON语句
对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。
通过以上设置基本都可以了。
转载请注明:赫非域 » 处理SQLNCLI11无法启动分布式事务