前面總結了ORACLE的邏輯備份,本文來總結以下ORACLE的物理備份。資料庫的備份一般分為冷備份和熱備份,其中冷備份是指將資料庫徹底關閉後進行的一致性備份,由於需要關停資料庫所以在實際應用中很少用到冷備份。而熱備份是指在資料庫執行的同時對資料庫進行備份,本文主要總結的是ORACLE的熱備份。ORACLE的熱備份分為使用者管理的熱備份(user-managed backup and recovery)和ORACLE管理的熱備份(Recovery Manager-RMAN)。
使用者管理的熱備份是指先將表空間置於熱備份模式下,然後透過作業系統工具對檔案進行復製備份,備份完成後再結束表空間的備份模式。Oracle管理的熱備份是指透過RMAN對資料庫進行聯機熱備份,RMAN備份不需要將表空間置於熱備模式,減少了對資料庫的影響,RMAN備份功能強大但是相對複雜,也是生產中用得最多的備份方式,本文講的ORACLE物理備份主要針對的是RMAN備份。
一、NOCATALOG方式進行資料庫備份
使用RMAN備份,需要將備份資訊存起來,這些資訊將用來恢復,預設情況下RMAN會將備份資訊儲存在控制檔案中;ORACLE也支援把RMAN的備份資訊儲存在目錄資料庫中,叫做calalog database。首先,來看下不使用catalog方式進行資料庫備份,這也是最基礎的rman備份方式。使用nocatalog方式進行資料庫備份,一般需要開啟控制檔案自動備份功能,開啟該功能後ORACLE會在資料庫發生重大變化之後(如增減表空間)自動進行控制檔案和spfile檔案的備份。進入rman管理器後執行configure controlfile autobackup on命令即可設定控制檔案自動備份。
RMAN備份檔案有兩種儲存方式:映象複製和備份集。備份集只備份使用過的資料塊而映象複製是複製整個資料檔案,一般預設的都是使用備份集。最簡單的全庫備份透過backup database命令即可完成。執行全庫備份,加上tag即對備份打一個標籤,可以看到rman備份完成,資料庫的備份集預設存在了資料庫的閃回區即快速恢復區內。因為資料庫在完成備份後會寫控制檔案,所以在備份完成後觸發了控制檔案和引數檔案的自動備份。
二、歸檔日誌的備份
除了備份資料檔案,為了保證資料庫能恢復到指定的任意時間點,歸檔日誌的備份在生產中也是必不可少的。我們可以直接執行backup archivelog或者在備份資料檔案和控制檔案的同時指定backup ... plus archivelog操作來一起備份歸檔日誌。歸檔日誌的備份支援備份全部也支援備份某個時間段的。
backup archivelog all; backup archivelog from time 'sysdate-30' until time 'sysdate-7';
RMAN在備份歸檔前會先給資料庫發出一個alter system archive log current命令歸檔所有的非當前redolog,然後再執行歸檔日誌的備份。上面歸檔日誌的備份針對的是全部歸檔日誌,實際使用中,我們不可能每次都備份全部歸檔日誌,這樣將產生歸檔日誌重複備份的情況。在RMAN的引數設定中,有一個備份最佳化選項,透過設定configure backup optimization on啟用備份最佳化,這樣可以避免歸檔日誌的重複備份。此外,也可以在備份完歸檔日誌後立即清理已備份的歸檔日誌,這樣也是更方便更節約空間的辦法。在ORACLE中,刪除歸檔日誌的操作同樣透過rman來完成,backup命令後面加上delete input即可以刪除剛剛已備份的歸檔日誌。還可以制定定時任務,刪除指定時間的歸檔日誌,noprompt參數列示不提示刪除並且只會刪除已備份的歸檔日誌。
backup archivelog all delete input; delete noprompt archivelog all before 'sysdate-6';
任何時刻,我都應透過rman去維護備份的相關操作,這樣可以保證rman資訊一致,否則會出現控制檔案中的備份記錄和實際備份不一致的現象。
三、RMAN的備份保留策略
使用rman對備份集進行管理一般需要設定備份的保留策略,備份保留策略可以基於冗餘或恢復視窗。當備份不需要時會被標記為廢棄(obsolete),但廢棄的備份不會被刪除,使用report obsolete命令可以檢視已廢棄的備份,透過delete obsolete命令可以刪除廢棄的備份。
configure retention policy to redundancy 3; configure retention policy to recovery window of 7 days; report obsolete; delete noprompt obsolete;
四、RMAN恢復
在RMAN恢復中,主要依靠兩個命令完成restore和recovery,restore一般稱為轉儲指從備份集中恢復對應的檔案,recovery稱為恢復指利用歸檔日誌和redo進行完全或基於時間點的恢復。當ORACLE的資料檔案損壞或丟失後,如果資料庫的引數檔案和控制檔案完好,那麼就可以透過rman的備份集恢復資料檔案,並應用歸檔日誌,實現資料庫的完全或不完全恢復。恢復資料庫時需要把資料庫啟動到mount狀態。
startup mount; list backup summary; restore database; recovery database; alter database open;
在進行資料庫的不完全恢復時,一般可以指定到恢復的時間點,並在完成恢復後需要使用resetlog選項啟動資料庫重置redolog。在restore轉儲時加上tag可以指定備份集這樣就可以指定恢復哪一天的備份。
recovery database until time '2024-07-10 16:00:00'; alter database open resetlogs; restore database from tag='';#指定備份集恢復