民間人士 - 當我在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及其功能?
我知道這看起來像一個瘋狂的問題,但我真的想在這裏找到所有可能的途徑。 謝謝你,暫停你的不信任和謙遜的瘋狂帖子:)
您在知識庫中找到的引用涉及鎖定技術(行級別與表級別)而不是隔離級別(可序列化,快照等)。應用程序必須爲單個問題查詢指定快照隔離級別。沒有代碼變更,我不相信你可以解決這個問題。 – user1935361
同意 - 顯然,帶有「估價」一詞的對象(可能是因爲隱含的敏感性)導致應用程序構建交易。一旦我改變了視圖名稱,數據就成功地返回給客戶端。 – flaZer