數據庫系統概論(第十章數據庫恢復技術)

第10章 數據庫恢復技術

事務是一系列的數據庫操作,是數據庫應用程序的基本邏輯單元。事務處理(transaction processing)技術主要包括數據庫恢復技術和併發控制技術。

10.1 事務的基本概念

1、事務

所謂事務是用戶定義的一個數據庫操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作單位。

事務和程序是兩個概念,一般一個程序中包含多個事務。如果用戶沒有顯式的定義事務,則DBMS自動劃分事務。定義事務的語句一般有三條:

  • BEGIN TRANSACTION
  • COMMIT
  • ROLLBACK

事務通常是以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結束,

COMMIT表示提交,即提交事務的所有操作。具體的就是將事務中所有對數據庫的更新寫回到磁盤上的物理數據庫中去,事務正常結束。

ROLLBACK表示回滾,即在事務運行的過程中發生了某種故障,事務不能繼續執行,系統將事務中對數據庫的所有已完成的操作全部撤銷,回滾到事務開始時的狀態。

2、事務的ACID特性

事務具有4個特性:原子性,一致性,隔離性和持續性

  • 原子性:事務中的操作要麼都做,要麼都不做
  • 一致性:事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態
  • 隔離性:一個事物的執行不能被其他事務干擾,併發執行的各個事務之間不能互相干擾
  • 持續性:一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的

可能破壞事務ACID特性的因素有:
1. 多個事務併發運行時,不同事務的操作交叉執行
2. 事務在運行過程中被強行停止

10.2 數據庫恢復概述

數據庫的恢復:把數據庫從錯誤狀態恢復到某一已知的正確狀態

10.3 故障的種類

  1. 事務故障:運行過程中,由於種種原因,使事務未運行到正常終止點就被撤銷。隻影響這個事物本身,一般是非預期的,如運算溢出、因爲死鎖被撤銷等,解決方法是強行回滾,稱爲事務撤銷
  2. 系統故障(軟故障):造成系統停止運轉的任何事件,使得系統重新啓動。影響正在運行的所有事務,但不破壞數據庫。
    1. 解決方法:清除所有未完成的事務對數據庫的所有更改。同時重做所有已提交的事務(因爲這些已提交的事務可能還在緩衝區沒寫到磁盤上的物理數據庫上)
  3. 介質故障(硬故障):指外存故障,如磁盤損壞
    1. 解決方法:備份
  4. 計算機病毒:產生故障的原因,本身不是故障,可能產生故障2或3

總結各類故障對數據庫的影響有兩種可能性,一種是數據庫本身被破壞,二是數據庫沒有被破壞,但數據可能不正確。

恢復的基本原理十分簡單,可以用一個詞概括,冗餘

10.4 恢復的實現技術

建立冗餘數據:

  • 1. 數據轉儲
  • 2. 登記日誌文件

數據庫的恢復:把數據庫從錯誤狀態恢復到某一已知的正確狀態

10.4.1 數據轉儲

靜態轉儲:系統中無運行事務時進行的轉儲,轉儲期間不允許任何事務執行。
優點:得到的一定是一個數據一致性的副本
缺點:降低了數據庫的可用性

動態轉儲:轉儲和用戶事務可以併發執行
優點:系統可用性較好
缺點:轉儲得到的副本不一定一致,因此必須建立日誌文件等級轉儲期間各事務對數據庫的修改活動

海量轉儲:每次轉儲整個數據庫,恢復更方便
增量轉儲:每次只轉儲上一次轉儲後更新過的數據,恢復較複雜
 

這裏寫圖片描述

10.4.2 登記日誌文件

1、日誌文件的格式和內容
     兩種格式:以記錄爲單位/以數據塊爲單位
     需要登記的內容:

2、日誌文件的作用:是爲了記錄對數據庫中的每一次更新。
     事務/系統故障恢復必須用日誌文件
     動態轉儲必須建立日誌文件,後備副本和日誌文件結合纔能有效地恢復
     靜態轉儲中:

這裏寫圖片描述

3、 登記日誌文件的兩條原則
      登記的次序按併發事務執行的時間次序
      必須先寫日誌文件,後寫數據庫

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

