數據庫故障恢復技術

前言php

數據庫故障恢復就是把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱爲一致狀態或完整狀態)。web

1、故障的種類數據庫

一、事務故障
- 邏輯故障,例如:除以0;
- 餘額不容許爲負。svg

二、系統崩潰故障
- 停電、硬件故障,藍屏死機故障。學習

三、磁盤故障
- 分爲數據庫磁盤故障和日誌磁盤故障。日誌

四、災難故障
- 例如:地震,火災等不可抗因素。xml

2、故障恢復方法
主要講述經常使用的日誌方法,分頁方法由於不多使用,有興趣能夠自行查閱資料。blog

一、事務故障的恢復:撤消事務(UNDO)事務

具體方法:get

(1). 反向掃描文件日誌(即從最後向前掃描日誌文件),查找該事務的更新操做。
(2). 對該事務的更新操做執行逆操做。即將日誌記錄中「更新前的值」 寫入數據庫。
插入操做, 「更新前的值」爲空,則至關於作刪除操做
刪除操做,「更新後的值」爲空,則至關於作插入操做
如果修改操做,則至關於用修改前值代替修改後值
(3). 繼續反向掃描日誌文件,查找該事務的其餘更新操做,並作一樣處理。
(4). 如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。

二、系統崩潰故障的恢復

發生系統故障時,事務未提交
恢復策略:強行撤消(UNDO)全部未完成事務
發生系統故障時,事務已提交,但緩衝區中的信息還沒有徹底寫回到磁盤上。
恢復策略:重作(REDO)全部已提交的事務

具體方法:

重啓數據庫管理系統;從日誌磁盤讀取日誌文件;反向掃描日誌,也就是從日誌文件的結束位置開始後向掃描。當發現一個事務在日誌記錄中沒有 記錄時,執行undo( Ti) 操做,使用舊值恢復數據項: 而後從日誌文件的開始位置順向掃描。對日誌記錄中含有的事務,執行redo( Ti) 操做,使用新值恢復數據項;

新的問題來了,運行日誌保留了若干天的記錄,掃描整個日誌文件很費時,如何解決?

檢查點

解決方法

週期性的作檢查點(checkpointing)

檢查點

更詳細講解請跳轉至
數據庫故障恢復

三、磁盤(介質)故障的恢復

數據庫磁盤故障,把dump的備份數據庫文件拷貝到新的數據庫磁盤上;從日誌文件的末尾逆向掃描直至記錄,再順向掃描日誌記錄,對有日誌記錄的事務作redo(Ti)操做。

日誌磁盤故障:再也不接收事務請求,讓當前的全部活動事務執行完畢;輸出數據庫緩衝區中的緩衝數據到數據庫磁盤中(即checkpoint);執行Dump操做,把磁盤中的數據庫文件拷貝到另外一個磁盤上;更換日誌磁盤。

日誌磁盤恢復

四、災難故障的恢復:遠程備份

3、小結

事務故障的恢復

UNDO

系統故障的恢復

UNDO + REDO

介質故障的恢復

重裝備份並恢復到一致性狀態 + REDO

災難故障的恢復

遠程備份


以上爲我的的學習總結,有不妥之處,請在評論中指出。