2016-08-05 51 views
0

我有一个BizTalk 2013 R2轮询WCF-SQL接收位置,它使用READPAST锁提示执行轮询数据可用语句。该声明在过去的几个月里工作得非常完美,但在将SQL 2014服务器轮询升级到CU6后,该声明停止工作。现在,事件日志中充斥着以下警告消息每次轮询间隔:SQL Server 2014可能的BizTalk WCF-SQL轮询问题CU6

只能指定在读的READPAST锁犯或重复读隔离级别

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

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

任何想法?

更新: 它看起来像设置隔离级别为轮询数据可用声明的一部分允许READPAST提示工作:

SET事务隔离级别READ COMMITTED; SELECT COUNT(*)FROM dbo.Table用(READPAST)凡[状态] = 'READY'

不过,我还是担心,SQL可能不再履行的隔离级别由服务行为设置在DTC交易中。

+0

为什么你需要的READPAST锁提示呢? – Dijkgraaf

+0

真相被告知,我不必使用READPAST,但轮询语句执行一个相当昂贵的锁识别存储过程。如果没有可用于轮询的记录,我宁愿不执行该程序。 可用的数据语句如下所示: 'select count(*)from dbo.Table r with(readpast)Where Status ='READY'' –

回答

0

看起来,Microsoft解决了一些问题,即在SQL连接发布时(kb3025845),隔离级别无法重置。这使我相信CU6的行为是有意的,我只是从一个错误中受益。调查数据对我来说似乎很奇怪。语句不符合WCF服务行为设置,但也可能是故意的。

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

例子:

set transaction isolation level read committed; 
Select count(*) From dbo.Table with(READPAST) Where [Status] = 'READY' 
1
+0

我通过DBA验证我们正在使用CU6的修订版本,不推荐使用。 –