數據庫的恢復技術

什麼是事務?

答:事務是用戶定義的一個數據庫操作序列,這些操作要麼全做,要麼全不做。事務具有原子性、一致性、隔離性、持續性的四大特性,簡稱ACID特性。故障恢復可以保證事務的原子性和持續性。

故障的種類有哪些?‘

  1. 事務內部故障:如運算溢出、違反某些完整性約束而被終止等;(恢復操作:撤銷)
  2. 系統故障:如CPU故障、操作系統故障、DBMS代碼錯誤、斷電等;(恢復操作:撤銷和重做)
  3. 介質故障:如硬盤、磁盤損壞、瞬時強磁場干擾等;
  4. 計算機病毒;

有哪些恢復的實現技術?

答:恢復的基本原理就是冗餘,就是建立冗餘數據並利用它來恢復數據。建立冗餘數據最常用技術就是數據轉儲和登記日誌文件。

  1. 數據轉儲:數據庫管理員定期將整個數據庫複製到磁盤、磁帶或其他存儲介質上保存的過程。
    1. 靜態轉儲:系統在無運行任何事務的時候進行的轉儲操作,優點是一定會得到數據一致性的副本,缺點是降低了數據庫的可用性。
    2. 動態轉儲:轉儲期間允許對數據庫進行存取或修改,但得到的後備副本不能保證正確有效,這要加上日誌文件才能恢復到正確狀態。
  2. 登記日誌文件:日誌文件用來記錄事務對數據庫的更新操作。
    1. 格式和內容:通常以記錄爲單位,一個記錄包括事務的開始、事務的所有更新操作、事務的結束。
    2. 作用:進行事務故障恢復和系統故障恢復。
    3. 原則:登記的次序嚴格按併發事務的執行時間次序、必須先寫日誌後寫數據庫。

爲什麼登記日誌要先寫日誌文件,後寫數據庫?

答:對數據庫修改和把這個修改的日誌記錄寫入日誌文件是兩個不同操作,如果在這兩個操作中間出現錯誤,若是先修改數據庫,而在運行記錄中沒有登記這個修改,就無法恢復這個修改了。若是先登記日誌文件而沒有修改數據庫,按日誌恢復時只不過多執行一遍不必要的undo而已。

數據庫恢復策略有哪些?

  • 事務故障的恢復

事務故障是指事務運行至正常終點‘前被終止,這時恢復子系統應利用日誌文件撤銷此事務對已對數據庫進行的修改。這種事故恢復由系統自動完成,下面是恢復步驟:

  1. 反向掃描日誌文件,查找該事務的更新操作;
  2. 對該事務的更新操作進行逆操作;
  3. 繼續反向掃描日誌文件,重複步驟一和二,直至讀到事務的開始標誌。
  • 系統故障恢復

系統故障的原因有兩,一個是未完成的事務對數據庫的更新可能已經寫入數據庫,另一個是已提交的事務對數據庫的更新還停留在緩衝區沒來得及寫入數據庫。因此對系統故障的恢復操作就是撤銷故障發生時未完成的事務,重做已完成的事務。系統故障由系統自動完成。

  1. 正向掃描日誌文件,找出故障發生前已經提交的事務,將其事務標識記入重做隊列,同時找出故障發生時未完成的事務,將其事務標識記入撤銷隊列。
  2. 對撤銷隊列做反向撤銷處理。
  3. 對重做隊列做正向重做處理。
  • 介質故障的恢復

發生介質故障後,磁盤上的物理數據和日誌文件被破壞,這是最嚴重的一種故障,恢復方法是重裝數據庫,然後重做已完成的事務


具有檢查點的恢復技術

出現原因:

  1. 搜索整個日誌文件將會耗費大量時間;
  2. 很多需要重做的事務實際上已經將它們的更新結果寫入了數據庫,然而恢復系統又重複執行一遍。

本質:在日誌文件內加入一類新記錄——檢查點記錄,並增加一個重新開始文件。


數據庫鏡像

出現原因:應對介質故障,數據庫的恢復不僅費時,而且數據庫管理員還必須週期性地轉儲數據庫,這會加重數據庫管理員的負擔。現在磁盤不僅便宜,而且容量大,所以許多數據庫系統提供了數據庫鏡像,其可以自動將整個數據庫或其中重要的數據複製到另一個磁盤,並且當主數據庫更新時,其也會自動將更新的數據複製過去。

沒有出現故障時

  1. 可用於併發操作
  2. 一個用戶對數據加排他鎖修改數據,其他用戶可以讀鏡像數據庫上的數據,而不必等待該用戶釋放鎖