把對數據的修改寫到數據庫中和把表示這個修改的日誌記錄寫到日誌文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。
如果先寫了數據庫修改,而在運行記錄中沒有登記這個修改,則以後就無法恢復這個修改了。如果先寫日誌,但沒有修改數據庫,在恢復時只不過是多執行一次UNDO 操作,並不會影響數據庫的正確性。所以一定要先寫日誌文件,即首先把日誌記錄寫到日誌文件中,然後寫數據庫的修改。

10.5 恢復策略

10.5.1 事務故障的恢復

系統自動完成的,對用戶是透明的
恢復步驟:
1. 反向掃描日誌文件,查找該事務的更新操作
2. 對該事務的更新操作執行逆操作
3. 重複12,直至讀到此事務的開始標記

10.5.2 系統故障的恢復

系統在重新啓動時自動完成的,不需要用戶干預
恢復步驟:
1. 正向掃描日誌文件,找出故障發生前已經提交的事務(有BEGIN有COMMIT),記入重做事務。同時找出未完成的事務(只有BEGIN),加入撤銷隊列
2. 對撤銷隊列中的事務進行撤銷處理:反向掃描並執行逆操作
3. 對重做隊列中的各個事務進行重做處理:正向掃描並重做

10.5.3 介質故障的恢復

恢復方法:
1. 裝入最新的數據庫後備副本,對於動態轉儲還需同時裝入轉儲開始時刻的日誌文件副本
2. 裝入相應的日誌文件副本(轉儲結束時刻的日誌文件副本),重做已完成的事務

10.6 具有檢查點的恢復技術

利用日誌技術進行數據庫恢復時,恢復子系統必須搜索日誌,確定哪些事務需要重做,哪些事務需要撤銷,一般需要檢查所有日誌記錄,有兩個問題,一是搜索整個日誌將耗費大量的時間,二是很多需要重做處理的事務實際上已經將他們的更新操作結果寫到了數據庫中,然而恢復子系統又重新執行了這些操作,浪費了大量的時間。爲了解決這些問題,又發展了具有檢查點的恢復技術。這種技術在日誌文件中增加了一類新的記錄--檢查點記錄。

檢查點記錄的內容:
- 建立檢查點時刻所有正在執行的事務清單
- 這些事務最近一個日誌記錄的地址

這裏寫圖片描述

這裏寫圖片描述

 

- 重新開始文件記錄檢查點記錄
- 檢查點記錄裏面記錄活躍的事務:T1T2,以及它們的最後日誌記錄D1D2

恢復方法:

這裏寫圖片描述

清理日誌文件:在重新開始文件裏面找到上一個與當前檢查點沒有相同的活躍事務的檢查點,那麼它之前的日誌記錄都可以刪掉

日誌刷出去了以後系統故障:沒問題,因爲這個檢查點還沒寫到重新開始文件上,寫重新開始文件是最後一步

10.7 數據庫鏡像

用途:
1. 介質故障時將應用遷移到鏡像數據庫,使數據庫可以繼續使用,同時恢復著數據庫
2. 提供系統併發訪問

實際應用中用戶往往只對關鍵數據和日誌文件進行鏡像
 

習題:

1.試述事務的概念及事務的4 個特性。

事務是用戶定義的一個數據庫操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作單位。
事務具有4 個特性:原子性(Atomicity )、一致性(consistency )、隔離性( Isolation )和持續性(Durability )。這4 個特性也簡稱爲ACID 特性。
原子性:事務是數據庫的邏輯工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性:事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
隔離性:一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對其他併發事務是隔離的,併發執行的各個事務之間不能互相干擾。持續性:持續性也稱永久性(Perfnanence ) ,指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其執行結果有任何影響。

2 .爲什麼事務非正常結束時會影響數據庫數據的正確性,請列舉一例說明之。

事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。如果數據庫系統運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說是不一致的狀態。
例如某工廠的庫存管理系統中,要把數量爲Q 的某種零件從倉庫1 移到倉庫2 存放。
則可以定義一個事務T , T 包括兩個操作;Ql = Ql 一Q , Q2= Q2 + Q。 如果T 非正常終止時只做了第一個操作,則數據庫就處於不一致性狀態,庫存量無緣無故少了Q 。

3 .數據庫中爲什麼要有恢復子系統?它的功能是什麼?

因爲計算機系統中硬件的故障、軟件的錯誤、操作員的失誤以及惡意的破壞是不可避免的,這些故障輕則造成運行事務非正常中斷,影響數據庫中數據的正確性,重則破壞數據庫,使數據庫中全部或部分數據丟失,因此必須要有恢復子系統。
恢復子系統的功能是:把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱爲一致狀態或完整狀態)。

