計算機系統因磁盤、電源、軟件等的緣由發生故障時,會形成數據庫系統信息的丟失。此外,事務也可能因各類緣由失敗,如破壞了完整性約束或發生了死鎖。數據庫系統的一個重要組成部分就是恢復機制,它負責檢測故障以及將數據庫恢復至故障發生前的某一狀態。
一旦故障發生,數據庫系統的狀態可能再也不一致,即它不能反映數據庫試圖保存的現實世界的狀態,爲保持一致性,要求每一個事務都必須是原子的。恢復機制的職責就是要保證原子性和持久性。
1、在基於日誌的機制中,全部的更新都計入日誌,並存放在穩定存儲器中。當事務的最後一個日誌記錄(即commit日誌記錄)輸出到穩定存儲器時,就認爲這個事務已提交。
日誌記錄包括全部更新過的數據項的舊值和新值。當系統崩潰後須要對更新進行重作時,就使用新值,若是須要回滾事務,就使用舊值。
在延遲修改機制中,事務執行時全部write操做要延遲到事務提交時才執行,那時系統在執行延遲寫中會用到日誌中與該事務有關的信息。在延遲修改機制中,日誌記錄不須要包含已更新的數據項的舊值。
爲了減小搜索日誌和重作事務的開銷,還可使用檢查點技術。在恢復階段,只需重演自最後一個已完成的檢查點以後的正常操做中所作的全部動做。
恢復機制的高效實現須要儘量減小向數據庫和穩定存儲器寫出的數目。在事務處理所基於的存儲模型中,主存儲器中有一個日誌緩存區、一個數據庫緩存區和一個系統緩存區。日誌記錄在開始時能夠保存在易失性的日誌緩存區中,當是下述狀況之一發生時必須寫到穩定存儲器中:
在<T, commit>日誌記錄能夠輸出到穩定存儲器以前,與事務T相關的全部日誌記錄必須已經輸出到穩定存儲器中。
在主存中的一個數據庫輸出到非易失性存儲器中的數據庫以前,與該塊中數據相關的全部日誌記錄必須已經輸出到穩定存儲器中。
2、爲從形成非易失性存儲器中數據丟失的故障中恢復,則必須週期性地將整個數據庫的內容轉儲到穩定存儲器中(如天天一次)。若是發生了致使物理數據庫丟失的故障,就使用最近一次的轉儲將數據庫恢復到前面的某個一致狀態。一旦完成該恢復,再用日誌將數據庫恢復到最近的一致狀態。
遠程備份系統提供了更高程度的可靠性,容許事務處理即便在主站點遭受火災、洪水或地震等破壞時也能繼續。主站點上的數據和日誌記錄接二連三地備份到遠程備份站點。若是主站點發生故障,遠程備份站點就執行必定的恢復動做,而後接管事務處理。
學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan
數據庫