關(guān)于RMAN備份和恢復(fù)的10個(gè)實(shí)踐
本文檔假設(shè)您正在執(zhí)行基本的備份和恢復(fù)
- 在 Archivelog 模式下運(yùn)行
- 多路鏡像控制文件
- 定期執(zhí)行備份
- 周期性執(zhí)行全庫(kù)恢復(fù)測(cè)試
1.開(kāi)啟塊檢查
這樣做的目標(biāo)是盡早發(fā)現(xiàn)數(shù)據(jù)庫(kù)中的壞塊。這只會(huì)占用很少的性能開(kāi)銷(xiāo),但卻可以讓 Oracle 盡早檢測(cè)出由底層磁盤(pán)、存儲(chǔ)系統(tǒng)、或 I/O 系統(tǒng)問(wèn)題導(dǎo)致的壞塊。
- SQL> alter system set db_block_checking = true scope=both;
2.使用 RMAN 增量備份時(shí)開(kāi)啟塊更改跟蹤(Block Change Tracking)功能
更改跟蹤文件包含了可以使 RMAN 增量備份進(jìn)程避免讀取自上次備份以來(lái)未修改的數(shù)據(jù)所需要的信息。如果不使用塊更改跟蹤功能,則必須讀取所有塊來(lái)確定自上次備份以來(lái)是否對(duì)其進(jìn)行了修改。
- SQL> alter database enable block change tracking using file '/u01/oradata/ora1/change_tracking.f';
3.鏡像 重做日志組和成員,并將歸檔日志存放在多個(gè)目標(biāo)位置
通過(guò)在多個(gè)位置存放多個(gè)副本,當(dāng)某個(gè)歸檔日志損壞或丟失時(shí),其他日志仍然存在并可以使用。
如果某個(gè)在線日志被刪除或損壞,在需要時(shí)還可以使用其他成員進(jìn)行恢復(fù)。
- SQL> alter system set log_archive_dest_2='location=/new/location/archive2' scope=both;
- SQL> alter database add logfile member '/new/location/redo21.log' to group 1;
4.使用 RMAN 備份數(shù)據(jù)庫(kù)時(shí)使用 CHECK LOGICAL 選項(xiàng)
這可以使 RMAN 對(duì)數(shù)據(jù)塊除了進(jìn)行常規(guī)的校驗(yàn)和驗(yàn)證之外,還檢查塊內(nèi)的邏輯損壞。這是確保您獲得完好備份的最佳方法。
RMAN> backup check logical database plus archivelog delete input;
5.測(cè)試備份
這將執(zhí)行除實(shí)際回復(fù)(restore)數(shù)據(jù)庫(kù)之外的所有操作。要確定在出現(xiàn)問(wèn)題(此時(shí)備份非常重要)之前備份是否完好以及可用,這是最好的辦法。
如果使用 RMAN,可以使用以下命令執(zhí)行此操作:
- RMAN> restore validate database;
6.使用 RMAN 時(shí),將每個(gè)數(shù)據(jù)文件存放在單獨(dú)的備份片(backup piece)中
執(zhí)行部分恢復(fù)時(shí),RMAN 必須讀取完整的備份片以獲取需要的數(shù)據(jù)文件/歸檔日志。因此,備份片越小,恢復(fù)完成的速度越快。這尤其適用于對(duì)大型數(shù)據(jù)庫(kù)進(jìn)行的磁帶備份或僅對(duì)單個(gè)/少數(shù)幾個(gè)文件進(jìn)行的恢復(fù)。
然而,如果 filesperset 的值很小,也會(huì)導(dǎo)致創(chuàng)建更多的備份片,因而會(huì)降低備份性能并增加維護(hù)操作時(shí)間。因此必須根據(jù)所需的恢復(fù)時(shí)間要求對(duì)這些因素加以權(quán)衡。
RMAN> backup database filesperset 1 plus archivelog delete input;
7.維護(hù) RMAN 目錄(catalog)/控制文件
認(rèn)真選擇保留策略(retention policy)。確保它可以滿(mǎn)足磁帶保留策略以及備份恢復(fù)策略的要求。如果未使用目錄,確保 CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)與保留策略匹配。
- SQL> alter system set control_file_record_keep_time=21 scope=both;
這會(huì)將備份記錄在控制文件中保留 21 天。
定期運(yùn)行以下目錄維護(hù)命令。
原因:Delete obsolete 將刪除保留策略以外的備份。
如果過(guò)期的備份未刪除,則目錄將不斷增長(zhǎng),直至出現(xiàn)性能問(wèn)題。
- RMAN> delete obsolete;
原因:crosschecking 將檢查目錄/控制文件是否與物理備份匹配。
如果某個(gè)備份丟失,此命令會(huì)將該備份片 設(shè)為“EXPIRED”,在開(kāi)始恢復(fù)時(shí),將不使用這個(gè)備份,而使用更早的備份。要?jiǎng)h除目錄/控制文件中已過(guò)期的備份,請(qǐng)使用 delete expired 命令。
- RMAN> crosscheck backup;
- RMAN> delete expired backup;
8.為控制文件丟失做準(zhǔn)備
這將確保您始終能夠擁有最新的控制文件,控制文件備份在當(dāng)前備份結(jié)束時(shí)執(zhí)行,而不是在備份期間。
- RMAN> configure controlfile autobackup on;
保留備份日志
原因:備份日志包含了磁帶存取的參數(shù)、控制文件備份的位置,如果所有文件都丟失了,則可以利用該日志。
9.測(cè)試恢復(fù)
原因:在需要執(zhí)行恢復(fù)的時(shí)候,您可以不實(shí)際執(zhí)行恢復(fù)就知道恢復(fù)流程是如何操作的,并可避免再次回復(fù)數(shù)據(jù)文件。
- SQL> recover database test;
10.使用RMAN 備份時(shí),在備份歸檔日志時(shí)不要指定“delete all input”
原因:“delete all input”在備份一個(gè)歸檔目錄下的歸檔日志后,會(huì)刪除該歸檔日志在不同歸檔目錄下的所有副本,而“delete input”在備份一個(gè)歸檔目錄下的歸檔日志后,僅刪除該目錄下的歸檔日志,下一次備份將備份歸檔目錄 2 下的日志以及歸檔目錄 1 的新日志,然后刪除所有備份過(guò)的日志。這意味著您將保留自最后一次備份以來(lái)在歸檔目錄2 下可用的歸檔日志(包括曾備份的日志)以及上次備份之前備份的兩份副本。