我有一个BizTalk 2013 R2轮询WCF-SQL接收位置,该位置使用READPAST锁定提示执行Polled Data Available语句。该声明在过去几个月中运行良好,但在轮询的SQL 2014服务器升级到CU6后停止工作。现在,事件日志充满了每个轮询间隔的以下警告消息:
您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁
我尝试将WCF服务行为添加到接收位置以强制DTC事务上的READ COMMITTED隔离级别,但看起来轮询语句正在DTC范围之外执行。
我在SQL 2014 CU5服务器上针对数据库的单独副本测试了相同的应用程序,并且轮询工作时没有警告。
有什么想法吗?
更新 看起来将隔离级别设置为Polled Data Available语句的一部分允许READPAST提示工作:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 选择计数(*)来自dbo.Table with(READPAST)其中[Status] ='READY'
但是,我仍然担心SQL可能不再遵守DTC事务中服务行为设置的隔离级别。
答案 0 :(得分:1)
原始SQL Server 2014 SP1 CU6包含一个问题: https://blogs.msdn.microsoft.com/sqlreleaseservices/cumulative-update-6-for-sql-server-2014-sp1/
您有三种选择:
答案 1 :(得分:0)
似乎Microsoft修复了在释放SQL连接时{(3}})无法重置隔离级别的一些问题。这让我相信CU6的行为是有意的,我只是从一个bug中受益。对我来说,轮询数据仍然有点奇怪。声明并不尊重WCF服务行为设置,但也可能是故意的。
我最后只是在PolledDataAvailableStatement中设置隔离级别来强制读取已提交的隔离级别。
示例:
set transaction isolation level read committed;
Select count(*) From dbo.Table with(READPAST) Where [Status] = 'READY'