執(zhí)行Commit時Oracle做哪些工作 |
發(fā)布時間: 2012/8/15 17:18:29 |
COMMIT是一個非?斓牟僮,當我們發(fā)布commit命令時,真正困難的動作已經完成, 在數據庫中已經執(zhí)行了數據更改,所以已經完成了99%的任務,例如:下列操作已經產生: 1.在SGA(Buffer Cache)中已經生成了undo塊; 2.在SGA(Buffer Cache)中已經生成了產生改變的數據塊和索引塊; 3.在REDO LOG BUFFER生成了前面兩項的redo信息; 4.依賴于前三項產生的數據量大小以及操作需要的時間,buffer中的數據可能已經 有一部分輸出到了磁盤; 5.所有需要的鎖已經獲得; 當執(zhí)行COMMIT命令時,只執(zhí)行如下操作: 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.執(zhí)行塊清理,清理塊頭保存的事務信息; 本文出自:億恩科技【mszdt.com】 |