執行Commit時Oracle做哪些工作 |
發布時間: 2012/8/16 17:13:18 |
COMMIT是一個非常快的操作,當我們發布commit命令時,真正困難的動作已經完成, 在數據庫中已經執行了數據更改,所以已經完成了99%的任務,例如:下列操作已經產生: 1.在SGA(Buffer Cache)中已經生成了undo塊; 2.在SGA(Buffer Cache)中已經生成了產生改變的數據塊和索引塊; 3.在REDO LOG BUFFER生成了前面兩項的redo信息;
4.依賴于前三項產生的數據量大小以及操作需要的時間,buffer中的數據可能已經 有一部分輸出到了磁盤; 5.所有需要的鎖已經獲得; 當執行COMMIT命令時,只執行如下操作: 1.為事務生成SCN:SCN是Oracle數據庫的一種計時信息,用以保證事務的順序性, 同時還用于失敗恢復和保證數據庫的讀一致性和檢查點,無論何時何人提交,SCN 自動加1; 2.將事務相關的未寫入redo log file中的redo信息從redo log buffer寫入到redo log file,這才是真實的COMMIT,這步操作完成,說明我們已經完成COMMIT,事務從 V$TRANSACTION中移除; 3.V$LOCK中記錄的SESSION關于該事務的鎖會釋放,其他需要這些鎖的事務被喚醒; 4.執行塊清理,清理塊頭保存的事務信息; 本文出自:億恩科技【www.vbseamall.com】
4.依賴于前三項產生的數據量大小以及操作需要的時間,buffer中的數據可能已經 有一部分輸出到了磁盤; 5.所有需要的鎖已經獲得; 當執行COMMIT命令時,只執行如下操作: 1.為事務生成SCN:SCN是Oracle數據庫的一種計時信息,用以保證事務的順序性, 同時還用于失敗恢復和保證數據庫的讀一致性和檢查點,無論何時何人提交,SCN 自動加1; 2.將事務相關的未寫入redo log file中的redo信息從redo log buffer寫入到redo log file,這才是真實的COMMIT,這步操作完成,說明我們已經完成COMMIT,事務從 V$TRANSACTION中移除; 3.V$LOCK中記錄的SESSION關于該事務的鎖會釋放,其他需要這些鎖的事務被喚醒; 4.執行塊清理,清理塊頭保存的事務信息; 本文出自:億恩科技【www.enidc.com】 --> |