(数据库系统概论|王珊)第十章数据库恢复技术-第四、五、六、七节:数据库恢复技术和数据库镜像
文章目錄
- 一:數據庫恢復的實現技術
- (1)數據轉儲(備份)
- A:轉儲的分類
- ①:按照系統是否運行事物時分類
- ②:按轉儲的范圍分類
- (2)登記日志文件
- A:日志文件的內容
- B:日志文件的作用
- C:登記日志文件
- 二:恢復策略
- (1)事物故障的恢復
- (2)系統故障的恢復
- (3)介質故障的恢復
- 三:具有檢查點的恢復技術
- (1)一個問題
- (2)概述
- (3)利用檢查點的恢復技術
- 四:數據庫鏡像
一:數據庫恢復的實現技術
恢復機制涉及的兩個關鍵點就是
- 如何建立冗余數據
- 如何利用冗余數據實現數據庫恢復
其中建立冗余數據最常用的技術是
- 數據轉儲
- 登記日志文件
(1)數據轉儲(備份)
數據轉儲:指DBA定期手動或者DBMS定期自動將整個數據庫復制到存儲介質上保存起來的過程。這些備用的數據稱之為后備副本。當數據庫遭到破壞后可以將后備副本重新裝入,但是重裝后的副本只能將數據庫恢復到轉儲時的狀態,要想恢復到故障發生時的狀態,必須重新運行自轉儲以后的所有更新事物。因此,轉儲常和日志配合使用
- 例如,系統在TaT_{a}Ta?時刻停止運行事務,進行數據庫轉儲,在TbT_{b}Tb?時刻轉儲完畢,得到TbT_{b}Tb? 時刻的數據庫一致性副本。 系統運行到TfT_{f}Tf?時刻發生故障。為恢復數據庫,首先由數據庫管理員重裝數據庫后備副本,將數據庫恢復至TbT_{b}Tb?時刻的狀態,然后重新運行自TbT_{b}Tb?~TfT_{f}Tf?時刻的所有更新事務,這樣就把數據庫恢復到故障發生前的一致狀態
A:轉儲的分類
①:按照系統是否運行事物時分類
靜態轉儲:是在系統中無運行事務時進行的轉儲操作。即轉儲操作開始的時刻數據庫處于一致性狀態,而轉儲期間不允許(或不存在)對數據庫的任何存取、修改活動。顯然,靜態轉儲得到的一定是一個數據一致性的副本
- 優點:實現簡單
- 缺點:轉儲時必須等待正在運行的用戶事物結束才能進行。降低了數據庫的可用性
動態轉儲:是指轉儲期間允許對數據庫進行存取或修改,也即轉儲和用戶事物可以并發執行
- 優點:不用等待正在運行的事物,增強了數據庫的可用性
- 缺點:轉儲結束時后援副本上的數據庫并不能保證正確有效
因此,對于動態轉儲,還需要建立日志文件(log file)。這樣后備副本加上日志文件就能把數據庫恢復到某一時刻的正確狀態了
②:按轉儲的范圍分類
海量轉儲:每次轉儲全部數據庫
增量轉儲:每次只轉儲上一次轉儲后更新過的數據
依據上述兩種分類方式,進行組合,因此共有如下四種轉儲
(2)登記日志文件
日志文件:是用來記錄事物對數據庫更新操作的文件。主要有兩種格式
- 以記錄為單位的日志文件
- 以數據塊為單位的日志文件
A:日志文件的內容
對于以記錄為單位的日志文件
日志文件中需要登記的內容包括:
- 各個事務的開始(BEGIN TRANSACTION)標記
- 各個事務的結束(COMMIT或ROLLBACK)標記
- 各個事務的所有更新操作
每個事物的開始、結束標記和每個更新操作均為一個日志記錄,其內容主要包括
- 事務標識(標明是哪個事務)
- 操作的類型(插入、刪除或修改)
- 操作對象( 記錄內部標識)
- 更新前數據的舊值(對插入操作而言,此項為空值)
- 更新后數據的新值(對刪除操作而言,此項為空值)
對于以塊為單位的日志文件:日志記錄的內容包括事務標識和被更新的數據塊。由于將更新前的整個塊和更新后的整個塊都放入日志文件中,操作類型和操作對象等信息就不必放入日志記錄中了
B:日志文件的作用
日志文件在數據庫恢復中起著非常重要的作用,可以用來進行事務故障恢復和系統故障恢復,并協助后備副本進行介質故障恢復。具體作用是:
- 事務故障恢復和系統故障恢復必須用日志文件
- 在動態轉儲方式中必須建立日志文件,后備副本和日志文件結合起來才能有效地 恢復數據庫
- 在靜態轉儲方式中也可以建立日志文件,當數據庫毀壞后可重新裝入后備副本
把數據庫恢復到轉儲結束時刻的正確狀態,然后利用日志文件把已完成的事務進行重做處理,對故障發生時尚未完成的事務進行撤銷處理。這樣不必重新運行那些已完成的事務程序就可把數據庫恢復到故障前某一時刻的正確狀態
針對每一種故障,日志文件的作用如下
- 事物故障:利用日志撤銷(UNDO)未完成事物
- 系統故障:利用日志撤銷(UNDO)未完成事物;重做(REDO)已完成事物
- 介質故障:利用日志和副本恢復
- 靜態轉儲副本+日志恢復到故障發生前
- 動態轉儲副本+轉儲期間日志,可以先恢復到備份時的一致性狀態,然后再利用備份后的日志還原數據
C:登記日志文件
為保證數據庫是可恢復的,登記日志文件時必須遵循兩條原則:
- 登記的次序嚴格按并發事務執行的時間次序
- 必須先寫日志文件,后寫數據庫(Write Ahead Logging,WAL)
二:恢復策略
(1)事物故障的恢復
事務故障的恢復是由系統自動完成的,對用戶是透明的。系統的恢復步驟是:
(2)系統故障的恢復
系統故障的恢復是由系統在重新啟動時自動完成的,不需要用戶干預,其步驟為
(這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄),將其事務標識記入重做隊列( REDO-LIST)。同時找出故障發生時尚未完成的事務(這些事務只有BEGINT RANSACTION記錄,無相應的COMMIT記錄),將其事務標識記入撤銷隊列(UNDO-LIST)
(3)介質故障的恢復
- 裝入最新的數據庫后備副本(離故障發生時刻最近的轉儲副本),使數據庫恢復 到最近一次轉儲時的一致性狀態
- 裝入相應的日志文件副本(轉儲結束時刻的日志文件副本),重做已完成的事務:即首先掃描日志文件,找出故障發生時已提交的事務的標識,將其記入重做隊列;然后正向掃描日志文件,對重做隊列中的所有事務進行重做處理。即將日志記錄中“更新后的值”寫入數據庫
三:具有檢查點的恢復技術
(1)一個問題
利用日志技術進行數據庫恢復時,恢復子系統必須搜索日志,確定哪些事務需要重做,哪些事務需要撤銷。一般來說,需要檢查所有日志記錄。這樣做有兩個問題
- 搜索整個日志將耗費大量的時間
- 很多需要重做處理的事務實際上已經將它們的更新操作結果寫到了數據庫中,然而恢復子系統又重新執行了這些操作,浪費了大量時間
為了解決這些問題,引入具有檢查點的恢復技術
(2)概述
具有檢查點的恢復技術:這種技術在日志文件中增加了一類新的記錄——檢查點記錄,增加一個重新開始文件,并讓恢復子系統在登錄日志文件期間動態維護日志。檢查點記錄內容包括
- 建立檢查點時刻所有正在執行的事物清單
- 這些事物最近一個日志記錄的地址
其中重新開始文件用來記錄各個檢查點記錄在日志文件中的地址
動態維護日志文件的方法:周期性地執行建立檢查點、保存數據庫狀態的操作。具體步驟為:
使用檢查點方法可以改善恢復效率。當事務T在一個檢查點之前提交,T對數據庫所做的修改一定都已寫入數據庫,寫入時間是在這個檢查點建立之前或在這個檢查點建立之時。這樣,在進行恢復處理時,沒有必要對事務T執行重做操作。
(3)利用檢查點的恢復技術
系統出現故障時,恢復子系統將根據事務的不同狀態采取不同的恢復策略,如下圖
- T1T_{1}T1?:在檢查點之前提交
- T2T_{2}T2?:在檢查點之前開始執行,在檢查點之后故障點之前提交
- T3T_{3}T3?:在檢查點之前開始執行,在故障點時還未完成
- T4T_{4}T4?:在檢查點之后開始執行,在故障點之前提交
- T5T_{5}T5?:在檢查點之后開始執行,在故障點時還未完成
- T3T_{3}T3?和T5T_{5}T5?在故障發生時還未完成,所以予以撤銷;
- T2T_{2}T2?和 T4T_{4}T4?在檢查點之后才提交,它們對數據庫所做的修改在故障發生時可能還在緩沖區中,尚未寫入數據庫,所以要重做;
- T1T_{1}T1?在檢查點之前已提交,所以不必執行重做操作
系統使用檢查點方法進行恢復的步驟是:
①:從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄
②:由該檢查點記錄得到檢查點建立時刻所有正在執行的事務清單ACTIVE-LIST。建立如下兩個事物隊列
- UNDO-LIST:需要執行UNDO操作的事物集合
- REDO-LIST:需要執行REDO操作的事物集合
③:從檢查點開始正向掃描日志文件
- 如果有新開始的事物TiT_{i}Ti?,則把TiT_{i}Ti?暫時放入UNDO-LIST
- 如果有新提交的事物TjT_{j}Tj?,則把TjT_{j}Tj?從UNDO-LIST移到REDO-LIST
- 重復,直到掃描日志文件結束
④:對UNDO-LIST中的每個事物執行UNDO操作;對REDO-LIST中每個事物執行REDO操作
用上圖所示的例子,恢復步驟如下
①:建立ACTIVE-LIST,很明顯ACTIVE-LIST={T2T_{2}T2?,T3T_{3}T3?}。然后初始化UNDO-LIST={T2T_{2}T2?,T3T_{3}T3?},REDO-LIST={}
②:從檢查點開始正向掃描日志文件
- 第一個讀到的是事物T4T_{4}T4?建立,加入UNDO-LIST
- 第二個讀到的是事物T2T_{2}T2?提交,那么把T2T_{2}T2?從UNDO-LIST移動到REDO-LIST
- 第三個讀到的是事物T5T_{5}T5?建立,加入UNDO-LIST
- 第四個讀到的是事物T5T_{5}T5?提交,那么把T5T_{5}T5?從UNDO-LIST移動到REDO-LIST
③:對UNDO-LIST中的每個事物執行UNDO操作;對REDO-LIST中每個事物執行REDO操作
四:數據庫鏡像
數據庫鏡像:自動地將整個數據庫或其中關鍵數據復制到另一個磁盤上。需要注意,在實際應用中,只對關鍵數據和日志文件進行鏡像,而不是對整個數據庫進行鏡像
- 用于數據庫恢復:當出現介質故障時,可由鏡像磁盤繼續提供使用,同時DBMS自動利用鏡像磁盤數據進行數據庫的恢復,不需要關閉系統和重裝數據庫副本
- 提高數據庫可用性:在沒有出現故障時,當一個用戶對某個數據加排他鎖進行修改時,其他用戶可以讀鏡像數據庫的數據,而不必等待該用戶釋放鎖
總結
以上是生活随笔為你收集整理的(数据库系统概论|王珊)第十章数据库恢复技术-第四、五、六、七节:数据库恢复技术和数据库镜像的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL SERVER2000中订阅与发布
- 下一篇: 计算机网络之物理层:2、码元、速率、带宽