2011-12-15 84 views
4

給定一個在關係數據庫上運行的事務,觸發一系列SELECTS。SELECTs的事務隔離級別

我認爲如果在這個事務中間,任何其他事務都會對數據庫提交一些UPDATE或INSERT,這個新的數據對於前一個事務中其餘的剩餘選擇是可見的。這個假設是否正確?

我的意思是,我假設該交易不是孤立的讀取(都會讀取即使在同時改變數據庫的最後狀態),但只適用於作品,是嗎?

如果這取決於每個RDBMS的事務策略,Oracle的策略是什麼?

+3

Oracle中的默認隔離級別是「讀取已提交」(您「看到」其他事務已更改**已承諾**,即使它們是在事務啓動後提交的)。 Oracle還允許您將隔離級別設置爲「可序列化」(您只能「看到」在事務啓動時由其他事務處理**提交**的更改)或「只讀」(如「可序列化」它不允許INSERT,UPDATE或DELETE)。有關所有詳細信息,請參閱[鏈接](http://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm#sthref1972)。 – 2011-12-15 15:57:49

+0

你爲什麼把這個放在評論中,而不是答案?在一個答案中,它可以被表決和選擇爲正確的... – edutesoy 2011-12-15 16:33:14

回答

0

複製&粘貼給出這個問題的評論答案:

Oracle中的默認隔離級別爲「讀提交」(你「看」其他事務提交的修改,即使它們的交易後提交啓動)。 Oracle還允許您將隔離級別設置爲「可序列化」(您只能「看到」在您的事務開始時由其他事務提交的更改)或「只讀」(如「可序列化」,除非它不允許INSERT,UPDATE或DELETE)。有關所有細節,請參閱link

4

您的假設是正確的,至少對於Oracle而言。

Oracle保證在給定時刻執行讀取的一致性。一旦讀取啓動後,其他事務是否更改所選數據並不重要 - Oracle保證數據是讀取開始時數據庫中的數據。如果它不能履行保證,你會得到一個「ORA-01555快照太舊」的錯誤。但是,後續的選擇可能不會得到相同的答案。

爲了提供讀取隔離/可重複讀取,您必須放棄一些併發,因爲您必須鎖定表以防止更新。 Oracle選擇高度併發 - 讀者不會阻止。

如果您只是在給定的時間點查找數據,Oracle確實會提供閃回查詢。