【摘要】集中式數(shù)據(jù)庫系統(tǒng)由一個處理器、與它相關(guān)聯(lián)的數(shù)據(jù)存儲設(shè)備以及其他外圍設(shè)備組成,它被物理地定義到單個位置。系統(tǒng)提供數(shù)據(jù)處理能力,用戶可以在同樣的站點上操作,也可以在地理位置隔開的其他站點上通過遠(yuǎn)程終端來操作,系統(tǒng)及其數(shù)據(jù)管理被某個或中心站點集中控制,本文探討了集中式數(shù)據(jù)庫的事務(wù)恢復(fù)機(jī)制。
【關(guān)鍵詞】集中式數(shù)據(jù)庫;事務(wù)恢復(fù);機(jī)制
一、事務(wù)恢復(fù)
事務(wù)是數(shù)據(jù)庫管理系統(tǒng)(DBMS)的執(zhí)行單位,事務(wù)應(yīng)滿足ACID(原子性,一致性,隔離性,持久性)準(zhǔn)則。保證事務(wù)在故障時滿足ACID準(zhǔn)則的技術(shù)稱為恢復(fù)。要恢復(fù)丟失的數(shù)據(jù),數(shù)據(jù)必須有后備的復(fù)本。對于恢復(fù),數(shù)據(jù)冗余是必需的?;謴?fù)技術(shù)大致分為下列三種:一是單純以后備復(fù)本為基礎(chǔ)的恢復(fù)技術(shù)。即周期性地把磁盤上的數(shù)據(jù)庫轉(zhuǎn)儲(dump)到磁帶上,磁帶上的數(shù)據(jù)庫復(fù)本稱為后備復(fù)本。二是以后備復(fù)本和運(yùn)行記錄(log或journal)為基礎(chǔ)的恢復(fù)技術(shù)。運(yùn)行記錄是供恢復(fù)用的數(shù)據(jù)庫運(yùn)行情況的記錄。三是基于多復(fù)本的恢復(fù)技術(shù)。如果系統(tǒng)中有多個數(shù)據(jù)庫復(fù)本,而且這些復(fù)本具有獨(dú)立的失效模式(指各個復(fù)本不致因同一故障而一起失效),則可利用這些復(fù)本互為備份,用于恢復(fù)。近來由于硬件價格下降,在某些可靠性要求高的系統(tǒng)中,采用鏡像磁盤技術(shù),即數(shù)據(jù)庫以雙復(fù)本的形式存于兩個獨(dú)立的磁盤系統(tǒng)中。由于第二種恢復(fù)技術(shù)在數(shù)據(jù)庫系統(tǒng)中用得最多,大部分商品化的DBMS都支持這種恢復(fù)技術(shù),以下我們對這種恢復(fù)技術(shù)進(jìn)行詳細(xì)介紹。
二、基于運(yùn)行記錄的恢復(fù)技術(shù)
運(yùn)行記錄是供恢復(fù)用的數(shù)據(jù)庫運(yùn)行情況的記錄。一般包括下列三個內(nèi)容:一是前像(before image,BI)。當(dāng)數(shù)據(jù)庫被一個事務(wù)更新時,所涉及的物理塊更新前的映像(image)稱為該事務(wù)的前像。前像以物理塊為單位。有了前像,如果需要,可以使數(shù)據(jù)庫恢復(fù)到更新前的狀態(tài),即撤消更新,這種操作在恢復(fù)技術(shù)中稱為撤消(undo)。二是后像(after image,AI)。當(dāng)數(shù)據(jù)庫被一個事務(wù)更新時,所涉及的物理塊更新后的映像(image)稱為該事務(wù)的后像。后像以物理塊為單位。有了后像,即使更新的數(shù)據(jù)丟失了,仍可以使數(shù)據(jù)庫恢復(fù)到更新后的狀態(tài),相當(dāng)于重做一次更新,這種操作在恢復(fù)技術(shù)中稱為重做(redo)。三是事務(wù)狀態(tài)。記錄每個事務(wù)的狀態(tài),以便在恢復(fù)時做不同的處理。每個事務(wù)從交付DBMS到結(jié)束為止,每個事務(wù)有兩種可能的結(jié)局:一是經(jīng)提交(commit)而結(jié)束,這標(biāo)志著事務(wù)已成功地執(zhí)行(這相當(dāng)于all),只有在事務(wù)提交后,事務(wù)對數(shù)據(jù)庫的更新才能被其它事務(wù)訪問;另一結(jié)局是由于事務(wù)本身或外部的原因,事務(wù)失敗,要消除事務(wù)對數(shù)據(jù)庫的影響(這相當(dāng)于nothing)。對事務(wù)的這種處理稱為卷回(rollback或abort)。對恢復(fù)來說,不必記每個狀態(tài),但是至少要區(qū)分出一個事務(wù)是提交的,還是未提交的。當(dāng)數(shù)據(jù)庫失效時,可取出最近后備復(fù)本,然后根據(jù)運(yùn)行記錄,對未提交的事務(wù)用前像卷回,這叫向后恢復(fù)(backward recovery);對已提交的事務(wù),必要時用后像重做,這叫向前恢復(fù)(forward recovery)。用這種恢復(fù)技術(shù),必須有運(yùn)行記錄。
三、運(yùn)行記錄的結(jié)構(gòu)
下面列出運(yùn)行記錄中的一些基本內(nèi)容,實際DBMS的運(yùn)行記錄還可能包括若干其它細(xì)節(jié),具體結(jié)構(gòu)也不一定相同:其一,活動事務(wù)表。活動事務(wù)表(active transaction list,簡稱為ATL)記錄所有正在執(zhí)行,尚未提交的事務(wù)的標(biāo)識符(transaction identifier,簡稱TID)。其二,提交事務(wù)表。提交事務(wù)表(committed transaction list,簡稱CTL)記錄所有已提交的事務(wù)的標(biāo)識符。如果先從活動事務(wù)表中刪除TID,再將TID加入提交事務(wù)表,則可能冒如下的危險:即TID剛從活動事務(wù)表中刪除后,該事務(wù)的狀態(tài)在系統(tǒng)中將無任何記錄。其三,前像文件。前像文件可以看成一個堆文件,每個物理塊有個塊標(biāo)識符(block identifier,簡稱BID)。設(shè)BID由TID、關(guān)系名和邏輯塊號所組成,其中TID表示執(zhí)行更新操作的事務(wù),關(guān)系名表示被更新的關(guān)系,邏輯塊號表示該塊是關(guān)系中哪塊的前像。邏輯塊號在關(guān)系中是唯一的,即使一個塊被刪除了,它的邏輯塊號也不允許重新使用。必須注意:undo操作是滿足冪等(idempotent)性的,即undo(undo(undo…(x)))=undo(x)。因此,即使數(shù)據(jù)庫中的某塊還沒有來得及更新,在恢復(fù)時對它做一次undo操作也無妨,無非在這一塊上寫入同樣的內(nèi)容而已。其四,后像文件。結(jié)構(gòu)與前像文件相仿,不過其中記的是后像。在恢復(fù)時,可按提交事務(wù)表中的事務(wù)次序,按邏輯塊號寫入其后像。這相當(dāng)于按提交的次序,重做各個事務(wù)。Redo操作也滿足冪等性。
參 考 文 獻(xiàn)
[1]簡云松.?dāng)?shù)據(jù)庫恢復(fù)技術(shù)探討[J].軟件導(dǎo)刊.2008(8)
[2]林烈青.基于事務(wù)日志的數(shù)據(jù)庫恢復(fù)機(jī)制研究[J].現(xiàn)代計算機(jī)(專業(yè)版).2009(8)
[3]陳菲.?dāng)?shù)據(jù)庫復(fù)制系統(tǒng)的設(shè)計與實現(xiàn)[J].科協(xié)論壇(下半月).2010(1)
[4]鮑曉娟.淺談數(shù)據(jù)庫恢復(fù)技術(shù)[J].赤峰學(xué)院學(xué)報(自然科學(xué)版).2011(4)