.Net EF框架程序连接SQLServer并通过链接服务器进行数据查询,但报“无法执行该操作,因为链接服务器“XXX“的 OLE DB 访问接口“SQLNCLI11”无法启动分布式事务。”的原因

场景:

1、.net EF框架程序

2、连接SQLServer数据库,并且使用链接服务器进行数据查询

问题:

1、偶发报错 无法执行该操作,因为链接服务器“XXX"的 OLE DB 访问接口“SQLNCLI11”无法启动分布式事务。

分析:

首先确认一点,对应脚本没有开启事务,只是做查询,没有开启分布式事务一说。那为什么会报这个错误,百思不得其姐。很奇怪。照例,网上搜了一番,无一例外都是有关分布式事务的相关设置,大同小异,由于是生产环境,不能尝试去设置修改。

后面再仔细想想,如何复现报错,是解决问题的关键,复现了问题,才好确定其根因。

本着这个目的,就来开始猜想其原因和找到复现的方式,那就要分析问题的特点:

该问题只是偶尔会出现,并不是每次都出现。

没有开事务却报无法启动分布式事务,而且并不是每次调用都会出现。

感觉这个问题非常奇怪,但结合这两点,去猜想其原因和尝试复现,突然想到了之前找到的EF框架修改数据时会采用SERIALIZABLE事务隔离级别,其特点符合这两点,与事务有关,并且该隔离级别的连接池会被其他会话使用,存在偶发性特点。

测试:

立马尝试,果然复现。

结论:

没想到序列化的事务隔离级别对链接服务器使用也存在影响。序列化的事务隔离级别平时比较少关注和几乎没有应用会使用,所以给我们带来的迷惑问题也不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值