趙文海 趙祥敏
摘要:文章概述了數(shù)據(jù)庫恢復(fù)技術(shù)的種類,介紹了數(shù)據(jù)庫發(fā)生故障時常見的恢復(fù)方法,同時針對不同的失效類型提出了恢復(fù)對策,以供參考。
關(guān)鍵詞:數(shù)據(jù)庫恢復(fù)方法
1、前言
數(shù)據(jù)庫的失效往往導(dǎo)致一個機構(gòu)的癱瘓,然而,任何一個數(shù)據(jù)庫系統(tǒng)總不可能不發(fā)生故障。數(shù)據(jù)庫系統(tǒng)對付故障有兩種辦法:其一是盡可能提高系統(tǒng)的可靠性;另一種方法是在系統(tǒng)發(fā)生故障后,把數(shù)據(jù)庫恢復(fù)至原來的狀態(tài)。
2、恢復(fù)技術(shù)的種類
2.1 單純以北方為基礎(chǔ)的恢復(fù)技術(shù)
單純以備份為基礎(chǔ)的恢復(fù)技術(shù)是由文件系統(tǒng)恢復(fù)技術(shù)演變而來的,即周期性地把磁盤上的數(shù)據(jù)庫復(fù)制或轉(zhuǎn)儲到磁帶上。由于磁帶是脫機存放的,系統(tǒng)對它沒有任何影響。當(dāng)數(shù)據(jù)庫失效時,可以取最近一次從磁盤復(fù)制到磁帶上的數(shù)據(jù)庫備份來恢復(fù)數(shù)據(jù)庫。利用這種方法,數(shù)據(jù)庫只能恢復(fù)到最近的備份狀態(tài),而從最近備份到故障發(fā)生期間所有數(shù)據(jù)庫的更新數(shù)據(jù)將會丟失,這意味著備份周期越長,丟失更新的數(shù)據(jù)也就越多。因此,這種恢復(fù)技術(shù)只適用于小型和不太重要的數(shù)據(jù)庫系統(tǒng)。
2.2 以備份和運行日志為基礎(chǔ)的恢復(fù)技術(shù)
系統(tǒng)運行日志用于記錄數(shù)據(jù)庫運行的情況,一般包括三個內(nèi)容:前像、后像和事物狀態(tài)。
所謂前像是指數(shù)據(jù)庫被一個事物更新時,所涉及的物理塊更新后的影像,它以物理塊為單位。前像在恢復(fù)中所起的作用是幫助數(shù)據(jù)庫恢復(fù)更新前的狀態(tài),即撤銷更新。后像恰好與前像相反,它是當(dāng)數(shù)據(jù)庫被某一事物更新時,所涉及的物理塊更新前的影像,其單位和前像一樣以物理塊為單位。后像的作用是幫助數(shù)據(jù)庫恢復(fù)到更新后在狀態(tài),相當(dāng)于重做一次更新。運行日志中的事物狀態(tài)記錄每個事物的狀態(tài),以便在數(shù)據(jù)庫恢復(fù)時作不同的處理。
2.3 基于多備份的恢復(fù)技術(shù)
多備份恢復(fù)技術(shù)的前提的每個備份必須具有獨立的失效模式,這樣可以利用這些備份互為備份,用于恢復(fù)。所謂獨立失效模式是指各個備份不至于因同一故障而一起失效。獲得獨立失效模式的一個重要要素是各備份的支持環(huán)境盡可能地獨立,其中包括不共用電源、磁盤、控制器以及CPU等。在部分可靠要求較高的系統(tǒng)中,采用磁盤鏡像技術(shù),即數(shù)據(jù)庫以雙備份的形式存放在兩個獨立的磁盤系統(tǒng)中,為了使失效模式獨立,兩個磁盤系統(tǒng)有各自的控制器和CPU,但彼此可以相互切換。在讀數(shù)據(jù)時,可以選讀其中任一磁盤;在寫數(shù)據(jù)時,兩個磁盤都可以寫入同樣的內(nèi)容。當(dāng)一個磁盤數(shù)據(jù)丟失時,可用另一個磁盤的數(shù)據(jù)來恢復(fù)。
這種恢復(fù)技術(shù)在分布式數(shù)據(jù)庫系統(tǒng)中用得較多,這完全是出于性能或其他考慮,在不同的結(jié)點上設(shè)有數(shù)據(jù)備份,而這些數(shù)據(jù)備份由于所處的結(jié)點不同,其失效模式也比較獨立。
3、恢復(fù)的方法
數(shù)據(jù)庫的恢復(fù)大致有以下幾種方法:
(1)以周期性地對整個數(shù)據(jù)庫進行轉(zhuǎn)儲,把它復(fù)制到備份介質(zhì)中,作為后備副本,以備恢復(fù)之用。
轉(zhuǎn)儲通常又可分為精通轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲。靜態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲期間不允許(或不存在)對數(shù)據(jù)庫進行任何存取、修改活動,而動態(tài)轉(zhuǎn)儲是指在存儲期間允許對數(shù)據(jù)庫進行存取或修改。
(2)對數(shù)據(jù)庫的每次修改,都記下修改前后的值,寫入“運行日志”中,與后備副本結(jié)合,可有效地恢復(fù)數(shù)據(jù)庫。
日志文件是用來記錄數(shù)據(jù)庫每一次更新活動的文件。在動態(tài)轉(zhuǎn)儲方式中必須建立日志文件,后備文件副本和日志文件綜合起來才能有效地恢復(fù)數(shù)據(jù)庫。在靜態(tài)轉(zhuǎn)儲方式中,也可以建立日志文件。當(dāng)數(shù)據(jù)庫毀壞后可重新裝入后備副本把數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲結(jié)束時刻的正確狀態(tài)。然后利用日志文件,把已完成的事務(wù)進行重新處理,對故障發(fā)生時尚未完成的事務(wù)進行撤銷處理。這樣不必重新運行那些已完成的事務(wù)程序就可以把數(shù)據(jù)庫恢復(fù)到故障前某一時刻的正確狀態(tài)。
4、失效的類型及恢復(fù)的對策
一個數(shù)據(jù)庫恢復(fù)方法的恢復(fù)能力總是有限的,一般往往只對某一類型的失效有效,在任何情況下都適用的恢復(fù)方法是沒有的。在前述的恢復(fù)方法中都需要備份,如果備份由于不可抗拒的因素損壞,那么,前述的恢復(fù)方法就無能為力。通常的恢復(fù)方法都是針對概率較高的失效,這些失效分為三類:事務(wù)失效、系統(tǒng)失效和介質(zhì)失效。
4.1 事務(wù)失效
事務(wù)失效發(fā)生在事務(wù)提交之前,事務(wù)一旦提交,即使要撤銷也不可能了。造成事務(wù)失效的原因主要有以下幾個方面:(1)事務(wù)無法執(zhí)行而自行中止;(2)操作失誤或改變主意而要求撤銷事務(wù);(3)由于系統(tǒng)調(diào)度上的原因而中止某些事務(wù)的執(zhí)行。
對于事務(wù)失效,可采取如下措施予以恢復(fù):(1)消息管理丟棄該事務(wù)的消息隊列;(2)如果需要可進行撤銷;(3)從事務(wù)表中刪除該事務(wù)的事務(wù)標識,釋放該事務(wù)占有的資源。
4.2 系統(tǒng)失效
這里所指的系統(tǒng)包括操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)。系統(tǒng)失效是指系統(tǒng)崩潰,必須重新啟動系統(tǒng),內(nèi)存中的數(shù)據(jù)可能丟失,而數(shù)據(jù)庫中的數(shù)據(jù)未遭到破壞。發(fā)生系統(tǒng)失效的原因有:(1)掉電;(2)除數(shù)據(jù)庫存儲介質(zhì)外的硬、軟件故障;(3)重新啟動操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng);(4)恢復(fù)數(shù)據(jù)庫至一致狀態(tài)時,對未提交的事務(wù)進行了Undo操作,對已提交的事務(wù)進行了Redo的操作。
4.3 介質(zhì)失效
介質(zhì)失效是指磁盤發(fā)生故障,數(shù)據(jù)受損,如劃盤、磁頭破損等?,F(xiàn)代的DBMS對介質(zhì)失效一般都提供恢復(fù)數(shù)據(jù)庫至最近狀態(tài)的措施,具體過程如下:(1)恢復(fù)系統(tǒng),必要時更換磁盤;(2)如果系統(tǒng)崩潰,則重新啟動系統(tǒng);(3)加載最近的備份;(4)用運行日志中的后像重做,去最近備份以后提交的所有事務(wù)。
從介質(zhì)失效中恢復(fù)數(shù)據(jù)庫的代價是最高的,而且要是運行日志提供所有事務(wù)的后像,工作量很大。但是為了保證數(shù)據(jù)庫的安全,這些代價又是必須要付出的。
參考文獻
[1]婁燕飛,楊樹強.《一種基于組通信的復(fù)制數(shù)據(jù)庫在線恢復(fù)策略研究》.計算機研究與發(fā)展,2007.
[2]林烈青.《基于事務(wù)日志的數(shù)據(jù)庫恢復(fù)機制研究》.現(xiàn)代計算機(專業(yè)版),2009.