時間:2022-11-16 10:30:01 | 來源:信息時代
時間:2022-11-16 10:30:01 來源:信息時代
數(shù)據(jù)庫恢復(fù) : 把數(shù)據(jù)庫從錯誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)的功能。盡管數(shù)據(jù)庫系統(tǒng)中采取了各種保護(hù)措施來防止數(shù)據(jù)庫的安全性和完整性被破壞,保證并發(fā)事務(wù)的正確執(zhí)行,但是計算機(jī)系統(tǒng)中硬件的故障、軟件的錯誤、操作員的失誤以及惡意的破壞仍是不可避免的,這些故障輕則造成運行事務(wù)非正常中斷,影響數(shù)據(jù)庫中數(shù)據(jù)的正確性,重則破壞數(shù)據(jù)庫,使數(shù)據(jù)庫中全部或部分?jǐn)?shù)據(jù)丟失,因此,數(shù)據(jù)庫管理系統(tǒng)必須具有數(shù)據(jù)庫恢復(fù)功能。
數(shù)據(jù)庫恢復(fù)的技術(shù)涉及到兩個關(guān)鍵問題,即如何建立冗余數(shù)據(jù)和如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù)。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲(DBA定期進(jìn)行)和登錄日志文件(記錄事務(wù)對數(shù)據(jù)庫的更新操作)。在一個數(shù)據(jù)庫系統(tǒng)中,這兩種方法通常是一起使用的。
數(shù)據(jù)轉(zhuǎn)儲是數(shù)據(jù)庫恢復(fù)中采用的基本技術(shù)。所謂轉(zhuǎn)儲即DBA定期地將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。轉(zhuǎn)儲可分為靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲。
靜態(tài)轉(zhuǎn)儲是指在系統(tǒng)中無運行事務(wù)時進(jìn)行的轉(zhuǎn)儲操作,即轉(zhuǎn)儲操作開始的時刻,數(shù)據(jù)庫處于一致性狀態(tài),而轉(zhuǎn)儲期間不允許(或不存在)對數(shù)據(jù)庫的任何存取、修改活動。顯然,靜態(tài)轉(zhuǎn)儲得到的一定是一個數(shù)據(jù)一致性的副本。靜態(tài)轉(zhuǎn)儲比較簡單,但轉(zhuǎn)儲必須等待正運行的用戶事務(wù)結(jié)束才能進(jìn)行。同樣,新的事務(wù)必須等待轉(zhuǎn)儲結(jié)束才能執(zhí)行。顯然,這會降低數(shù)據(jù)庫的可用性。
動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲期間允許對數(shù)據(jù)庫進(jìn)行存取或修改,即轉(zhuǎn)儲和用戶事務(wù)可以并發(fā)執(zhí)行。動態(tài)轉(zhuǎn)儲可克服靜態(tài)轉(zhuǎn)儲的缺點,它不用等待正在運行的用戶事務(wù)結(jié)束,也不會影響新事務(wù)的運行。但是,轉(zhuǎn)儲結(jié)束時后援副本上的數(shù)據(jù)并不能保證正確有效。為此,必須把轉(zhuǎn)儲期間各事務(wù)對數(shù)據(jù)庫的修改活動登記下來,建立日志文件(log file)。這樣,后援副本加上日志文件就能把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀態(tài)。
轉(zhuǎn)儲還可以分為海量轉(zhuǎn)儲和增量轉(zhuǎn)儲兩種方式。海量轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫;增量轉(zhuǎn)儲則指每次只轉(zhuǎn)儲上一次轉(zhuǎn)儲后更新過的數(shù)據(jù)。從恢復(fù)角度看,使用海量轉(zhuǎn)儲所得到的后備副本來進(jìn)行恢復(fù)一般說來會更方便些。但如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲方式更實用、更有效。
轉(zhuǎn)儲是十分耗費時間和資源的,不能頻繁進(jìn)行。DBA應(yīng)該根據(jù)數(shù)據(jù)庫使用情況確定一個適當(dāng)?shù)霓D(zhuǎn)儲周期。
日志文件是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。不同數(shù)據(jù)庫系統(tǒng)采用的日志文件格式并不完全一樣。概括起來日志文件主要有兩種格式: 以記錄為單位的日志文件和以數(shù)據(jù)塊為單位的日志文件。
日志文件在數(shù)據(jù)庫恢復(fù)中起著非常重要的作用,可以用來進(jìn)行事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù),并協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù)。在數(shù)據(jù)庫恢復(fù)中,日志的具體作用如下:
(1)事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù)必須用日志文件。
(2)在動態(tài)轉(zhuǎn)儲方式中必須建立日志文件,后援副本和日志文件綜合起來才能有效地恢復(fù)數(shù)據(jù)庫。
(3)在靜態(tài)轉(zhuǎn)儲方式中,也可以建立日志文件。當(dāng)數(shù)據(jù)庫毀壞后可重新裝入后援副本把數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲結(jié)束時刻的正確狀態(tài),然后利用日志文件,把已完成的事務(wù)進(jìn)行重做處理,對故障發(fā)生時尚未完成的事務(wù)進(jìn)行撤銷處理。這樣不必重新運行那些已完成的事務(wù)程序就可把數(shù)據(jù)庫恢復(fù)到故障前某一時刻的正確狀態(tài)。
為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件時必須遵循兩條原則:
(1)登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時間次序。
(2)必須先寫日志文件,后寫數(shù)據(jù)庫。把對數(shù)據(jù)的修改寫到數(shù)據(jù)庫中和把表示這個修改的日志記錄寫到日志文件中是兩個不同的操作。有可能在這兩個操作之間發(fā)生故障,即這兩個寫操作只完成了一個。如果先寫了數(shù)據(jù)庫修改,而在運行記錄中沒有登記這個修改,則以后就無法恢復(fù)這個修改了。
當(dāng)系統(tǒng)運行過程中發(fā)生故障,利用數(shù)據(jù)庫后備副本和日志文件就可以將數(shù)據(jù)庫恢復(fù)到故障前的某個一致性狀態(tài)。通常使用如下策略恢復(fù)數(shù)據(jù)庫:
(1)利用數(shù)據(jù)庫后備副本重裝數(shù)據(jù)庫:通過搜索(正向或反向掃描)日志文件,確定并對事務(wù)進(jìn)行重做(REDO)或撤銷(UNDO)處理。
(2)檢查點技術(shù):利用日志技術(shù)進(jìn)行數(shù)據(jù)庫恢復(fù)時,恢復(fù)子系統(tǒng)必須搜索日志,確定哪些事務(wù)需要REDO,哪些事務(wù)需要UNDO。這樣做有兩個問題:一是搜索整個日志將耗費大量的時間; 二是很多需要REDO處理的事務(wù)實際上已經(jīng)將它們的更新操作結(jié)果寫到數(shù)據(jù)庫中了,然而恢復(fù)子系統(tǒng)又重新執(zhí)行了這些操作,浪費了大量時間。因此,發(fā)展了具有檢查點的恢復(fù)技術(shù)。該技術(shù)在日志文件中增加一類新的記錄——檢查點(checkpoint)記錄,增加一個重新開始文件,并讓恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護(hù)日志。
(3)數(shù)據(jù)庫鏡像技術(shù):數(shù)據(jù)庫鏡像技術(shù)即自動地把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上,DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。一旦出現(xiàn)介質(zhì)故障,可由鏡像磁盤繼續(xù)提供使用,同時DBMS自動利用鏡像磁盤數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的恢復(fù),不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫副本。在沒有出現(xiàn)故障時,數(shù)據(jù)庫鏡像還可以用于并發(fā)操作。
不同故障其恢復(fù)策略和方法也不一樣。其中事務(wù)故障的恢復(fù)由系統(tǒng)自動完成,系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動時自動完成,介質(zhì)故障的恢復(fù)需要DBA介入,但具體的恢復(fù)操作仍由DBMS完成。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。