0

我有一个 BizTalk 2013 R2 轮询 WCF-SQL 接收位置,该位置执行带有 READPAST 锁定提示的轮询数据可用语句。该语句在过去几个月中运行良好,但在被轮询的 SQL 2014 服务器升级到 CU6 后停止运行。现在,每个轮询间隔的事件日志中都充斥着以下警告消息:

您只能在 READ COMMITTED 或 REPEATABLE READ 隔离级别中指定 READPAST 锁

我尝试将 WCF 服务行为添加到接收位置以强制 DTC 事务上的 READ COMMITTED 隔离级别,但似乎轮询语句正在 DTC 范围之外执行。

我在 SQL 2014 CU5 服务器上针对数据库的单独副本测试了相同的应用程序,并且轮询工作没有警告。

有任何想法吗?

更新: 看起来将隔离级别设置为 Polled Data Available 语句的一部分允许 READPAST 提示起作用:

将事务隔离级别设置为已提交;Select count(*) From dbo.Table with(READPAST) where [Status] = 'READY'

但是,我仍然担心 SQL 可能不再遵守 DTC 事务中服务行为设置的隔离级别。

4

2 回答 2

0

微软似乎修复了一些问题,即在发布 SQL 连接时无法重置隔离级别 ( kb3025845 )。这让我相信 CU6 的行为是故意的,我只是从错误中受益。对我来说,轮询数据仍然有用。声明不尊重 WCF 服务行为设置,但这也可能是有意的。

我最终只是在 PolledDataAvailableStatement 中设置隔离级别来强制读取提交的隔离级别。

例子:

set transaction isolation level read committed;
Select count(*) From dbo.Table with(READPAST) Where [Status] = 'READY'
于 2016-08-18T13:19:13.777 回答