2016-08-05 103 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的修訂版本,不推薦使用。 –