資料庫undo和redo

2021-09-11 10:29:50 字數 638 閱讀 7745

undo和redo是沒有關係的,不能相互取代,對於資料庫來說,只有有沒有undo、和有沒有redo的區別,不是有了undo就不能有redo,或者有了redo就不能有undo。

到底用不用redo和undo是和steal、no steal、force、no force策略相關的。你肯定是沒搞明白這四個策略是什麼意思吧。

steal:允許在事務commit之前把記憶體中的資料寫入磁碟。此時需要undo,因為系統在commit之前崩潰時,已經有資料寫入到磁碟了,要恢復到崩潰前的狀態,必須undo這些寫入操作,否則磁碟上的資料就是不正確的。

no steal:不允許在事務commit之前把記憶體中的資料寫入磁碟。不需要undo。

force:記憶體中的資料最晚在commit的時候寫入磁碟。不需要redo。

no force:記憶體中的資料可以一直保留,在commit之後過一段時間再寫入磁碟。此時需要redo,因為資料在系統崩潰的時候可能還沒寫入到磁碟,如果不redo,磁碟上的資料就是不完整的。

如果資料庫是steal/no force組合(當前所用企業級資料庫均採用這個組合),就需要undo和redo,因為能保證記憶體排程的靈活性,提高系統效能。

對於你的問題,未完成的事務是不能提交的,你所說的提交的意思可能是指先把資料寫入磁碟,就是steal,因此需要undo。

資料庫的REDO和UNDO機制

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.從磁碟檔案中刪除之前的und...

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日誌中,當出現例項故障 像斷電 導致資料未能更新...