最近用RMAN對部分歸檔日志進行了恢復,在此記錄恢復過程
由於不能透漏數據庫信息,故舉例如下:
ORACLE_SID=hrdb
恢復目標路徑:/NewRmanbak/restore_archive/
需要恢復的LOG SEQUENCE:
恢復所用用戶:oracle:oinstall
1、查詢對應的Sequence Number,准備恢復目標目錄,並賦予相關權限

select l.SEQUENCE#, l.* from v$archived_log l where l.COMPLETION_TIME>=to_date('2016-05-14 09:00:00','yyyy-mm-dd hh24:mi:ss') --and l.COMPLETION_TIME<=to_date('2016-05-16 09:00:00','yyyy-mm-dd hh24:mi:ss') and l.DEST_ID=1 and l.SEQUENCE#<130519
RMAN> list backup of archivelog from logseq 130430 until logseq 130519;

$ mkdir /NewRmanbak/restore_archive/ $ chown oracle:oinstall /NewRmanbak/restore_archive/
2、開始恢復

run{ ALLOCATE CHANNEL dev1 TYPE 'sbt_tape' parms 'ENV=(NSR_DATA_VOLUME_POOL=oracle,NSR_SERVER=baksvr,NSR_CLIENT=hrdb)'; set archivelog destination to '/NewRmanbak/restore_archive/'; restore archivelog from logseq 130430 until logseq 130519; release channel dev1; }
由此可以得到四個歸檔文件在/NewRmanbak/restore_archive/中
注:上文提及的channel type可以在list列表中查看,另外可以通過v$backup_device動態性能視圖查看
另近期發現在Symantec Netbackup軟件中,該庫的ARCH備份一直不正常,檢查日志發現是找不到上次恢復的文件:
RMAN> crosscheck archivelog all;
由於之前恢復完成之后,將這幾個文件移動了位置,所以一直找不到這些文件導致備份失敗(根據目前的理解,在RMAN和當前數據庫中,每一個歸檔文件的存在是一份的,也就是說,restore是將備份集中的file move出來了,而不是copy)
當restore之后,即使文件恢復了,oracle也會認為這個文件是數據庫可用的文件。故在下次備份的時候也查找這幾個restore出來的文件,所以在此清除了過期文件之后,備份恢復正常