1. 程式人生 > >Oracle事務隔離級別

Oracle事務隔離級別

髒讀(dirty read):當一個事務讀取另一個事務尚未提交的修改時,產生髒讀。



不可重複讀(nonrepeatable read):同一查詢在同一事務中多次進行,在此期間,由於其他事務提交了對資料的修改或刪除,每次返回不同的結果。



幻讀(phantom read):同一查詢在同一事務中多次進行,由於其他提交事務所做的插入操作,雖然查詢條件相同,每次返回的結果集卻不同。



將T2的事務級別設定為 可序列化後:


事務級別:


Oracle 事務隔離級別

Oracle 支援以下三種事務隔離級別(transaction isolation level)。

隔離級別 描述
已提交讀取
Oracle 預設使用的事務隔離級別。事務內執行的查詢只能看到查詢執行前(而非事務開始前)就已經提交的資料。Oracle 的查詢永遠不會讀取髒資料(未提交的資料)。

Oracle 不會阻止一個事務修改另一事務中的查詢正在訪問的資料,因此在一個事務內的兩個查詢的執行間歇期間,資料有可能被其他事務修改。舉例來說,如果一個事務內同一查詢執行兩次,可能會遇到不可重複讀取或不存在讀取的現象。 
 
序列化 序列化隔離的事務只能看到事務執行前就已經提交的資料,以及事務內 INSERT  UPDATE ,及 DELETE 語句對資料的修改。序列化隔離的事務不會出現不可重複讀取或不存在讀取的現象。 
 
只讀模式 只讀事務只能看到事務執行前就已經提交的資料,且事務中不能執行 INSERT  UPDATE ,及 DELETE 語句。

應用程式的設計開發者及資料庫管理員可以依據應用程式的需求及系統負載(workload)而為不同的事務選擇不同的隔離級別(isolation level)。使用者可以在事務開始時使用以下語句設定事務的隔離級別:

已提交讀模式:SET TRANSACTION ISOLATION LEVEL=READ COMMITTED;

序列模式:SET TRANSACTION ISOLATION LEVEL= SERIALIZABLE;

只讀模式:SET TRANSACTION= READ ONLY;