帶你快速了解Oracle數(shù)據(jù)庫提供的恢復(fù)機(jī)制
Oracle向數(shù)據(jù)庫管理員(DBA)提供了多種轉(zhuǎn)儲后備副本的方法,如文件拷貝、利用Oracle的Export實(shí)用程序,用SQL命令spool以及自己編程實(shí)現(xiàn)等。相應(yīng)地,Oracle也提供了多種重裝后備副本的方法,如文件拷貝、利用Oracle的Import實(shí)用程序、利用SQL*Loader以及自己編程實(shí)現(xiàn)等。
在Oracle的早期版本中,日志文件以數(shù)據(jù)塊為單位,也就是說,Oracle的恢復(fù)操作不是基于操作,而是基于數(shù)據(jù)塊的。Oracle將更新前的舊值與更新后的新值分別放在兩個不同的日志文件中。記錄數(shù)據(jù)庫更新前的舊值的日志文件稱為數(shù)據(jù)庫前像文件(Befor Image,簡稱BI文件),記錄數(shù)據(jù)庫更新后的新值的日志文件稱為數(shù)據(jù)庫的后像文件(After Image,簡稱AI文件)。由于BI文件關(guān)系到能否將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài),因此BI文件是必須的。而AI文件的作用是減少必須重新運(yùn)行的事務(wù)程序,盡可能多的恢復(fù)數(shù)據(jù)庫,所以在Oracle中AI文件是任選的。日志文件是十分占據(jù)空間的,為節(jié)省存儲空間和操作時間,DBA可以不配置AI文件。沒有AI文件,恢復(fù)機(jī)制進(jìn)行故障恢復(fù)時只能執(zhí)行UNDO處理,不能執(zhí)行REDO處理。
Oracle為了能夠在出現(xiàn)故障時更有效地恢復(fù)數(shù)據(jù),也為了解決讀“臟”數(shù)據(jù)問題,提供了REDO日志文件和回滾段(Rollback Segment).REDO日志文件中記錄了被更新數(shù)據(jù)的前像和后像,設(shè)在數(shù)據(jù)庫緩沖區(qū)中的回滾段記錄更新數(shù)據(jù)的前像。在利用日志文件進(jìn)行故障恢復(fù)時,為減少掃描日志文件的遍數(shù),Oracle首先掃描REDO日志文件,重做所有操作,包括未正常提交的事務(wù)的操作,然后再根據(jù)回滾段中的數(shù)據(jù),撤銷未正常提交的事務(wù)的操作。
