隨著檔案信息化步伐的加快,檔案信息數據庫逐步建立和完善,但是,目前,檔案數據庫面臨著許多不安全因素,包括不可抗因素(地震、火災等)和人為因素(計算機網絡犯罪、病毒、軟件錯誤、系統崩潰、硬件過時等)。有的檔案館由于備份措施做得好,出現問題時可順利恢復數據庫的內容,而有些卻在問題面前無計可施,眼看著多年來辛苦著錄的檔案數據瞬間丟失,造成人力、物力資源的極大浪費。如何快速地恢復數據庫,保證檔案信息系統的正常運轉,成為急需研究解決的課題之一。
恢復是指當磁盤損壞或者數據庫崩潰時,通過轉儲或卸載的備份重新安裝數據庫的過程。
1 數據庫的恢復大致有如下方法:
1.1 周期性地(如3天一次)對整個數據庫進行轉儲,把它復制到備份介質中,作為后備副本,以備恢復之用。轉儲通常可分為靜態轉儲和動態轉儲。靜態轉儲是指轉儲期間不允許對數據庫進行任何存取、修改活動。而動態轉儲是指在轉儲期間允許對數據庫進行存取或修改。
1.2 對數據庫的每次修改,都記下修改前后的值,寫入“運行日志”數集中。它與后備副本結合,可有效地恢復數據庫。
日志文件是用來記錄對數據庫每一次更新活動的文件。在動態轉儲方式中必須建立日志文件,后備副本和日志文件綜合起來才能有效地恢復數據庫。在靜態轉儲方式中,也可以建立日志文件。當數據庫毀壞后,可重新裝入后備副本,把數據庫恢復到轉儲結束時刻的正確狀態。然后,利用日志文件,把已完成的事務進行重新處理,對故障發生時尚未完成的事務進行撤銷處理。這樣,不必重新運行那些已完成的事務程序,就可把數據庫恢復到故障前某一時刻的正確狀態。
2 用日志文件恢復事務
下面,介紹一下如何登記日志文件以及發生故障后,如何利用日志文件恢復事務。
2.1 登記日志文件(logging)。事務運行過程中,系統把事務開始、事務結束(包括COMMIT和ROLLBACK)以及對數據庫的插入、刪除、修改等每一個操作作為一個登記記錄(LOG記錄)存放到日志文件中。每個記錄包括的主要內容有:執行操作的事務標識、操作類型,更新前數據的舊值(對插入操作而言,此項為空值),更新后的新值(對刪除操作,次項為空值)。
登記的次序嚴格按并行事務執行的時間次序。同時,遵循“先寫日志文件”的規則。我們知道,寫一個修改到數據庫和寫一個表示這個修改的“log”記錄到日志文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個操作只完成了一個。因此,為了安全,應該先寫日志文件,即首先把“log”記錄寫到日志文件上,然后,再寫數據庫的修改。這就是 “先寫日志文件”的原則。
事務恢復。利用日志文件恢復事務的過程分兩步:第一步,從頭開始掃描日志文件,找出哪些事務故障發生時已經結束,哪些事務尚未結束。第二步,對尚未結束的事務進行撤銷處理,對已經結束的事務進行重做。進行撤銷處理的方法是:反向掃描日志文件,對每個重做事務的更新操作執行反操作。即對已經插入的新記錄執行刪除操作,對已刪除的記錄重新插入,對修改的數據恢復舊值(即用舊值代替新值)。
進行重做處理的方法是:正向掃描日志文件,重新執行登記操作。
對于非常結束的事務應該進行撤銷處理,以消除可能對數據庫造成的不一致性。對于正常結束的事務進行重做處理也是需要的,這是因為,事務已經發出COMMIT操作請求,但更新操作有可能只寫到了數據庫緩沖區(在內存),還沒來得及物理地寫到數據庫(外存)便發生了系統故障。數據庫緩沖區的內容被破壞,這種情況,仍可能造成數據庫的不一致性。由于日志文件上更新活動已完整地登記下來,因此,可能重做這些操作而不必重新運行事務程序。
3 利用轉儲和日志文件可以有效地恢復數據庫
當數據庫本身被破壞時(如硬盤故障和病毒破壞)可重裝轉儲的后備副本,然后,運行日志文件執行事務恢復,這樣,就可以重建數據庫。
當數據庫本身沒有被破壞,但內容已經不可靠時(如發生事務故障和系統故障),可利用日志文件恢復事務,從而使數據庫回到某一正確狀態。這時,不必重裝后備副本。