第11章 故障管理
11.1 事務
1、事務是數(shù)據(jù)庫的邏輯控制單位,是操作數(shù)據(jù)的一個程序執(zhí)行單元。
2、為了保證數(shù)據(jù)的完整性,要求數(shù)據(jù)庫系統(tǒng)維護事務具有如下性質(zhì):
(1) 原子性:事務是一個不可分割的工作單位,事務中的操作要么都做,要么都不做;
(2) 一致性:事務執(zhí)行的結(jié)果必須使數(shù)據(jù)庫從一個一致的狀態(tài)變到另一個一致的狀態(tài);
(3) 隔離性:一個事務內(nèi)部的操作及使用的數(shù)據(jù)對于其他并發(fā)事務是隔離的;
(4) 持續(xù)性:一個事務提交后,它對數(shù)據(jù)庫中數(shù)據(jù)的改變是永久性的,即使系統(tǒng)可能出現(xiàn)故障,也不會對其它執(zhí)行的結(jié)果有任何影響。
11.2 故障的種類及解決方法
11.2.1 事務內(nèi)部故障
1、預期的事務內(nèi)部故障:
通過事務程序本身發(fā)現(xiàn)的事物內(nèi)部故障,可以通過將事務回滾,撤銷其對數(shù)據(jù)庫的修改,從而使數(shù)據(jù)庫回到一致性的狀態(tài);
2、非預期的事務內(nèi)部故障:
(1)由于事務內(nèi)部故障大部分屬于此類,所以事務故障僅限指此類故障;
(2)事務故障表明事務沒有提交或撤銷就結(jié)束了,因此數(shù)據(jù)庫可能處于不正確的狀態(tài),因此,恢復事務必須強行回滾事務,在保證該事務對其他事務沒有影響的條件下,利用日志文件撤銷其對數(shù)據(jù)庫的修改,使數(shù)據(jù)庫恢復到該事務運行之前的效果;
(3)事務故障恢復是由系統(tǒng)自動完成的,對用戶是透明的。
11.2.2 系統(tǒng)故障(軟故障)
1、指數(shù)據(jù)庫在運行過程中,由于硬件故障、數(shù)據(jù)庫軟件及操作系統(tǒng)的漏洞、突然停電等情況,導致系統(tǒng)停止運轉(zhuǎn),所有正在運行的事務以非正常方式終止,需要系統(tǒng)重新啟動的一類故障;
2、系統(tǒng)故障導致內(nèi)存中的內(nèi)容丟失,而在硬盤上的內(nèi)容仍然完好;從而導致數(shù)據(jù)庫的數(shù)據(jù)可以處于不正確的狀態(tài);
3、要消除這些事務對數(shù)據(jù)庫的影響,保證數(shù)據(jù)庫中數(shù)據(jù)的一致性,辦法就是在計算機系統(tǒng)重新啟動后,對于未完成的事務可能已經(jīng)寫入數(shù)據(jù)庫的內(nèi)容,回滾所有未完成的事務寫的結(jié)果,以保證數(shù)據(jù)庫中數(shù)據(jù)的一致性;對于已完成的事務可能部分或全部留在緩存區(qū)的結(jié)果,需要重做所有已提交的事務,以將數(shù)據(jù)庫真正恢復到一致狀態(tài)。
4、一句話,當數(shù)據(jù)庫發(fā)生系統(tǒng)故障時,容錯對策是在重新啟動系統(tǒng)后,撤銷(UNDO)所有未提交的事務,重做(REDO)所有已提交的事務。
11.2.3 介質(zhì)故障(硬故障)
1、指數(shù)據(jù)庫在運行過程中,由于磁盤損壞、天災****等情況,使用數(shù)據(jù)庫中的數(shù)據(jù)部分或全部丟失的一類故障;
2、介質(zhì)故障的容錯對策采用兩種方式:
(1)軟件容錯:
是使用數(shù)據(jù)庫備份及事務日志文件,通過恢復技術(shù),恢復數(shù)據(jù)庫到備份結(jié)束時的狀態(tài);
(2)硬件容錯:
目前常用的方法是采用雙物理存儲設備,最完全的方式是設計兩套相同的數(shù)據(jù)庫系統(tǒng)同時工作,數(shù)據(jù)的變化也同步,空間有一定距離,這樣當發(fā)生損壞性的自然現(xiàn)象時,由于兩套數(shù)據(jù)庫系統(tǒng)具有空間距離,因此同時發(fā)生破壞的概率幾乎為零,達到數(shù)據(jù)庫的完全安全。
11.2.4 計算機病毒故障
1、計算機病毒是一種惡意的計算機程序,在對計算機系統(tǒng)造成破壞的同時也可對數(shù)據(jù)庫系統(tǒng)造成破壞(主要破壞數(shù)據(jù)庫文件);
2、可以通過設立防火墻預防,殺毒軟件查殺已感染的文件和數(shù)據(jù)庫備份來解決;
11.3 數(shù)據(jù)庫恢復技術(shù)概述
1、 恢復機制涉及兩個關鍵問題:
(1) 如何建立冗余數(shù)據(jù);
(2) 如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復。
2、 最常用的建立冗余數(shù)據(jù)技術(shù)是數(shù)據(jù)備份和登錄日志文件,他們通常是結(jié)合起來使用的。
11.4 數(shù)據(jù)轉(zhuǎn)儲
1、 數(shù)據(jù)轉(zhuǎn)儲—指數(shù)據(jù)庫管理員(DBA)定期拷貝數(shù)據(jù)庫,并將拷貝得到的數(shù)據(jù)庫放到其他介質(zhì)中的過程。
2、 DBA可在數(shù)據(jù)庫系統(tǒng)發(fā)生故障后,利用這些副本恢復數(shù)據(jù)庫,但此時恢復的數(shù)據(jù)庫只能回到轉(zhuǎn)儲時的狀態(tài),要想恢復到故障前的狀態(tài),需要參考日志文件,重新運行轉(zhuǎn)儲后到故障前的所有事務才可以;
3、 靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲
(1) 靜態(tài)轉(zhuǎn)儲:在靜態(tài)轉(zhuǎn)儲過程中系統(tǒng)不能運行其他事務,不允許在轉(zhuǎn)儲期間對數(shù)據(jù)庫的任何存取、修改活動。
(2) 動態(tài)轉(zhuǎn)儲:允許轉(zhuǎn)儲操作和用戶事務并發(fā)執(zhí)行;
(3) 靜態(tài)轉(zhuǎn)儲雖然保證了數(shù)據(jù)的有效性,但卻是以降低數(shù)據(jù)庫的可用性為代價;而動態(tài)轉(zhuǎn)儲雖然提高了數(shù)據(jù)庫的可用性,但數(shù)據(jù)庫的有效性卻得不到保證。
(4) 為了能保證數(shù)據(jù)的有效性,而又不降低可用性,就需要引入日志文件,用它記錄轉(zhuǎn)儲期間各事務對數(shù)據(jù)庫的修改活動,然后使用動態(tài)轉(zhuǎn)儲的備份副本加上日志文件就可將數(shù)據(jù)庫恢復到某一時刻的正確狀態(tài)。
3、 幾種數(shù)據(jù)轉(zhuǎn)儲機制
(1) 完全轉(zhuǎn)儲:對所有數(shù)據(jù)庫進行備份,需占用較多時間和空間,可作為系統(tǒng)失敗時恢復數(shù)據(jù)庫的基礎;
(2) 增量轉(zhuǎn)儲:只復制上次備份后變化的文件;
(3) 差量轉(zhuǎn)儲:對最近一次數(shù)據(jù)庫完全備份以來發(fā)生的數(shù)據(jù)變化進行備份,優(yōu)點是速度快,占用較少的時間和空間。
4、 多種轉(zhuǎn)儲方法結(jié)合使用
(1) 僅采用完全轉(zhuǎn)儲;
(2) 完全轉(zhuǎn)儲加增量轉(zhuǎn)儲;
(3) 完全轉(zhuǎn)儲加差量轉(zhuǎn)儲
11.5 登記日志文件
11.5.1 日志文件的格式和內(nèi)容
日志文件是記錄每個事務對數(shù)據(jù)庫更新操作的文件,數(shù)據(jù)庫系統(tǒng)在運行過程中,DBMS負責將所有事務的更新操作登記到日志文件中,也就是說日志文件是系統(tǒng)自動維護的。
1、以記錄為單位的日志文件:其內(nèi)容包括每個事務的開始標記、結(jié)束標記和所有更新操作;每個日志記錄的內(nèi)容包括:事務標識、操作類型、操作對象、更新前數(shù)據(jù)的舊值,和更新后數(shù)據(jù)的新值;
2、數(shù)據(jù)塊為單位的日志文件:將更新前的整個數(shù)據(jù)塊和更新后的整個數(shù)據(jù)塊全部放在了日志文件中;
11.5.2 日志文件的作用
1、事務故障恢復和系統(tǒng)故障恢復必須使用日志文件
(1)故障恢復的兩個基本操作:UNDO和REDO
(A) UNDO的作用是撤銷事務,具體步驟:
(a) 反向掃描日志文件,找到需要撤銷的事務的更新操作;
(b) 對事務的更新操作執(zhí)行逆操作;
(c) 繼續(xù)反向查找該事務的其他更新操作,并執(zhí)行相應的逆操作;
(d) 重復執(zhí)行步驟(C),直至遇到該事務開始記錄。
(B) REDO的作用是重做事務,具體步驟:
(a) 正向掃描日志文件,找到需要重做的事務的更新操作;
(b) 對事務重新執(zhí)行日志文件登記的操作,即將日志文件中“更新后的值”寫入數(shù)據(jù)庫;
(c) 繼續(xù)正向查找該事務的其他更新操作,并重新執(zhí)行,將日志文件中“更新后的值”寫入數(shù)據(jù)庫;
(d) 重復執(zhí)行步驟(C),直至遇到該事務的提交記錄。
(1) 事務故障恢復:只需把相應的事務作撤銷UNDO即可;
(2) 系統(tǒng)故障恢復:
(A) 正向掃描日志文件,找到系統(tǒng)故障前發(fā)生的所有事務,如果該事務沒有完成,將其事務標記加入撤銷隊列,如果該事務已經(jīng)完成,則將其事務標記加入重做隊列;
(B) 對撤銷隊列中的所有事務作撤銷操作UNDO;
(C) 對重做隊列中的所有事務作重做操作REDO。
2、在動態(tài)轉(zhuǎn)儲方式中必須建立日志文件
1、 在靜態(tài)轉(zhuǎn)儲方式中,也可以建立日志文件
11.5.3 登記日志文件的原則
1、 登記的次序嚴格按并行事務執(zhí)行的時間次序;
2、 必須先寫日志文件,后寫數(shù)據(jù)庫
11.6 具有檢查點的恢復技術(shù)
11.6.1 檢查點的作用
檢查點限度地減少數(shù)據(jù)庫完全恢復時所必須執(zhí)行的日志部分;
11.6.2 檢查點的引入
1、在日志文件中增加一類新的記錄—檢查點記錄,增加一個“重新開始文件”,并讓恢復子系統(tǒng)在登錄日志文件期間動態(tài)地維護日志
2、檢查點記錄的內(nèi)容:
(1) 建立檢查點時刻所有正在執(zhí)行的事務清單;
(2) 這些事務最近一個日志記錄的地址。
3、“重新開始文件”用來記錄各個檢查點在日志文件中的地址;
2、 動態(tài)維護日志文件的方法是周期性地執(zhí)行如下操作:建立檢查點、保存數(shù)據(jù)庫狀態(tài),具體步驟:
(1) 將當前日志緩沖中的所有日志記錄寫入磁盤的日志文件上;
(2) 在日志文件中寫入一個檢查點記錄;
(3) 將當前數(shù)據(jù)緩沖的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中;
(4) 把檢查點記錄在日志文件中的地址寫入一個“重新開始文件”;
3、 恢復子系統(tǒng)可以定期或不定期地建立檢查點來保存數(shù)據(jù)庫狀態(tài);
4、 使用檢查點方法可以改善恢復效率,事務在檢查點前已經(jīng)提交,則不必執(zhí)行REDO操作。
11.6.3 恢復的步驟
1、 從“重新開始文件”中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄;
2、 由該檢查點記錄得到檢查點建立時刻所正在執(zhí)行的事務清單,需要執(zhí)行UNDO操作的事務建立UNDO隊列,需要執(zhí)行REDO操作的事務建立REDO隊列;
3、 從檢查點開始正向掃描日志文件,如有新開始的事務,則放入UNDO隊列,如有提交事務,則放入REDO隊列;
4、 對UNDO隊列中的每個事務執(zhí)行UNDO操作,對REDO隊列中的事務進行REDO操作。
11.7 數(shù)據(jù)庫鏡像
11.7.1 數(shù)據(jù)庫鏡像的引入
為了避免介質(zhì)故障對數(shù)據(jù)庫可用性的影響,許多數(shù)據(jù)庫系統(tǒng)都提供了數(shù)據(jù)庫鏡像的功能
11.7.2 數(shù)據(jù)庫鏡像簡介
1、 數(shù)據(jù)庫鏡像是一種用于提高數(shù)據(jù)庫可用性的解決方案,它根據(jù)DBA要求,自動把整個數(shù)據(jù)庫或其中的關鍵數(shù)據(jù)復制到另一個磁盤中。
2、 數(shù)據(jù)庫鏡像的優(yōu)點:
(1) 數(shù)據(jù)庫鏡像提供完整或接近完整的數(shù)據(jù)冗余,增強數(shù)據(jù)保護功能;
(2) 發(fā)生災難時,數(shù)據(jù)庫鏡像可快速使數(shù)據(jù)庫的備用副本提供服務,使數(shù)據(jù)不會丟失,提高數(shù)據(jù)庫的可用性;
(3) 提高鏡像數(shù)據(jù)庫在升級期間的可用性。
11.7.3 數(shù)據(jù)庫鏡像分類
1、 雙機互備援模式:就是兩臺主機均為工作機,兩臺工作機均為信息系統(tǒng)提供支持,并互相監(jiān)視對方的運行情況,當一臺主機出現(xiàn)異常時,另一主機則主動接管異常機的工作,保證信息系統(tǒng)能夠不間斷運行。工作機的切換時機:
(1) 系統(tǒng)軟件或應用軟件造成服務器宕機;
(2) 服務器沒有宕機,系統(tǒng)軟件或應用軟件工作不正常;
(3) SCSI卡損壞,造成服務器與磁盤陳列無法存取數(shù)據(jù);
(4) 服務器內(nèi)硬件損壞,造成服務器宕機;
(5) 服務器不正常關機
2、雙機熱備份模式:一臺主機為工作機,另一臺主機為備份機,在系統(tǒng)正常運行的情況下,工作機為信息系統(tǒng)提供支持,備份機監(jiān)視工作機的運行情況。當工作機異常時,備份機主動接管工作機工作,從而保證信息系統(tǒng)不間斷提供服務。
11.7.4 工作方式
1、 在“數(shù)據(jù)庫鏡像會話”中,主體服務器和鏡像服務器作為“伙伴”進行通信和協(xié)作。這兩個伙伴在會話中扮演互補的角色:“主體角色”和“鏡像角色”,擁有主體角色的稱為“主體服務器”,擁有鏡像角色的稱為“鏡像服務器”。
2、 數(shù)據(jù)庫鏡像涉及盡快將對主體數(shù)據(jù)庫執(zhí)行的每項插入、更新和刪除操作重做到鏡像數(shù)據(jù)庫中。重做通過將每個活動事務日志記錄發(fā)送到鏡像服務器來完成,這會盡快將日志記錄按順序應用到鏡像數(shù)據(jù)庫中,這樣,每當數(shù)據(jù)庫更新時,DBMS將自動保證鏡像數(shù)據(jù)與主體數(shù)據(jù)的一致性;
3、 在出現(xiàn)介質(zhì)故障時,可由鏡像數(shù)據(jù)庫繼續(xù)提供使用,同時DBMS將自動利用鏡像磁盤數(shù)據(jù)進行主數(shù)據(jù)庫的恢復,不需關閉系統(tǒng)。
4、 一旦出現(xiàn)介質(zhì)故障,通常使用一個“角色切換”的過程來互換主體服務器和鏡像服務器。
5、 由于數(shù)據(jù)庫鏡像是通過復制數(shù)據(jù)實現(xiàn)的,在實際應用中,用戶只選擇對關鍵數(shù)據(jù)和日志文件進行鏡像,而不是對整個數(shù)據(jù)庫進行鏡像。
11.8 RAID的恢復技術(shù)
1、 RAID—廉價冗余磁盤陳列,它是由多塊磁盤構(gòu)成的一個整體,但并不是簡單的磁盤容量疊加,而是相對于其他存儲設備在容量、管理、性能、可靠性和可用性上都有了進一步的提高。尤其獨特的是,當從這些磁盤中抽出一塊,利用其他磁盤上的信息,可以恢復出這塊磁盤的信息;
2、 RAID系統(tǒng)可以連接在主機系統(tǒng)上,作為其存儲數(shù)據(jù)的介質(zhì),與一般存儲設備不同的是,它具有設備虛擬化的能力。即RAID系統(tǒng)內(nèi)部可以包含很多個磁盤驅(qū)動器,但在主機系統(tǒng)是看不到的,主機系統(tǒng)主能通過一個子系統(tǒng)RAID控制器與這些磁盤構(gòu)成虛擬設備進行交互。
3、 RAID的冗余技術(shù):
(1) 鏡像冗余:把所有的數(shù)據(jù)拷貝到其他設備上,但額外開銷很大,需要更多磁盤、控制器和電纜;
(2) 校驗冗余:通過對成員磁盤的數(shù)據(jù)執(zhí)行異或(XOR)操作,得到其校驗值,并存放在另外的校驗磁盤上。該技術(shù)實現(xiàn)起來稍顯復雜,但它占用的磁盤比鏡像少。