DBMS基於日誌的恢復 -
- 日誌是一系列記錄。 每個事務的日誌都保存在一些穩定的存儲中,以便在發生任何故障時,可以從那裏恢復。
- 如果對數據庫執行任何操作,則它將記錄在日誌中。
- 但是,應該在資料庫中應用實際事務之前完成存儲日誌的過程。
假設有一項事務,它執行修改學生所在的城市。 為此事務編寫以下日誌。
- 啟動事務時,它會寫入“啟動”日誌。
<Tn, Start>
- 當事務城市從“Haikou”修改為“Shanghai”時,則會將另一個日誌寫入該檔。
<Tn, City, 'Haikou', 'Shanghai' >
- 當事務完成時,它會寫入另一個日誌以指示事務結束。
修改資料庫有兩種方法:<Tn, Commit>
1. 延期資料庫修改:
- 如果事務在提交之前不修改資料庫,則會發生延遲修改技術。
- 在此方法中,將創建所有日誌並將其存儲在穩定存儲中,並在事務提交時更新資料庫。
2. 立即修改資料庫:
- 如果在事務仍處於活動狀態時發生資料庫修改,則會發生立即修改技術。
- 在這種技術中,每次操作後都會立即修改資料庫。 它遵循實際的資料庫修改。
使用日誌記錄恢復
當系統崩潰時,系統會查詢日誌以查找需要撤銷的事務以及需要重做的事務。
- 如果日誌包含記錄
<Ti,Start>
和<Ti,Commit>
或<Ti,Commit>
,則需要重做事務Ti。 - 如果日誌包含記錄
<Tn,Start>
但不包含<Ti,commit>
或<Ti,abort>
的記錄,則需要撤銷事務Ti。