2017-03-29 70 views
0

民間人士 - 當我在Stack上看到這個話題的道歉時,關於這個話題已經有很多問題了。事務隔離級別快照不支持遠程訪問 - 是否有條件?

但我發現自己在一個有趣的地方,我希望你能幫助。

高級問題:SQL SERVER能否有餘地決定視圖應該被包裝在ISOLATION LEVEL SNAPSHOT中?

我知道這聽起來像一個瘋狂的問題,但我試圖用盡我遇到的每個問題的所有途徑。

我正在使用運行35個查詢的應用程序通過鏈接服務器從另一個數據庫檢索數據。查詢分別是針對一個表的簡單選擇。所有數據庫操作都是針對SQL SERVER執行的,檢索代碼是ADO.NET/c#等。

其中34個查詢工作正常 - 但這是一個壞蘋果,因此,我得到了事務隔離級快照問題。

我還測試了數據檢索的應用程序之外,當我實現對「問題」查詢下面的代碼片段,我也得到了問題:

using (var trans = conn.BeginTransaction(IsolationLevel.Snapshot)) 

然而,當我做在所述查詢上實現它,一切都很好。 我也對其他查詢進行了測試 - 有和沒有「Shapshot」 - 我的結果是可預測的... ...「Shapshot」就位,沒有查詢過程...當沒有實現時,所有查詢過程...

我的結果表明應用程序負責更改數據檢索策略。

每他們的知識基礎,我發現這一點:Locking is handled by the database level (MS SQL Server/Oracle) and not by "us". Generally, locking is row level but the optimizer may choose something different

不幸的是我沒有來負責進行數據檢索樣板應用程序代碼的本地訪問。我懷疑這個特定的查詢/表有一個或多個關鍵字 - 無論是在列還是在查詢/表命名 - 觸發應用程序使用替代檢索策略。根據開發者論壇,我已經問過這種情況,我正在等待回覆...

無論如何回到他們提到的the optimizer may choose something different - 他們的優化器,或者數據庫優化器? SQL SERVER可以設置爲「判斷呼叫」嗎?聲明是不清楚的還是我沒有足夠的SQL SERVER及其功能?

我知道這看起來像一個瘋狂的問題,但我真的想在這裏找到所有可能的途徑。 謝謝你,暫停你的不信任和謙遜的瘋狂帖子:)

+0

您在知識庫中找到的引用涉及鎖定技術(行級別與表級別)而不是隔離級別(可序列化,快照等)。應用程序必須爲單個問題查詢指定快照隔離級別。沒有代碼變更,我不相信你可以解決這個問題。 – user1935361

+0

同意 - 顯然,帶有「估價」一詞的對象(可能是因爲隱含的敏感性)導致應用程序構建交易。一旦我改變了視圖名稱,數據就成功地返回給客戶端。 – flaZer

回答

0

顯然,單詞「估價」(也許是因爲敏感性暗示)的對象會導致應用程序構建交易。一旦我改變了視圖名稱,數據就成功地返回給客戶端。

所以是的應用程序是/是問題。