【IT168 服務(wù)器學(xué)院】數據庫備份、恢復的基本規則
1、多工聯(lián)機重作日志文件 每個(gè)數據庫實(shí)例都有其自己的聯(lián)機重作日志組,在操作數據庫時(shí),Oracle首先將數據庫的全部改變保存在重作日志緩沖區中,隨后日志記錄器進(jìn)程(LGWR)將數據從系統共用區SGA(System Global Area)的重作日志緩沖區寫(xiě)入聯(lián)機重作日志文件,在磁盤(pán)崩潰或實(shí)例失敗時(shí),可以通過(guò)與之相關(guān)的聯(lián)機重作日志來(lái)保護數據庫,將損失降至最低,但Oracle在默認的方式下只創(chuàng )建一組重作日志文件(每一組只有一個(gè)項目文件),為了減少丟失這些重要的重作日志文件的危險,因此需要對其進(jìn)行鏡像拷貝。
在Oracle級多工聯(lián)機重作日志文件,即增加多個(gè)文件到每個(gè)組以便鏡像數據,這樣I/O故障或寫(xiě)丟失只損壞一個(gè)拷貝,從而保證了LGWR后臺進(jìn)程至少能夠向一個(gè)成員寫(xiě)入信息,數據庫仍然可以繼續運行。同時(shí)應保證日志組的成員不應駐存在同一物理設備上,因為這將削弱多重日志文件的作用。
2、鏡像拷貝控制文件 控制文件描述通用的數據庫結構,它
存儲了大量數據庫狀態(tài)信息,包括物理結構和聯(lián)機重作日志文件在當時(shí)的名稱(chēng)、位置、狀態(tài)??刂莆募跀祿靻?dòng)時(shí)被Oracle實(shí)例讀取,保持打開(kāi)并隨著(zhù)操作而文件內容更新,直到實(shí)例關(guān)閉為止。在它打開(kāi)的過(guò)程中能夠同步需要恢復的信息,包括檢查點(diǎn)信息,因此若損壞或丟失了控制文件,Oracle將不能繼續工作,因此應在系統中保持控制文件的多個(gè)拷貝,且這些拷貝應置于安裝于不同磁盤(pán)控制器下的不同磁盤(pán)設備中。
由于Oracle沒(méi)有提供對控制文件多工的完整支持,因此應在對控制文件使用
操作系統或硬件鏡像,即在修改初始化文件的control_files參數后重新啟動(dòng)數據庫前,應將控制文件復制到定義的新位置,否則數據庫啟動(dòng)時(shí)將會(huì )出錯。
3、激活歸檔進(jìn)程 當數據庫運行于NOARCHIVELOG模式下時(shí),只能在完全關(guān)閉數據庫后進(jìn)行數據庫的一致備份,并且同時(shí)禁用了聯(lián)機重作日志的存檔,這樣在Oracle實(shí)例失敗時(shí)只能將數據庫修復到最近的完整數據庫備份時(shí)的那一點(diǎn)上,不能在失效點(diǎn)處對實(shí)例進(jìn)行恢復。而在A(yíng)RCHIVELOG模式下,數據庫不僅可以進(jìn)行一致備份,還可以在數據庫打開(kāi)的情況下進(jìn)行聯(lián)機備份。通過(guò)數據庫的備份和聯(lián)機與存檔的重作日志文件,用戶(hù)可以恢復所有已提交的事務(wù),并允許將數據庫恢復到指定的時(shí)間、SCN或日志系列號處,增大了恢復的靈活性,減少了故障時(shí)的數據丟失。因此數據庫應運行于A(yíng)RCHIVELOG模式。
在A(yíng)RCHIVELOG模式下為了防止文件損壞和介質(zhì)故障,應把日志歸檔到不同的磁盤(pán)上,這可以通過(guò)在初始化文件中為歸檔重作日志指定多個(gè)目標實(shí)現。
4、數據庫實(shí)施較大改變時(shí)備份 因為控制文件中保存了數據庫的模式結構信息,因此在對數據庫進(jìn)行較大改變(包括改變表結構,增加、刪除日志文件或數據文件等)時(shí)應立即備份控制文件及相應的數據文件。
5、使用RESETLOGS選項打開(kāi)數據庫后進(jìn)行備份 在以RESETLOGS選項打開(kāi)數據庫后,應對整個(gè)數據庫進(jìn)行脫機或聯(lián)機的備份,否則將不能恢復重置日志后的改變。
當以RESETLOGS選項打開(kāi)數據庫時(shí),Oracle將拋棄恢復中沒(méi)有應用的重復信息,并確保永遠不再運用,同時(shí)還將初始化控制文件中關(guān)于聯(lián)機日志和重作線(xiàn)程的信息、清除聯(lián)機日志中的內容。因此,RESETLOGS前的歸檔日志的序列號將與RESETLOGS后的Oracle控制文件的要求值不相符(備份文件中的檢查點(diǎn)比控制文件中的檢查點(diǎn)舊),即在恢復中不能應用以前的歸檔日志文件,從而導致RESETLOGS操作之前的備份在新形體中無(wú)用。
6、避免備份聯(lián)機重作日志文件 由于文中提出了多工聯(lián)機重作日志文件且數據庫運行于A(yíng)RCHIVELOG模式,ARCH進(jìn)程能夠將聯(lián)機重作日志歸檔,因此不必對其進(jìn)行備份。若用備份的聯(lián)機重作日志文件重建它,可能會(huì )引起日志文件序列號的混亂,從而破壞數據庫,得到適得其反的結果。
7、重置聯(lián)機日志 在進(jìn)行了不完全恢復或用備份控制文件進(jìn)行恢復后,應重置聯(lián)機日志。
為了確保數據庫的一致性,必須保證在恢復后所有數據文件都恢復到同一個(gè)時(shí)間點(diǎn),但不完全恢復可能導致數據文件中具有一個(gè)與其它文件不同的檢查點(diǎn),導致數據庫的一致性受到破壞。同樣,備份的控制文件中保存的SCN和計數器與當前日志文件中的值可能不同,從而也破壞了數據庫的一致性,因此應在進(jìn)行完上述兩項操作后重置聯(lián)機日志。
8、數據庫的邏輯備份 以上所述備份都為物理備份,是實(shí)際物理數據庫文件從一處拷貝到另一處的備份,除此之外還可使用Oracle提供的導出實(shí)用程序進(jìn)行數據庫的邏輯備份。Oracle同時(shí)還提供了相應的導入實(shí)用程序重建邏輯備份中保存的信息。
邏輯備份只拷貝數據庫中的數據,而不記錄數據位置的備份過(guò)程。它利用SQL語(yǔ)句,從數據庫中導出數據到一個(gè)存放在合適位置的外部文件中,同時(shí)并可檢測到數據塊的損壞,因此可用其作為物理備份的補充。
備份策略
考慮到如今大部分信息系統每周的業(yè)務(wù)是24×7操作,因此采用聯(lián)機備份,否則可每隔一定時(shí)間進(jìn)行一次脫機備份。
應用上述規則,可得出下述典型的備份策略:
?、夔R像拷貝重作日志文件;
?、阽R像拷貝控制文件;
?、奂せ顨w檔進(jìn)程,即以ARCHIVELOG模式操作數據庫;
?、苊刻爝M(jìn)行數據庫的部分聯(lián)機備份(每天進(jìn)行數據庫的完全熱備份將無(wú)畏地增加數據庫的負擔且沒(méi)有必要,同時(shí)也增加了數據庫恢復時(shí)的靈活性);
?、菝扛粢恢芑驇字苓M(jìn)行一次數據庫的邏輯備份。
實(shí)際項目應用
當數據庫中的文件達到一定數量后,DBA可能記不住該備份的文件的名或位置,因此,若能使備份過(guò)程自動(dòng)化可有效地減輕DBA的負擔,同時(shí)不會(huì )遺漏應備份的文件,應用自動(dòng)批處理文件及腳本文件可實(shí)現備份、恢復的自動(dòng)化。下面簡(jiǎn)介了在實(shí)際項目開(kāi)發(fā)中應用本文所提出的自動(dòng)備份、恢復策略,通過(guò)實(shí)際應用,證明了該策略的正確性和可行性。