1. 程式人生 > >第十章 資料庫恢復技術

第十章 資料庫恢復技術

事務:事務(Transaction)是使用者定義的一個數據庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分割的工作單位。 事務和程式是兩個概念 在關係資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程式 一個程式通常包含多個事務 事務是恢復和併發控制的基本單位

事務的ACID特性: 原子性(Atomicity) 一致性(Consistency) 隔離性(Isolation) 持續性(Durability )

資料庫恢復概述:故障是不可避免的 計算機硬體故障 軟體的錯誤 操作員的失誤 惡意的破壞 故障的影響 執行事務非正常中斷,影響資料庫中資料的正確性 破壞資料庫,全部或部分丟失資料

故障的種類:1.事務內部的故障 2.系統故障 3.介質故障 4.計算機病毒

事務內部的故障 有的是可以通過事務程式本身發現的(見下面轉賬事     務的例子) 有的是非預期的,不能由事務程式處理的。 事務故障意味著 事務沒有達到預期的終點(COMMIT或者顯式的ROLLBACK) 資料庫可能處於不正確狀態。 事務故障的恢復:事務撤消(UNDO) 強行回滾(ROLLBACK)該事務 撤銷該事務已經作出的任何對資料庫的修改,使得該事務象根本沒有啟動一樣 

系統故障 稱為軟故障,是指造成系統停止運轉的任何事件,使得 系統要重新啟動。 整個系統的正常執行突然被破壞 所有正在執行的事務都非正常終止 不破壞資料庫 記憶體中資料庫緩衝區的資訊全部丟失  

系統故障的常見原因:特定型別的硬體錯誤(如CPU故障) 作業系統故障 資料庫管理系統程式碼錯誤 系統斷電

恢復策略:系統重新啟動時,恢復程式讓所有非正常終止的事務回滾,強行撤消(UNDO)所有未完成事務

介質故障 稱為硬故障,指外存故障 磁碟損壞 磁頭碰撞 瞬時強磁場干擾 介質故障破壞資料庫或部分資料庫,並影響正在存取這部分資料的所有事務 介質故障比前兩類故障的可能性小得多,但破壞性大得多

計算機病毒 一種人為的故障或破壞,是一些惡作劇者研製的一種計算機程式 可以繁殖和傳播,造成對計算機系統包括資料庫的危害 計算機病毒種類 小的病毒只有20條指令,不到50B 大的病毒像一個作業系統,由上萬條指令組成

計算機病毒的危害 有的病毒傳播很快,一旦侵入系統就馬上摧毀系統 有的病毒有較長的潛伏期,計算機在感染後數天或數月才開始發病 有的病毒感染系統所有的程式和資料 有的只對某些特定的程式和資料感興趣 計算機病毒已成為計算機系統的主要威脅,自然也是資料庫系統的主要威脅 資料庫一旦被破壞仍要用恢復技術把資料庫加以恢復

靜態轉儲 在系統中無執行事務時進行的轉儲操作 轉儲開始時資料庫處於一致性狀態 轉儲期間不允許對資料庫的任何存取、修改活動 得到的一定是一個數據一致性的副本 優點:實現簡單 缺點:降低了資料庫的可用性 轉儲必須等待正執行的使用者事務結束 新的事務必須等轉儲結束

動態轉儲 轉儲操作與使用者事務併發進行 轉儲期間允許對資料庫進行存取或修改 優點 不用等待正在執行的使用者事務結束 不會影響新事務的執行 動態轉儲的缺點 不能保證副本中的資料正確有效 例在轉儲期間的某時刻Tc,系統把資料A=100轉儲到磁帶上,而在下一時刻Td,某一事務將A改為200。    後備副本上的A過時了

海量轉儲: 每次轉儲全部資料庫 增量轉儲: 只轉儲上次轉儲後更新過的資料 海量轉儲與增量轉儲比較 從恢復角度看,使用海量轉儲得到的後備副本進行恢復往往更方便 如果資料庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效

日誌檔案的格式和內容:以記錄為單位的日誌檔案內容 各個事務的開始標記(BEGIN TRANSACTION) 各個事務的結束標記(COMMIT或ROLLBACK) 各個事務的所有更新操作      以上均作為日誌檔案中的一個日誌記錄 (log  record)

日誌檔案的作用:用途 進行事務故障恢復 進行系統故障恢復 協助後備副本進行介質故障恢復。在靜態轉儲方式中,也可以建立日誌檔案。 當資料庫毀壞後可重新裝入後援副本把資料庫恢復到轉儲結束時刻的正確狀態 利用日誌檔案,把已完成的事務進行重做處理 對故障發生時尚未完成的事務進行撤銷處理 不必重新執行那些已完成的事務程式就可把資料庫恢復到故障前某一時刻的正確狀態

事務故障的恢復:事務故障:事務在執行至正常終止點前被終止 恢復方法 由恢復子系統利用日誌檔案撤消(UNDO)此事務已對資料庫進行的修改 事務故障的恢復由系統自動完成,對使用者是透明的,不需要使用者干預。(1) 反向掃描檔案日誌(即從最後向前掃描日誌檔案),查詢該事務的更新操作。 (2) 對該事務的更新操作執行逆操作。即將日誌記錄中“更新前的值” 寫入資料庫。 插入操作, “更新前的值”為空,則相當於做刪除操作 刪除操作,“更新後的值”為空,則相當於做插入操作 若是修改操作,則相當於用修改前值代替修改後值。(3) 繼續反向掃描日誌檔案,查詢該事務的其他更新操作,並做同樣處理。 (4) 如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。

介質故障的恢復:恢復步驟 (1) 裝入最新的後備資料庫副本(離故障發生時刻最近的轉儲副本) ,使資料庫恢復到最近一次轉儲時的一致性狀態。 對於靜態轉儲的資料庫副本,裝入後資料庫即處於一致性狀態 對於動態轉儲的資料庫副本,還須同時裝入轉儲時刻的日誌檔案副本,利用恢復系統故障的方法(即REDO+UNDO),才能將資料庫恢復到一致性狀態。(2) 裝入有關的日誌檔案副本(轉儲結束時刻的日誌檔案副本) ,重做已完成的事務。 首先掃描日誌檔案,找出故障發生時已提交的事務的標識,將其記入重做佇列。 然後正向掃描日誌檔案,對重做佇列中的所有事務進行重做處理。即將日誌記錄中“更新後的值”寫入資料庫。.