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