1

我有一個使用針對SQL Server 2005數據庫的COM數據訪問層的大型Web應用程序。默認情況下,隔離級別是READ_COMMITTED。現在我明白了READ_COMMITTED_SNAPSHOT隔離級別的工作原理,並且讀取了MSDN說它可以透明地打開它。不過,我仍然懷疑。 :)如果我從READ_COMMITTED更改爲READ_COMMITTED_SNAPSHOT,是否以實現的方式保證我的應用程序不會中斷(不要假定應用程序完成了本書的所有操作)?沒有額外的異常將被拋出到COM層?事務語義是相同的?應用程序安全使用READ_COMMITTED_SNAPSHOT?

PS。通過實施的方式,我的意思是沿着READ_COMMITTED_SNAPSHOT隔離級別實現的行intentionaly工作完全作爲READ_COMMITTED,只是使用行版本而不是鎖?

感謝您提供任何見解或切換到此隔離模式的經驗。

回答

1

不,它們不具有相同的行爲:READ_COMMITTED確保通過鎖定沒有髒讀,READ_COMMITTED_SNAPSHOT通過獲取表的快照來實現。

使用READ_COMMITTED_SNAPSHOT,您的事務可以讀取已由與事務並行運行的另一個會話更改的舊數據。

儘管大多數情況下這不會中斷應用程序邏輯,但不能保證您的特定應用程序不依賴於鎖定行爲。

安全更改隔離級別的唯一方法是審覈所有數據庫代碼並檢查是否可能存在問題。