資料庫總結第十章
第十章 資料庫恢復技術
10.1 事務的基本概念
1.事務
- 事務(Transaction)是使用者定義的一個數據庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分割的工作單位。
- 事務和程式是兩個概念
- 在關係資料庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程式
- 一個程式通常包含多個事務
- 事務是恢復和併發控制的基本單位
2.事務的ACID特性
事務的ACID特性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔離性(Isolation)
- 持續性(Durability )
- 事務是資料庫的邏輯工作單位
- 事務中包括的諸操作要麼都做,要麼都不做
- 事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態
- 一致性狀態
- 資料庫中只包含成功事務提交的結果
- 不一致狀態
- 資料庫系統執行中發生故障,有些事務尚未完成就被迫中斷;
- 這些未完成事務對資料庫所做的修改有一部分已寫入物
理資料庫,這時資料庫就處於一種不正確的狀態
一個事務的執行不能被其他事務干擾
-
- 一個事務內部的操作及使用的資料對其他併發事務是隔離的
- 併發執行的各個事務之間不能互相干擾
- 一個事務內部的操作及使用的資料對其他併發事務是隔離的
- 持續性也稱永久性(Permanence)
- 一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。
- 接下來的其他操作或故障不應該對其執行結果有任何影響。
- 保證事務ACID特性是事務處理的任務
- 破壞事務ACID特性的因素
(1) 多個事務並行執行時,不同事務的操作交叉執行
-
-
- 資料庫管理系統必須保證多個事務的交叉執行不影響這些事務的隔離性
-
(2)事務在執行過程中被強行停止
-
-
- 資料庫管理系統必須保證被強行終止的事務對資料庫和其他事務沒有任何影響
- 資料庫管理系統必須保證被強行終止的事務對資料庫和其他事務沒有任何影響
-
10.2 資料庫恢復概述
- 故障是不可避免的
- 計算機硬體故障
- 軟體的錯誤
- 操作員的失誤
- 惡意的破壞
- 故障的影響
- 執行事務非正常中斷,影響資料庫中資料的正確性
- 破壞資料庫,全部或部分丟失資料
- 資料庫的恢復
- 資料庫管理系統必須具有把資料庫從錯誤狀態恢復到某一已知的正確狀態(亦稱為一致狀態或完整狀態)的功能,這就是資料庫的恢復管理系統對故障的對策
- 恢復子系統是資料庫管理系統的一個重要組成部分
- 恢復技術是衡量系統優劣的重要指標
10.3 故障的種類
1.事務內部的故障
2.系統故障
3.介質故障
4.計算機病毒
- 事務內部的故障
- 有的是可以通過事務程式本身發現的(見下面轉賬事
務的例子)
-
- 有的是非預期的,不能由事務程式處理的。
- 這個例子所包括的兩個更新操作要麼全部完成要麼全部不做。否則就會使資料庫處於不一致狀態,例如只把賬戶甲的餘額減少了而沒有把賬戶乙的餘額增加。
- 在這段程式中若產生賬戶甲餘額不足的情況,應用程式可以發現並讓事務滾回,撤銷已作的修改,恢復資料庫到正確狀態。
- 事務內部更多的故障是非預期的,是不能由應用程式處理的。
- 運算溢位
- 併發事務發生死鎖而被選中撤銷該事務
- 違反了某些完整性限制而被終止等
以後,事務故障僅指這類非預期的故障
- 事務故障意味著
- 事務沒有達到預期的終點(COMMIT或者顯式的ROLLBACK)
- 資料庫可能處於不正確狀態。
- 事務故障的恢復:事務撤消(UNDO)
- 強行回滾(ROLLBACK)該事務
- 撤銷該事務已經作出的任何對資料庫的修改,使得該事務象根本沒有啟動一樣
- 系統故障
稱為軟故障,是指造成系統停止運轉的任何事件,使得
系統要重新啟動。
-
- 整個系統的正常執行突然被破壞
- 所有正在執行的事務都非正常終止
- 不破壞資料庫
- 記憶體中資料庫緩衝區的資訊全部丟失
- 特定型別的硬體錯誤(如CPU故障)
- 作業系統故障
- 資料庫管理系統程式碼錯誤
- 系統斷電
- 發生系統故障時,一些尚未完成的事務的結果可能已送入物理資料庫,造成資料庫可能處於不正確狀態。
- 恢復策略:系統重新啟動時,恢復程式讓所有非正常終止的事務回滾,強行撤消(UNDO)所有未完成事務
- 發生系統故障時,有些已完成的事務可能有一部分甚至全部留在緩衝區,尚未寫回到磁碟上的物理資料庫中,系統故障使得這些事務對資料庫的修改部分或全部丟失
- 恢復策略:系統重新啟動時,恢復程式需要重做(REDO)所有已提交的事務
- 介質故障
稱為硬故障,指外存故障
-
- 磁碟損壞
- 磁頭碰撞
- 瞬時強磁場干擾
- 介質故障破壞資料庫或部分資料庫,並影響正在存取這部分資料的所有事務
- 介質故障比前兩類故障的可能性小得多,但破壞性大得多
- 計算機病毒
- 一種人為的故障或破壞,是一些惡作劇者研製的一種計算機程式
- 可以繁殖和傳播,造成對計算機系統包括資料庫的危害
- 計算機病毒種類
- 小的病毒只有20條指令,不到50B
- 大的病毒像一個作業系統,由上萬條指令組成
- 計算機病毒的危害
- 有的病毒傳播很快,一旦侵入系統就馬上摧毀系統
- 有的病毒有較長的潛伏期,計算機在感染後數天或數月才開始發病
- 有的病毒感染系統所有的程式和資料
- 有的只對某些特定的程式和資料感興趣
- 計算機病毒已成為計算機系統的主要威脅,自然也是資料庫系統的主要威脅
- 資料庫一旦被破壞仍要用恢復技術把資料庫加以恢復
- 各類故障,對資料庫的影響有兩種可能性
- 一是資料庫本身被破壞
- 二是資料庫沒有被破壞,但資料可能不正確,這是由於事務的執行被非正常終止造成的。
- 恢復操作的基本原理:冗餘
- 利用儲存在系統別處的冗餘資料來重建資料庫中已被破壞或不正確的那部分資料
- 恢復的實現技術:複雜
- 一個大型資料庫產品,恢復子系統的程式碼要佔全部程式碼的10%以上
10.4 恢復的實現技術
恢復機制涉及的關鍵問題
1. 如何建立冗餘資料
-
-
- 資料轉儲(backup)
- 登記日誌檔案(logging)
-
2. 如何利用這些冗餘資料實施資料庫恢復
資料轉儲
1.什麼是資料轉儲
- 轉儲是指資料庫管理員定期地將整個資料庫複製到磁帶、磁碟或其他儲存介質上儲存起來的過程
- 備用的資料文字稱為後備副本(backup)或後援副本
- 資料庫遭到破壞後可以將後備副本重新裝入
- 重灌後備副本只能將資料庫恢復到轉儲時的狀態
- 要想恢復到故障發生時的狀態,必須重新執行自轉儲以後的所有更新事務
(1)靜態轉儲與動態轉儲
(2)海量轉儲與增量轉儲
(3)轉儲方法小結
- 靜態轉儲
- 在系統中無執行事務時進行的轉儲操作
- 轉儲開始時資料庫處於一致性狀態
- 轉儲期間不允許對資料庫的任何存取、修改活動
- 得到的一定是一個數據一致性的副本
- 優點:實現簡單
- 缺點:降低了資料庫的可用性
- 轉儲必須等待正執行的使用者事務結束
- 新的事務必須等轉儲結束
- 動態轉儲
- 轉儲操作與使用者事務併發進行
- 轉儲期間允許對資料庫進行存取或修改
- 優點
- 不用等待正在執行的使用者事務結束
- 不會影響新事務的執行
- 動態轉儲的缺點
- 不能保證副本中的資料正確有效
- 例在轉儲期間的某時刻Tc,系統把資料A=100轉儲到磁帶上,而在下一時刻Td,某一事務將A改為200。
後備副本上的A過時了
- 利用動態轉儲得到的副本進行故障恢復
- 需要把動態轉儲期間各事務對資料庫的修改活動登記下來,建立日誌檔案
- 後備副本加上日誌檔案就能把資料庫恢復到某一時刻的正確狀態
- 海量轉儲: 每次轉儲全部資料庫
- 增量轉儲: 只轉儲上次轉儲後更新過的資料
- 海量轉儲與增量轉儲比較
- 從恢復角度看,使用海量轉儲得到的後備副本進行恢復往往更方便
- 如果資料庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效
登記日誌檔案
1.日誌檔案的格式和內容
2.日誌檔案的作用
3.登記日誌檔案
- 什麼是日誌檔案
- 日誌檔案(log file)是用來記錄事務對資料庫的更新操作的檔案
- 日誌檔案的格式
- 以記錄為單位的日誌檔案
- 以資料塊為單位的日誌檔案
- 以記錄為單位的日誌檔案內容
- 各個事務的開始標記(BEGIN TRANSACTION)
- 各個事務的結束標記(COMMIT或ROLLBACK)
- 各個事務的所有更新操作
以上均作為日誌檔案中的一個日誌記錄 (log record)
- 以記錄為單位的日誌檔案,每條日誌記錄的內容
- 事務標識(標明是哪個事務)
- 操作型別(插入、刪除或修改)
- 操作物件(記錄ID、Block NO.)
- 更新前資料的舊值(對插入操作而言,此項為空值)
- 更新後資料的新值(對刪除操作而言, 此項為空值)
- 以資料塊為單位的日誌檔案,每條日誌記錄的內容
- 事務標識
- 被更新的資料塊
- 用途
- 進行事務故障恢復
- 進行系統故障恢復
- 協助後備副本進行介質故障恢復
- 具體作用
- 事務故障恢復和系統故障恢復必須用日誌檔案。
- 在動態轉儲方式中必須建立日誌檔案,後備副本和日誌檔案結合起來才能有效地恢復資料庫。
- 在靜態轉儲方式中,也可以建立日誌檔案。
- 當資料庫毀壞後可重新裝入後援副本把資料庫恢復到轉儲結束時刻的正確狀態
- 利用日誌檔案,把已完成的事務進行重做處理
- 對故障發生時尚未完成的事務進行撤銷處理
- 不必重新執行那些已完成的事務程式就可把資料庫恢復到故障前某一時刻的正確狀態
- 為保證資料庫是可恢復的,登記日誌檔案時必須遵循兩條原則
- 登記的次序嚴格按併發事務執行的時間次序
- 必須先寫日誌檔案,後寫資料庫
- 寫日誌檔案操作:把表示這個修改的日誌記錄寫到
日誌檔案中
-
-
- 寫資料庫操作:把對資料的修改寫到資料庫中
-
- 為什麼要先寫日誌檔案
- 寫資料庫和寫日誌檔案是兩個不同的操作
- 在這兩個操作之間可能發生故障
- 如果先寫了資料庫修改,而在日誌檔案中沒有登記下這個修改,則以後就無法恢復這個修改了
- 如果先寫日誌,但沒有修改資料庫,按日誌檔案恢復時只不過是多執行一次不必要的UNDO操作,並不會影響資料庫的正確性
10.5 恢復策略
事務故障的恢復
- 事務故障:事務在執行至正常終止點前被終止
- 恢復方法
- 由恢復子系統利用日誌檔案撤消(UNDO)此事務已對資料庫進行的修改
- 事務故障的恢復由系統自動完成,對使用者是透明的,不需要使用者干預
(1) 反向掃描檔案日誌(即從最後向前掃描日誌檔案),查詢該事務的更新操作。
(2) 對該事務的更新操作執行逆操作。即將日誌記錄中“更新前的值” 寫入資料庫。
-
- 插入操作, “更新前的值”為空,則相當於做刪除操作
- 刪除操作,“更新後的值”為空,則相當於做插入操作
- 若是修改操作,則相當於用修改前值代替修改後值
(3) 繼續反向掃描日誌檔案,查詢該事務的其他更新操作,並做同樣處理。
(4) 如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。
系統故障的恢復
- 系統故障造成資料庫不一致狀態的原因
- 未完成事務對資料庫的更新可能已寫入資料庫
- 已提交事務對資料庫的更新可能還留在緩衝區沒來得及寫入資料庫
- 恢復方法
1. Undo 故障發生時未完成的事務
2. Redo 已完成的事務
- 系統故障的恢復由系統在重新啟動時自動完成,不需要使用者干預
(1)正向掃描日誌檔案(即從頭掃描日誌檔案)
-
- 重做(REDO) 佇列: 在故障發生前已經提交的事務
- 這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄
- 撤銷 (UNDO)佇列:故障發生時尚未完成的事務
- 這些事務只有BEGIN TRANSACTION記錄,無相應的COMMIT記錄
- 重做(REDO) 佇列: 在故障發生前已經提交的事務
(2) 對撤銷(UNDO)佇列事務進行撤銷(UNDO)處理
-
-
- 反向掃描日誌檔案,對每個撤銷事務的更新操作執行逆操作
- 即將日誌記錄中“更新前的值”寫入資料庫
-
(3)對重做(REDO)佇列事務進行重做(REDO)處理
-
-
- 正向掃描日誌檔案,對每個重做事務重新執行登記的操作
- 即將日誌記錄中“更新後的值”寫入資料庫
-
介質故障的恢復
1.重灌資料庫
2.重做已完成的事務
- 恢復步驟
(1) 裝入最新的後備資料庫副本(離故障發生時刻最近的轉儲副本) ,使資料庫恢復到最近一次轉儲時的一致性狀態。
-
- 對於靜態轉儲的資料庫副本,裝入後資料庫即處於一致性狀態
- 對於動態轉儲的資料庫副本,還須同時裝入轉儲時刻的日誌檔案副本,利用恢復系統故障的方法(即REDO+UNDO),才能將資料庫恢復到一致性狀態。
(2) 裝入有關的日誌檔案副本(轉儲結束時刻的日誌檔案副本) ,重做已完成的事務。
-
- 首先掃描日誌檔案,找出故障發生時已提交的事務的標識,將其記入重做佇列。
- 然後正向掃描日誌檔案,對重做佇列中的所有事務進行重做處理。即將日誌記錄中“更新後的值”寫入資料庫。
介質故障的恢復需要資料庫管理員介入
- 資料庫管理員的工作
- 重灌最近轉儲的資料庫副本和有關的各日誌檔案副本
- 執行系統提供的恢復命令
- 具體的恢復操作仍由資料庫管理系統完成
10.6 具有檢查點的恢復技術
1.問題的提出
2.檢查點技術
3.利用檢查點的恢復策略
- 兩個問題
- 搜尋整個日誌將耗費大量的時間
- 重做處理:重新執行,浪費了大量時間
- 具有檢查點(checkpoint)的恢復技術
- 在日誌檔案中增加檢查點記錄(checkpoint)
- 增加重新開始檔案
- 恢復子系統在登入日誌檔案期間動態地維護日誌
- 檢查點記錄的內容
- 建立檢查點時刻所有正在執行的事務清單
- 這些事務最近一個日誌記錄的地址
- 重新開始檔案的內容
- 記錄各個檢查點記錄在日誌檔案中的地址
- 動態維護日誌檔案的方法
週期性地執行如下操作:建立檢查點,儲存資料庫狀態。
具體步驟是:
(1)將當前日誌緩衝區中的所有日誌記錄寫入磁碟的日誌檔案上
(2)在日誌檔案中寫入一個檢查點記錄
(3)將當前資料緩衝區的所有資料記錄寫入磁碟的資料庫中
(4)把檢查點記錄在日誌檔案中的地址寫入一個重新開始檔案
- 恢復子系統可以定期或不定期地建立檢查點,儲存資料庫狀態
- 定期
- 按照預定的一個時間間隔,如每隔一小時建立一個檢查點
- 不定期
- 按照某種規則,如日誌檔案已寫滿一半建立一個檢查點
- 定期
- 使用檢查點方法可以改善恢復效率
- 當事務T在一個檢查點之前提交,T對資料庫所做的修改已寫入資料庫
- 寫入時間是在這個檢查點建立之前或在這個檢查點建立之時
- 在進行恢復處理時,沒有必要對事務T執行重做操作
- 從重新開始檔案中找到最後一個檢查點記錄在日誌檔案中的地址,由該地址在日誌檔案中找到最後一個檢查點記錄
(2)由該檢查點記錄得到檢查點建立時刻所有正在執行的事務清單ACTIVE-LIST
-
- 建立兩個事務佇列
- UNDO-LIST
- REDO-LIST
- 把ACTIVE-LIST暫時放入UNDO-LIST佇列,REDO佇列暫為空。
- 建立兩個事務佇列
(3)從檢查點開始正向掃描日誌檔案,直到日誌檔案結束
-
- 如有新開始的事務Ti,把Ti暫時放入UNDO-LIST佇列
- 如有提交的事務Tj,把Tj從UNDO-LIST佇列移到REDO-LIST佇列;直到日誌檔案結束
(4)對UNDO-LIST中的每個事務執行UNDO操作
對REDO-LIST中的每個事務執行REDO操作
10.7 資料庫映象
- 介質故障是對系統影響最為嚴重的一種故障,嚴重影響資料庫的可用性
- 介質故障恢復比較費時
- 為預防介質故障,資料庫管理員必須週期性地轉儲資料庫
- 提高資料庫可用性的解決方案
- 資料庫映象(Mirror)
- 資料庫映象
- 資料庫管理系統自動把整個資料庫或其中的關鍵資料複製到另一個磁碟上
- 資料庫管理系統自動保證映象資料與主資料的一致性
每當主資料庫更新時,資料庫管理系統自動把更新後的資料複製過去
- 出現介質故障時
- 可由映象磁碟繼續提供使用
- 同時資料庫管理系統自動利用映象磁碟資料進行資料庫的恢復
- 不需要關閉系統和重灌資料庫副本
- 沒有出現故障時
-
- 可用於併發操作
- 一個使用者對資料加排他鎖修改資料,其他使用者可以讀映象資料庫上的資料,而不必等待該使用者釋放鎖
-
- 頻繁地複製資料自然會降低系統執行效率
- 在實際應用中使用者往往只選擇對關鍵資料和日誌檔案映象
- 不是對整個資料庫進行映象
小結
- 事務的概念和性質
- 事務是資料庫的邏輯工作單位
- 資料庫管理系統保證系統中一切事務的原子性、一致性、隔離性和持續性,就保證了事務處於一致狀態
- 故障的種類
- 事務故障
- 系統故障
- 介質故障
- 恢復中最經常使用的技術
- 資料庫轉儲
登記日誌檔案
- 恢復的基本原理
- 利用儲存在後備副本、日誌檔案和資料庫映象中的冗餘資料來重建資料庫
- 事務
- 不僅是恢復的基本單位
- 也是併發控制的基本單位