3

的在Microsoft SQL Server中,我使用READ_COMMITTED_SNAPSHOT ISOLATION甲骨文相當於SQL Server的快照隔離

ALTER DATABASE MyDatabase 
SET ALLOW_SNAPSHOT_ISOLATION ON 

ALTER DATABASE MyDatabase 
SET READ_COMMITTED_SNAPSHOT ON 

在會話1,更新4000校長到5000

BEGIN TRAN 
Update MyTable Set Principal=5000 Where InvestorId=10 

現在在第二節,我說

Select Principal from MyTable where InvestorId=10 

我得到4000,因爲會話1交易沒有提交。

如果我不使用READ_COMMITTED_SNAPSHOT隔離模式,並使用

  1. 讀已提交隔離模式,那麼我的第二場將繼續等待
  2. 如果我使用READ_UNCOMMITTED隔離模式,然後我的會議2將給予5000(相當於在select語句中使用nolock)

在Oracle中,如果我執行等效命令集,默認情況下它的行爲就好像設置了READ_COMMITTED_SNAPSHOT隔離模式。

我讀過SNAPSHOT隔離模式在更新完成之前寫入tempdb的微軟文章。

- Oracle如何在默認情況下實現此目的?

- 它是否也寫入磁盤?它會導致I/O問題?

- Oracle中的默認鎖定級別與SQL Server不同嗎?

在此先感謝您的幫助和時間。

+1

沒有模擬在Oracle「READ_UNCOMMITTED隔離模式」。 –

+0

通過'READ_UNCOMMITTED ISOLATION'你是否指Oracle中的'POST'? – Annjawn

回答

3

在Oracle中,READ_COMMITTED隔離級別是默認模式,即數據被寫入數據文件(磁盤),並且只有在COMMIT之後纔可供其他會話選擇。它使用UNDO細分市場。 執行選擇時不會導致任何I/O問題 默認情況下,Oracle使用行級鎖定。

你可以看看第9章和第的Oracle DataBase Concepts 10更多細節

+0

謝謝Vishad ..非常有幫助 – VenVig

+0

https://docs.oracle.com/cd/E17276_01/html/gsg_xml_txn/cxx/isolation.html#snapshot_isolation – suresh