陳益全,蔡澤利
瓊臺師范高等專科學(xué)校信息技術(shù)系,海南海口 571100
當(dāng)我們使用一個數(shù)據(jù)庫時,總希望數(shù)據(jù)庫的內(nèi)容是可靠的、正確的。但在對數(shù)據(jù)庫應(yīng)用的過程中,由于人為誤操作、人為惡意破壞、系統(tǒng)的不穩(wěn)定、存儲介質(zhì)的損壞等等原因而影響數(shù)據(jù)庫系統(tǒng)的操作,影響數(shù)據(jù)庫中數(shù)據(jù)的正確性,甚至破壞數(shù)據(jù)庫使數(shù)據(jù)庫中部分或全部數(shù)據(jù)丟失,這將帶來嚴(yán)重后果。因此,當(dāng)發(fā)生上述情況后,人們希望能重新建立一個完整的數(shù)據(jù)庫,該處理過程稱為數(shù)據(jù)庫恢復(fù)。
事務(wù)(Transaction)是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。
事務(wù)有4個特性。原子性:事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么都做,要么都不做;一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài);隔離性:一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)事務(wù)是隔離的,同時并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾;持續(xù)性:一個一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的,接下來的其他操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響。
事務(wù)是數(shù)據(jù)庫恢復(fù)和并發(fā)控制的基本單位。
事務(wù)故障是指某個事務(wù)在運行過程中由于種種原因未運行至正常終止,而此時數(shù)據(jù)庫可能處于不一致狀態(tài)。發(fā)生事務(wù)故障時,該事務(wù)可能已把對數(shù)據(jù)庫的部分修改寫回磁盤。
恢復(fù)方法:撤消事務(wù)(UNDO)。強(qiáng)行回滾(ROLLBACK)該事務(wù);清除該事務(wù)對數(shù)據(jù)庫的所有修改,使得這個事務(wù)象根本沒有啟動過一樣。
系統(tǒng)故障是指造成系統(tǒng)停止運轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動。系統(tǒng)故障通常使所有正在運行的事務(wù)都非正常終止、內(nèi)存中數(shù)據(jù)庫緩沖區(qū)的信息全部丟失。
恢復(fù)策略:1)清除尚未完成的事務(wù)對數(shù)據(jù)庫的所有修改。系統(tǒng)重新啟動時,恢復(fù)程序要強(qiáng)行撤消(UNDO)所有未完成事務(wù);2)將緩沖區(qū)中已完成事務(wù)提交的結(jié)果寫入數(shù)據(jù)庫。系統(tǒng)重新啟動時,恢復(fù)程序需要重做(REDO)所有已提交的事務(wù)。
介質(zhì)故障稱為硬故障。硬件故障使存儲在外存中的數(shù)據(jù)部分丟失或全部丟失,比如磁盤損壞、磁頭碰撞、瞬時強(qiáng)磁場干擾等。介質(zhì)故障比前兩類故障的可能性小得多,但破壞性大得多。
恢復(fù)策略:裝入數(shù)據(jù)庫發(fā)生介質(zhì)故障前某個時刻的數(shù)據(jù)副本;重做自此時始的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫。
數(shù)據(jù)庫恢復(fù)的基本原理是建立冗余數(shù)據(jù)。
數(shù)據(jù)轉(zhuǎn)儲是指將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。當(dāng)數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入,但重裝后備副本只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲時的狀態(tài),要想恢復(fù)到故障發(fā)生時的狀態(tài),必須重新運行自轉(zhuǎn)儲以后的所有更新事務(wù)。
日志文件(log)是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。
日志文件內(nèi)容包括:各個事務(wù)的開始標(biāo)記、各個事務(wù)的結(jié)束標(biāo)記、各個事務(wù)的所有更新操作。每個事務(wù)開始的標(biāo)記、每個事務(wù)的結(jié)束標(biāo)記和每個更新操作均作為日志文件中的一個記錄,每條日志記錄的內(nèi)容
又包括事務(wù)標(biāo)識、操作類型(插入、刪除或修改)、操作對象(記錄ID、Block NO.)、更新前數(shù)據(jù)的舊值(對插入操作而言,此項為空值)、更新后數(shù)據(jù)的新值(對刪除操作而言, 此項為空值)。
日志文件的可以用來進(jìn)行事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù),并協(xié)助后備副本進(jìn)行介質(zhì)故障的恢復(fù)。
這種技術(shù)在日志文件中增加一類新的記錄——檢查點(checkpoint)記錄,增加一個重新開始文件,并讓恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護(hù)日志。
使用檢查點方法可以改善恢復(fù)效率。當(dāng)事務(wù)T在一個檢查點之前提交,T對數(shù)據(jù)庫所做的修改一定都已寫入數(shù)據(jù)庫,寫入時間是在這個檢查點建立之前或在這個檢查點建立之時。這樣,在進(jìn)行恢復(fù)處理時,沒有必要對事務(wù)T執(zhí)行REDO操作。
數(shù)據(jù)庫管理系統(tǒng)自動把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上,并自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。出現(xiàn)介質(zhì)故障時,數(shù)據(jù)庫管理系統(tǒng)自動利用鏡像磁盤數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的恢復(fù),不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫副本。
故障是不可避免的。我們一定要高度重視系統(tǒng)數(shù)據(jù)安全工作,防止在出現(xiàn)意外情況時能夠最大限度地減少損失。
[1]康懿.基于SQLServer的數(shù)據(jù)庫恢復(fù)技術(shù)[J].科技信息,2009(29).
[2]龔雄濤.SQLServer數(shù)據(jù)庫恢復(fù)技術(shù)研究[J].科技信息,2009(27).
[3]周如意.基于檢查點的數(shù)據(jù)庫恢復(fù)技術(shù)[J].沙洲職業(yè)工學(xué)院學(xué)報,2006(2).