我对Oracle RMAN恢复的理解
零散思路:
可能遇到的恢复情况:
因为数据库无法启动或正常使用需要恢复;
因为数据误删除或表空间、表的误删除等需要将数据库或其中某表空间、表或表中数据恢复到过去某时间点;
RMAN恢复原则:
恢复不外乎就是恢复如下一些文件:数据文件(也有可能是表空间),控制文件,归档日志文件(见后面关于归档日志恢复部分),在线日志文件,初始化参数文件,
全库恢复需要在MOUNT状态下,
表空间或数据文件的恢复可以在OPEN状态下进行,
控制文件
归档日志文件
在线日志文件
初始化参数文件
常用的恢复命令:
//对数据库进行完全介质恢复
归档模式,控制文件、初始化参数文件、归档日志文件和重做日志文件都完好无损,其余数据文件全部丢失,可将数据库恢复到崩溃前那一刻的状态:
Rman>startup mount;
Rman>restore database;
Rman>recover database delete archivelog;
Rman>alter database open;
?那以上情况下,非归档模式应如何处理?
这种情况下感觉应该有几种情况:首先非归档模式下的备份只可能是一致性备份,而且非归档模式下没有归档日志,因此恢复时要考虑最近一次备份和数据库崩溃期间的在线日志文件是否都还在,如果在则直接执行restore和recover然后正常打开数据库即可,而如果在线日志文件已经部分或全部丢失,则首先restore最近一次备份,然后执行recover database until cancel命令,据说此时该命令并不会执行任何恢复操作,只是提示控制文件不再使用原有重做日志,最后以resetlogs方式打开数据库。在三思的书中,文字性提到了一种方法:首先恢复之前备份的控制文件,然后执行restore和recover命令,最后以resetlogs方式打开数据库。感觉这种方式很有道理而前一种思路似乎有问题:前一种思路中实际是用当前的控制文件在进行恢复操作,而当前的控制文件很有可能有前次备份中所不具有的新加的数据文件,那么这样在备份的时候是不是会出问题呢? 以上都需要具体验证!!!
//恢复表空间和数据文件
mount或open状态都可
Tablespace:
Rman>sql ?alter tablespace tbs1 offline immediate?;
Rman>restore tablespace tbs1;
Rman>recover tablespace tbs1;
Rman>sql ?alter tablespace tbs1 online?; Datafile:
Rman>sql ?alter database datafile 9 offline?;
Rman>restore datafile 9;
Rman>recover datafile 9;
Rman>sql ?alter datafile 9 online?; 或
Rman>set newname for datafile 3 to ?f:newlocationsysaux01.dbf?;
Rman>restore datafile 3;
Rman>switch datafile 3;
Rman>recover datafile 3;
//恢复归档日志文件
特别:三思告诉我们:“恢复归档文件也是使用restore命令,如果只是为了在恢复数据文件后应用归档文件,那并不需要手动归档文件进行恢复,RMAN会在recover的时候自动对适当的归档进行恢复。单独恢复归档文件一般是有特别的需求,如创建了Data Guard环境,Standy端丢失了部分归档文件,必须从Primary端重新获取等等。”
//恢复控制文件
这里所说的恢复是指仅恢复控制文件本身,应该还有一种“基于控制文件的不完全恢复”,不知和这种情况是否相同(当所有控制文件全部丢失或者误删除了表空间时(闪回数据库能办到吗?),需要执行控制文件的恢复)。其实本身是一种解决方案下的多种情况:
情景1:归档、有恢复目录、控制文件全部丢失或部分数据文件或表空间丢失
情景2:归档、无恢复目录、控制文件全部丢失或部分数据文件或表空间丢失
前景3:非归档、有恢复目录、控制文件全部丢失或部分数据文件或表空间丢失
情景4:非归档、无恢复目录、控制文件全部丢失或部分数据文件或表空间丢失
1、 从自动备份中恢复
Rman>set DBID=1415261003;
Rman>startup nomount;
Rman>restore controlfile from autobackup;
Rman>alter database mount;
(Rman>restore controlfile to ‘d:oraclenewctlfcontrolfile01.ctl’ from autobackup;恢复到指定位置)
Rman>recover database;
Rman>alter database open resetlogs;
2、 从备份集中恢复
Rman>set DBID=1415261003;
Rman>startup nomount;
Rman>restore controlfile from ?d:backupc-1415261003-20110522-00?;
(Rman>restore controlfile to ‘d:oraclenewctlfcontrolfile01.ctl’ from autobackup;恢复到指定位置)
Rman>alter database mount;
Rman>recover database;
Rman>alter database open resetlogs;
//恢复初始化参数文件(方法基本与控制文件的恢复相同)
Rman> set DBID=1415261003;
Rman>startup nomount;
Rman>restore spfile from autobackup;
Rman>alter database mount;
Rman>recover database;
//恢复联机重做日志文件
0、 查询联机日志状态情况
v$log中记录联机重做日志组的信息;
v$logfile中记录联机重做日志组对应的日志文件;
SQL>select group#, thread#, sequence#, members, archived, status from v$log;
SQL>select group#, member from v$logfile;