天天看點

執行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中移除;

3.V$LOCK中記錄的SESSION關于該事務的鎖會釋放,其他需要這些鎖的事務被喚醒;

4.執行塊清理,清理塊頭儲存的事務資訊;

人們永遠沒有足夠的時間把它做好,但永遠有足夠的時間重新來過。

可是,因為并不是總有機會重做一遍,你必須做得更好,換句話說,

人們永遠沒有足夠的時間去考慮到底是不是想要它,但永遠有足夠的時間去為之後悔。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

淺掘千口井,不如深挖一口井!當知識支撐不了野心時,那就靜下心來學習吧!運維技術交流QQ群:618354452

個人微信公衆号,定期釋出技術文章和運維感悟。歡迎大家關注交流。

執行Commit時Oracle做哪些工作