最近用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出来的文件,所以在此清除了过期文件之后,备份恢复正常