資料庫的REDO和UNDO機制

2021-09-01 02:37:49 字數 877 閱讀 2933

redo undo機制是在資料庫引擎曾實現的。

undo機制如下:

假設有a、b兩個資料,值分別為1,2。

a.事務開始.

b.記錄a=1到undo log.

c.修改a=3.

d.記錄b=2到undo log.

e.修改b=4.

f.將undo log寫到磁碟。

g.將資料寫到磁碟。

h.從磁碟檔案中刪除之前的undo記錄(事務提交)

核心在於先寫undo到磁碟,再寫資料。

這樣,如果系統在gh之間崩潰,重啟系統只需要按照undo重寫即可。這個機制保證了事務的原子性,缺點在於每次事務提交都要更新undo日誌,存在大量的隨機磁碟io。(因為不是在後面追加了)

引入了redo+undo的機制。

a.事務開始.

b.記錄a=1到undo log.

c.修改a=3.

d.記錄a=3到redo log.

e.記錄b=2到undo log.

f.修改b=4.

g.記錄b=4到redo log.

h.將redo log寫入磁碟(事務提交)

i.放棄該事務的undo日誌

j.空閒時間將redo中的資料刷到對應的實際儲存

在事務提交前任何過程中任何時刻決定回滾,先把undo寫入磁碟,再把redo寫入磁碟。之所以不採用放棄redo日誌的方法,是因為redo日誌為了提高效率,設計為只能追加。這樣,系統崩潰後,只需要先執行redo log,後執行undo log就可以。就相當於什麼也沒做

乙個oracle例項中只有乙個lgwr後台程序。該程序負責寫入redo日誌

寫入真實資料實際上通過dbwr這個後台程序,將記憶體中的【髒資料塊】直接刷回磁碟。

資料庫undo和redo

undo和redo是沒有關係的,不能相互取代,對於資料庫來說,只有有沒有undo 和有沒有redo的區別,不是有了undo就不能有redo,或者有了redo就不能有undo。到底用不用redo和undo是和steal no steal force no force策略相關的。你肯定是沒搞明白這四個策...

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...