事務的相關知識
最後更新:2017-02-28
來源:互聯網
上載者:User
使用者會話只是使用者到資料庫的一個串連,而使用者對資料庫的操作則是通過會話中的一個個事務來進行的。對事務的管理不僅僅是DBA的任務,每個發布事務的使用者也能夠對自已的事務進行管理。
事務的開始:
Oracle中的事務由遇到的第一條可執行SQL語句開始。
DDL (Data Definition Language)
DML(Data Manipulation Language )
事務的結束:
·使用者執行commit或rollback語句
·使用者執行一條DDL語句,比如create,drop,rename,alter。如果當前事務中包含有已經執行的DML語句,Oracle首先提交事務,然後再將DDL語句作為一個新的只包含一條語句的事務執行並提交。
·使用者主動斷開到oracle的串連。
·使用者進程意外中止。
提交事務前完成的工作:
·在SGA區的回退緩衝中產生該事務的回退條目。在回退條目中儲存有該事務所修改的資料的原始版本。
·在SGA區的重做日誌緩衝中產生該事務的重做記錄。重做記錄中記載了該事務對資料區塊所進行的修改,並且還記載了對回退段中的資料區塊所進行的修改。緩衝中的重做記錄有可能在事務提交之前就寫入硬碟中。
·在SGA區的資料庫緩豐中記錄了事務對資料庫所進行的修改。這些修改也有可能在事務提交之前就寫入硬碟中。
提交事務時完成的工作:
·在為該事務指定的回退段中的內部事務表內記錄下這個事務已經被提交,並且產生一個惟一的SCN記錄在內部事務表中,用於惟一標識這個事務。
·LGWR後進進程將SGA區重做日誌緩衝中的重做記錄寫入聯機重做記錄檔。在寫入重做日誌的同時還將寫入該事務的SCN。
·Oracle服務進程釋放事務所使用的所有記錄鎖與表鎖。
·Oracle通知使用者事務提交完成。
·Oracle將該事務標記為已完成。
回退事務完成的工作:
·Oracle通過使用回退段中的回退條目,撤銷事務中所有SQL語句對資料庫所做的修改。
·Oracle服務進程釋放事務所使用的所有鎖
·Oracle通知交易回復成功。
·Oracle將該事務標記為已完成
事務的隔離等級:
(servers=dedicated)
set transaction isolation level read committed
set transaction isolation level serializable
set transaction read only
set transaction read write
alter session set isolation_level=serializable
alter session set isolation_level=read commited
讀一致性的工作機制:
設定查詢語句的SCN:10023
該查詢語句在搜尋所需要的資料區塊時,
如果所需資料區塊的SCN<=10023,則讀取。
如果所需資料區塊的SCN>10023,查詢語句將從回退段中擷取對應的資料區塊的原始版本(原始版本的SCN同樣要<=10023)
這樣,通過對資料區塊的SCN進行比較,查詢語句將只返回在它開始執行之前已經提交的資料,保證了不會讀取到未提交事務所修改的髒資料區塊,也不會讀取到語句開始執行後再提交的資料區塊。
定義私人回退段
set transaction use rollback segment XXX