從我瞭解的ARIES算法,支持ACID事務必須使用WAL(預寫日誌):所有的寫操作都會被記錄。當ARIES算法的恢復階段DBMS崩潰時會發生什麼?
據說給回滾崩潰之前未提交的事務做出變化的能力到數據庫。
每個寫,我們記錄有關實際寫入信息(如何重做,如何撤消它)。
在恢復階段,我們分析日誌來執行恢復操作:
- 我們讀到的日誌條目
- 我們將更改應用於數據庫
- 我們設置日誌條目進行
然後,爲了執行UNDO,寫入了一個新的日誌條目(因爲它畢竟是一個寫入),然後在檢查點期間將更改應用於數據庫。
在一個檢查點,我想我們只是進行了重做所有提交的條目。
我還沒有發現任何信息。如果發生了什麼:
- 有檢查點時的崩潰
- 在REDO階段出現崩潰,之後更改已被應用到數據庫和前/期間日誌的更新將其設定爲完成
在這種情況下,一些變化已經應用到數據庫中,而不是由日誌反映,讓數據庫處於不一致的狀態。
注:下面是一些鏈接,我以前瞭解ACID事務和ARIES算法:
- https://en.wikipedia.org/wiki/Algorithms_for_Recovery_and_Isolation_Exploiting_Semantics
- http://www-inst.eecs.berkeley.edu/~cs186/sp08/aries.html
- https://fr.slideshare.net/PulasthiLankeshwara/aries-recovery-algorithms
- http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
我我目前正在閱讀SQLite的源代碼瞭解整個事情是如何實施的。
預先感謝關於這一主題的任何澄清。
相關:https://stackoverflow.com/questions/10289170/why-does-aries-perform-a-redo-before-undo-in-database-management-recovery – Jedi