數據庫常見故障類型
數據庫系統運行過程中可能發生的故障主要分為以下三類,其破壞性由小到大:
故障類型 | 別名 | 根本原因 | 影響范圍 | 典型例子 |
---|---|---|---|---|
?1. 事務故障? | 邏輯故障 | 事務內部的程序邏輯錯誤或輸入異常。 | ?單個或少量事務。 | - 輸入數據不合法(如除零錯誤)。 |
?2. 系統故障? | 軟故障(Soft Crash) | 硬件(如突然斷電)、操作系統或DBMS軟件錯誤,導致系統停止運行。 | ?所有正在運行的事務,?內存數據丟失,但磁盤數據完好。 | - 操作系統崩潰。 |
?3. 介質故障? | 硬故障(Hard Crash) | 存儲數據庫的物理設備發生損壞。 | ?破壞磁盤上的數據,影響范圍最大。 | - 磁盤控制器(Disk Controller)故障。 |
各類故障的恢復策略
各類故障的恢復策略
針對不同的故障類型,數據庫系統采用了相應的恢復機制:
1. 事務故障的恢復
- ?
?恢復方式?: ?撤銷(UNDO)??
- ?
?實現機制?: 系統反向掃描日志文件,找到該事務的所有更新操作,并對這些操作執行逆操作,將數據庫恢復到該事務執行之前的狀態,就像這個事務從未發生過一樣。
- ?
?目標?: 消除失敗事務對數據庫的所有影響。
2. 系統故障的恢復
系統重啟后,恢復子系統需要處理兩種不確定狀態的事務:
- ?
?未完成的事務?: 事務未提交,但其部分修改可能已寫入磁盤。
- ?
?已提交但未落盤的事務?: 事務已提交,但其數據修改可能還在內存緩沖區,未來得及寫入磁盤。
- ?
?恢復方式?: ?撤銷(UNDO) + 重做(REDO)??
- ?
?實現機制?:
- 1.
?撤銷(UNDO)??: 撤銷所有未完成事務的操作,確保原子性。
- 2.
?重做(REDO)??: 重做所有已提交但未落盤事務的操作,確保持久性。
- 1.
- ?
?關鍵技術?: 通過檢查點(Checkpoint)?? 技術來確定哪些事務需要UNDO,哪些需要REDO,這正是我們上一個對話討論的核心內容。
3. 介質故障的恢復
- ?
?恢復方式?: ?重裝備份 + 重做日志?
- ?
實現機制?:
- 1.
裝入最新的數據庫備份?(冷備或熱備),將數據庫恢復到備份時的狀態。
- 2.
裝入備份點之后的所有日志文件副本。
- 3.
重做(REDO)備份之后所有已提交事務的操作,將數據庫恢復到故障發生前的狀態。
- 1.
- ?
?特點?: 恢復速度最慢,對可用性影響最大。因此,?制定定期備份策略和日志歸檔策略至關重要。