4 .數據庫運行中可能產生的故障有哪幾類?哪些故障影響事務的正常執行?哪些故障破壞數據庫數據?

數據庫系統中可能發生各種各樣的故障,大致可以分以下幾類:

(1)事務內部的故障;
(2)系統故障;
(3)介質故障;
(4)計算機病毒。
事務故障、系統故障和介質故障影響事務的正常執行;介質故障和計算機病毒破壞數據庫數據。

5 .數據庫恢復的基本技術有哪些?

數據轉儲和登錄日誌文件是數據庫恢復的基本技術。
當系統運行過程中發生故障,利用轉儲的數據庫後備副本和日誌文件就可以將數據庫恢復到故障前的某個一致性狀態。

6 .數據庫轉儲的意義是什麼?試比較各種數據轉儲方法。

數據轉儲是數據庫恢復中採用的基本技術。所謂轉儲即DBA 定期地將數據庫複製到磁帶或另一個磁盤上保存起來的過程。當數據庫遭到破壞後可以將後備副本重新裝入,將數據庫恢復到轉儲時的狀態。

靜態轉儲:在系統中無運行事務時進行的轉儲操作,如上圖所示。靜態轉儲簡單,但必須等待正運行的用戶事務結束才能進行。同樣,新的事務必須等待轉儲結束才能執行。顯然,這會降低數據庫的可用性。
動態轉儲:指轉儲期間允許對數據庫進行存取或修改。動態轉儲可克服靜態轉儲的缺點,它不用等待正在運行的用戶事務結束,也不會影響新事務的運行。但是,轉儲結束時後援副本上的數據並不能保證正確有效。因爲轉儲期間運行的事務可能修改了某些數據,使得後援副本上的數據不是數據庫的一致版本。爲此,必須把轉儲期間各事務對數據庫的修改活動登記下來,建立日誌文件( 109 file )。這樣,後援副本加上日誌文件就能得到數據庫某一時刻的正確狀態。轉儲還可以分爲海量轉儲和增量轉儲兩種方式。
海量轉儲是指每次轉儲全部數據庫。增量轉儲則指每次只轉儲上一次轉儲後更新過的數據。從恢復角度看,使用海量轉儲得到的後備副本進行恢復一般說來更簡單些。但如果數據庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效。

7 .什麼是日誌文件?爲什麼要設立日誌文件?

(1)日誌文件是用來記錄事務對數據庫的更新操作的文件。
(2)設立日誌文件的目的是:進行事務故障恢復;進行系統故障恢復;協助後備副本進行介質故障恢復。

8 .登記日誌文件時爲什麼必須先寫日誌文件,後寫數據庫?

把對數據的修改寫到數據庫中和把表示這個修改的日誌記錄寫到日誌文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。
如果先寫了數據庫修改,而在運行記錄中沒有登記這個修改,則以後就無法恢復這個修改了。如果先寫日誌,但沒有修改數據庫,在恢復時只不過是多執行一次UNDO 操作,並不會影響數據庫的正確性。所以一定要先寫日誌文件,即首先把日誌記錄寫到日誌文件中,然後寫數據庫的修改。

9 .針對不同的故障,試給出恢復的策略和方法。(即如何進行事務故障的恢復?系統故障的恢復?介質故障恢復?
事務故障的恢復:

事務故障的恢復是由DBMS DBMs 執行恢復步驟是:

自動完成的,對用戶是透明的。

(1)反向掃描文件日誌(即從最後向前掃描日誌文件),查找該事務的更新操作;
(2)對該事務的更新操作執行逆操作,即將日誌記錄中“更新前的值”寫入數據庫;
(3)繼續反向掃描日誌文件,做同樣處理;
(4)如此處理下去,直至讀到此事務的開始標記,該事務故障的恢復就完成了。

系統故障的恢復:
系統故障可能會造成數據庫處於不一致狀態:一是未完成事務對數據庫的更新可能已寫入數據庫;二是已提交事務對數據庫的更新可能還留在緩衝區,沒來得及寫入數據庫。因此恢復操作就是要撤銷(UNDO )故障發生時未完成的事務,重做(REDO )已完成的事務。
系統的恢復步驟是:
(1)正向掃描日誌文件,找出在故障發生前已經提交的事務隊列(REDO 隊列)和未完成的事務隊列(uNDO 隊列)。
(2)對撤銷隊列中的各個事務進行UNDO 處理。
進行UNDO 處理的方法是,反向掃描日誌文件,對每個UNDO 事務的更新操作執行逆操作,即將日誌記錄中“更新前的值”Before Image )寫入數據庫。( 3 )對重做隊列中的各個事務進行REDO 處理。
進行REDO 處理的方法是:正向掃描日誌文件,對每個REDO 事務重新執行日誌文件登記的操作。即將日誌記錄中“更新後的值”Afte , Image )寫入數據庫。

