我有一个BizTalk 2013 R2轮询WCF接收位置,它执行带有READPAST锁提示的轮询数据可用语句。在过去的几个月里,这份声明完美无缺,但在被调查的SQL 2014服务器升级到CU6之后,它就停止了工作。现在,事件日志中充斥着以下警告消息:每一个轮询间隔:
您只能在读取已提交或可重复读取隔离级别中指定READPAST锁。
我尝试将WCF服务行为添加到接收位置,以强制DTC事务上的读提交隔离级别,但似乎轮询语句是在DTC范围之外执行的。
我在SQL 2014 CU5服务器上使用一个单独的数据库副本测试了相同的应用程序,轮询工作时没有警告。
有什么想法吗?
更新:看起来像将隔离级别设置为轮询数据可用语句的一部分,从而允许READPAST提示工作:
设置事务隔离级别读提交;从dbo.Table with(READPAST)中选择count(*),其中状态=“就绪”
但是,我仍然担心SQL可能不再满足DTC事务中服务行为设置的隔离级别。
发布于 2016-08-18 13:19:13
微软似乎修复了一些问题,即在释放SQL连接(kb3025845)时,隔离级别无法重置。这使我相信,CU6行为是有意的,我只是从一个bug中受益。在我看来,被调查的数据有用似乎还是很奇怪的。语句不符合WCF服务行为设置,但这也可能是有意的。
最后,我只是在PolledDataAvailableStatement中设置隔离级别,以强制读取提交的隔离级别。
示例:
set transaction isolation level read committed;
Select count(*) From dbo.Table with(READPAST) Where [Status] = 'READY'发布于 2016-08-09 07:56:20
原始Server 2014 SP1 CU6包含一个问题:https://blogs.msdn.microsoft.com/sqlreleaseservices/cumulative-update-6-for-sql-server-2014-sp1/
你有三个选择:
https://stackoverflow.com/questions/38779690
复制相似问题