1、只读表空间的恢复
在默认情况下,即使丢失了只读的数据文件,RMAN也不会在执行完全恢复数据库还原操作时还原只读的数据文件。 要在完全恢复期间还原只读的数据文件,就必须在restore 命令中使用check readonly 参数,如:
Restore database check readonly;
注意,执行recover tablespace或recover datafile命令时,RMAN的工作情况是不一样的。 使用这两个命令时,不管表空间是否为只读状态都会执行恢复操作。
2、归档重做日志的还原
在使用RMAN的普通恢复过程中,不必恢复归档的重做日志。 不过,偶尔也会要求还原一个或多个归档的重做日志。 例如,我们可能需要使用LogMiner 在备份中存储的归档重做日志文件里查找一些信息。
Restore archivelog all;
Restore archivelog from logseq=20 thread=1;
Restore archivelog from logseq=20 until logseq=30 thread=1;
还可以将归档的重做日志还原到默认位置以外的位置上:
Run
{
Set archivelog destination to "d:/arch";
Restore archivelog all;
}
注意:1. 上例中的set 命令没有替代方法,必须要求使用set。
2. 如果RMAN 认为一个归档的重做日志已存在,就不会在磁盘上还原这个归档的重做日志,即使设置的还原位置不同与默认的归档日志位置,Oracle 也不会在这个新的位置上恢复归档的重做日志。
3、数据文件副本的还原
可以从数据文件副本(不是备份集)中还原数据库的数据文件。 要实现这个功能,需要先使用restore from datafilecopy命令,然后再使用恢复数据库(或表空间,数据文件)的recover。
RMAN>Restore (datafile 5) from datafilecopy; -- 此处的圆括号是必须的,如果没有就报错
RMAN>Recover datafile 5;
SQL>Alter database datafile 5 online;
执行restore 时,该命令会识别需要还原的数据文件的最新副本,然后从这个副本中还原这些数据文件。 数据文件的最新副本可能是在一个数据文件副本中,而不是在一个副本中。 在这种情况下,Oracle 会恢复这个数据文件副本。
4、恢复讹误的数据块
即使与讹误数据块关联的数据文件一直联机,也可以通过用块介质恢复(block Media recover: BMR)执行块级别恢复操作来修复Oracle 数据库中的这些逻辑上或者物理上的讹误数据块。
一般出现数据块错误时,都会有错误消息:
ORA-01578: ORACLE data block corrupted (file #18,block #88)
如果没有BMR时,我们必须从一个备份中恢复这个数据文件,在恢复过程中,用户不能使用该数据块文件中的所有数据。
用BMR恢复就很简单,只需要执行blockrecover命令即可:
Blockrecover datafile 18 block 88;
如果有必要,可以同时恢复多个数据文件的多个数据块。如:
Blockrecover datafile 18 block 16,17,88,108;
Blcokrecover datafile 18 block 88 datafile 19 blcok 188;
Oracle 会跟踪在备份和恢复期间发生的数据块讹误。如果检测到备份或复制操作出现讹误,由于Oracle 不允许在备份中出现讹误,所有这个备份就会失败。 当然,可以配置RMAN允许一定数量的讹误,但是不推荐这种用法。
可以使用backup validate database 命令查看RMAN 检测到的所有数据库讹误。这条命令会在v$backup_corruption 和v$database_block_corruption视图中填充检测到的所有讹误数据块。 如果讹误发生在复制操作期间,v$copy_corruption视图就会指明包含讹误的备份集。
注意的是:v$backup_corruption 是一个显示历史讹误的视图,v$database_block_corruption 则是一个显示当前数据块讹误的视图。 一旦修正了数据库的块讹误,就需要重新运行backup validate database命令,然后查询v$database_block_corruption 视图以确保不存在其他讹误。
查询v$database_block_corruption视图可以查看讹误数据块的详细信息。 如下所示,使用具有corruption list restore 参数的blockrecover命令可以方便地修正v$database_block_corruption 视图中的讹误数据块。
Blockrecover corruption list restore until time 'SYSDATE-5';
这条命令将还原讹误列表中最近5天的所有讹误数据块。 在上面的命令中,还可以使用until time 和 until sequence.
5、恢复前一个对应物
一个数据库的对应物(incarnation)对应这个数据库的特定逻辑生存期。 有时我们需要使用上次执行resetlogs命令打开数据库前生成的一个备份来还原数据库,或者可能需要还原到执行上一个resetlogs命令之前的时间点。 这就需要用到incarnation.
5.1 使用恢复目录恢复前一个对应物
先假设使用恢复目录执行了备份操作,并且最近使用了resetlogs命令执行过时间点恢复,现在需要使用执行resetlogs命令之前的一个备份来恢复数据库。
操作步骤:
(1)启动但不加载实例,这是因为我们要先得到一个与恢复数据库对应物关联的控制文件
(2)使用reset database to incarnation 命令为RMAN 指示对应物的备份集。
(3)Restore controlfile,使rman还原最新的控制文件
(4)加载数据库
(5)Restore 数据库
(6)Recover 数据库
(7)使用resetlogs 打开数据库
示例如下:
C:/Users/Administrator.DavidDai>rman target / catalog rman/rman@orcl;
恢复管理器: Release 11.2.0.1.0 - Production on 星期二 7月 6 10:31:40 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到目标数据库: ORCL (DBID=1247395743)