介質故障的恢復:
介質故障是最嚴重的一種故障。
恢復方法是重裝數據庫,然後重做已完成的事務。具體過程是:

( 1 ) DBA 裝入最新的數據庫後備副本(離故障發生時刻最近的轉儲副本), 使數據庫恢復到轉儲時的一致性狀態;
( 2 ) DBA 裝入轉儲結束時刻的日誌文件副本;
( 3 ) DBA 啓動系統恢復命令,由DBMS 完成恢復功能,即重做已完成的事務。

10 .什麼是檢查點記錄?檢查點記錄包括哪些內容?
檢查點記錄是一類新的日誌記錄。它的內容包括:
① 建立檢查點時刻所有正在執行的事務清單

② 這些事務的最近一個日誌記錄的地址。

11 .具有檢查點的恢復技術有什麼優點?試舉一個具體的例子加以說明。

利用日誌技術進行數據庫恢復時,恢復子系統必須搜索日誌,確定哪些事務需要REDO ,哪些事務需要uNDO 。一般來說,需要檢查所有日誌記錄。這樣做有兩個問題:一是搜索整個日誌將耗費大量的時間;二是很多需要REDO 處理的事務實際上已經將它們的更新操作結果寫到數據庫中了,恢復子系統又重新執行了這些操作,浪費了大量時間。
檢查點技術就是爲了解決這些問題。

在採用檢查點技術之前,恢復時需要從頭掃描日誌文件,而利用檢查點技術只需要從T 。開始掃描日誌,這就縮短了掃描日誌的時間。
事務Tl 的更新操作實際上已經寫到數據庫中了,進行恢復時沒有必要再REDO 處理,採用檢查點技術做到了這一點。

12 .試述使用檢查點方法進行恢復的步驟。

(1)從重新開始文件(見第11 題的圖)中找到最後一個檢查點記錄在日誌文件中的地址,由該地址在日誌文件中找到最後一個檢查點記錄。
(2)由該檢查點記錄得到檢查點建立時刻所有正在執行的事務清單ACTIVE 一LIST 。
這裏建立兩個事務隊列:
1 ) UNDO 一LIST :需要執行undo 操作的事務集合;
2 ) REDO 一LIST :需要執行redo 操作的事務集合。
把ACTIVE 一LIST 暫時放入UNDO 一LIST 隊列,REDO 隊列暫爲空。

3 )從檢查點開始正向掃描日誌文件:
① 如有新開始的事務T * ,把T *暫時放入uNDO 一LlsT 隊列;
② 如有提交的事務毛,把毛從UNDO 一LIST 隊列移到REDO 一LIST 隊列,直到日誌文件結束;
4 )對UNDO 一LIST 中的每個事務執行UNDO 操作,對REDO 一LIST 中的每個事務執行REDO 操作。

13 .什麼是數據庫鏡像?它有什麼用途?

數據庫鏡像即根據DBA 的要求,自動把整個數據庫或者其中的部分關鍵數據複製到另一個磁盤上。每當主數據庫更新時,DBMS 自動把更新後的數據複製過去,即DBMS 自動保證鏡像數據與主數據的一致性。
數據庫鏡像的用途有:

  • 一是用於數據庫恢復。當出現介質故障時,可由鏡像磁盤繼續提供使用,同時DBMS 自動利用鏡像磁盤數據進行數據庫的恢復,不需要關閉系統和重裝數據庫副本。
  • 二是提高數據庫的可用性。在沒有出現故障時,當一個用戶對某個數據加排它鎖進行修改時,其他用戶可以讀鏡像數據庫上的數據,而不必等待該用戶釋放鎖。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章