執行COMMIT時ORACLE要做那些工作

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中移除;
(redo log文件放固態盤)
       
      3.V$LOCK中記錄的SESSION關於該事務的鎖會釋放,其他需要這些鎖的事務被喚醒;
     
      4.執行塊清理,清理塊頭保存的事務信息;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章