數據庫故障、恢復(日誌恢復重點)的若干問題

爲什麼要進行數據庫恢復?
爲了保障事務的原子性和持久性,確保數據不丟失、不破壞。常用數據轉儲和日誌文件進行數據恢復
故障的種類有哪些?
1、事物內部故障。
分爲預期故障和非預期故障,一般重點談論非預期故障。
預期故障可以通過事務程序本身發現,例如在寫java程序時,使用try catch就可以捕捉預期故障並處理。在數據庫中也可以通過在事務中加入判斷來預期。
非預期故障可以理解爲意料之外,例如運算溢出、併發事務死鎖,違反了完整性約束。
非預期故障的一些特點:沒有到達預期終點,如commit或者先是rollback。解決方式是事務撤銷undo
2、系統故障
發生原因和影響:cup故障、操作系統故障、dbms代碼錯誤,影響正在運行的所有事務,不破壞數據庫
處理方式:強行撤銷UNDO所有未完成的事物;REDO所有已提交的事務,目的是讓數據庫達到一致性
3、介質故障
數據庫的存儲硬件的故障,這類故障破壞數據庫或部分數據,影響正在存取這部分數據的所有事務

數據庫轉儲技術
1、靜態轉儲和動態轉儲
區分在於,轉儲過程中能不能執行事務。動態轉儲可以執行事務。但由於轉儲過程需要時間的,轉儲開始時是一個一致狀態,但過程中事務會修改數據庫,數據會不一致。因此,轉儲得到的是不一致狀態的數據庫,所以就要把轉儲過程中的數據庫活動及日誌記錄下來。根據數據庫後援副本和日誌文件可以讓數據庫恢復到一個確定狀態。
2、海量轉儲和增量轉儲
區分在於是否一次轉儲所有數據。增量轉儲適合數據庫較大修改比較頻繁的情況。
使用日誌恢復數據庫(重點)
兩條原則三種類型分別是什麼?
兩條原則:日誌文件必須遵循,寫日誌文件的次序嚴格按照併發事務執行的時間次序;必須先寫入日誌文件,再寫數據庫。
三種類型:(T,START)表示事務T已經開始
(T,X,V1,V2),事務T對數據項X從原始值V1變成了V2。
(T,COMMIT)事務T已經提交

推遲更新技術和即時更新技術比較。
協議的不同點
所謂的協議就是一個規則一個約定。
先列舉 推遲更新技術協議
1、每個事務達到提交點之前不能更新數據庫;
2、每個事務的所有更新操作的日誌沒有寫入永恆存儲器之前,不能達到提交點。
即時更新技術協議
1、所有的(T,X,V1,V2)型日誌被寫入永恆存儲器之前,不能更新數據庫
2、所有的(T,X,V1,V2)型日誌記錄寫入永恆存儲器之前,不能事務T提交
推遲更新協議中,必須要等到日誌都寫入永恆存儲器才能更新數據庫
而即時更新協議中,只要一條更新操作的日誌被寫入永恆存儲器,這個數據對象就被更新了。
兩個協議的描述,我是參考《數據庫原理及應用》(第二版),即時更新技術協議的描述有點容易產生誤會,如果改成“一條(T,X,V1,V2)型日誌被寫入永恆存儲器後,纔可以更新相應的數據對象”會好一點。

爲什麼會有檢查點技術?
檢查點技術是爲了接近日誌恢復時的一些效率問題產生的。日誌恢復的問題是:1、要搜索整個日誌,開銷巨大;2、一些事物已經運行完畢,如果REDO等於有重新執行了一遍,浪費計算資源。
因此只要在日誌文件中加入一個檢查點,並增加一個重新開始文件,恢復時只要從檢查點開始恢復即可。
檢查點內容包括:
建立檢查點時刻所有正在執行的事務清單。正在執行事務的清單會分成undolist和redolist。
這些事務最近一個日誌記錄的地址。
重新開始文件的目的是什麼?
重新開始文件記錄的都是檢查點記錄在日誌文件中的地址。在通過日誌恢復數據的時候,從開始文件文件中找到最近的檢查點記錄,然後根據檢查點記錄地址,去磁盤中讀取日誌,避免了遍歷所有日誌的可能,提高了效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章