日期:2014-05-16  浏览次数:20316 次

RMAN 系列(五),RMAN 还原 与 恢复
一. RMAN 还原与恢复基础
在RMAN 用于中,还原与恢复是两个不同的概念。 
还原(restore):指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象。 
恢复(recover):是一个数据库与给定时间点相一致以保证能够打开这个数据库的实际进程,该进程通常是通过应用重做(包括联机重做日志和归档的重做日志)来完成的。
数据库中的数据状态对数据库是非常重要的,在数据库启动时要求数据与给定的时间状态一致。 如果数据库是一致的,就可以打开这个数据库,如果不一致,就不能打开。 通过使用回滚段,就可以在启动和运行数据库时保持这种一致性。 正常关闭数据库时,数据文件会再一次一致。 
Oracle 严格要求数据的一致性。 当我们在恢复数据文件后重新启动数据库时,Oracle 会检测这些数据文件是否状态不一致。 Oracle 会跟踪每个数据库数据文件头中的当前SCN和控制文件中的当前SCN。 打开数据库时,Oracle 要经历3个阶段: 未加载,加载和打开。 数据库启动进入打开阶段时,Oracle 会开始尝试打开这个数据库。 在尝试打开数据库的时候,Oracle 检测控制文件中的SCN以及每个数据文件中的SCN,如果这些SCN 不匹配,Oracle 就会知道数据库存在某些错误并且处于不一致的状态。
如果发现数据库是不一致的。 Oracle 就需要判断是否能够基于联机重做日志来恢复这个数据库,或者是否需要归档的重做日志来完成恢复操作。 如果Oracle 能够使用联机重做日志来执行恢复操作,它就会执行灾难恢复(或者在RAC 环境中执行实例恢复操作)。 如果Oracle 不能使用联机重做来确保数据库的一致性,它就会停止启动进程,通知报告需要执行介质恢复操作。
  
二. RMAN 还原与恢复前的操作
启动数据库恢复时,我们必须先恢复服务器参数文件,然后恢复控制文件。 
补充知识: 先对控制文件和spfile的备份的知识做下回顾:
当我们修改为自动备份后,在每次备份之后都会自动备份控制文件和初始化pfile.
RMAN> show all;
CONFIGURE CONTROLFILE AUTOBACKUP ON; -- 该参数默认是关闭的
RMAN> backup database;
......
启动 Control File and SPFILE Autobackup 于 25-6月 -10
段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_25/O1
_MF_S_722604317_6288DYQF_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 于 25-6月 -10
配置控制文件和参数文件的自动备份时的一些规则:
(1) 在RUN 程序块之外执行每个RMAN的backup 或者 copy 命令时,都会自动备份控制文件和参数文件。
(2) 使用使用了RUN 程序块,而且该程序块的最后一个命令不是backup 或者copy,在RUN 程序块结尾处会备份控制文件和参数文件。
除了上面2种自动控制文件备份类型,我们还可以配置另一种特殊的控制文件备份类型。该类型发生在数据库变化时,这些变化包括添加新的表空间,添加数据文件,添加联机重做日志等。 这些自动备份类型只在磁盘上发生,使用configure controlfile autobackup命令的特殊选项可以简化备份。如:
Configure controlfile autobackup format for device type disk to 'd:/backup/sid_%F';
使用了该选项,RDBMS 会在数据结构的变化控制文件产生影响时自动备份控制文件。强调一点,只支持磁盘。
手动的备份控制文件
Alter database backup controlfile to 'd:/backup/orcl_backup.ctl';
手工备份spfile:
RMAN> backup spfile;
启动 Control File and SPFILE Autobackup 于 26-6月 -10
段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1
_MF_S_722706435_62CD44SN_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 于 26-6月 -10
 
2.1 还原服务器参数文件
2.1.1 使用RMAN(不使用FRA)从自动备份中恢复服务器参数文件
ORACLE 会默认地在$ORACLE_HOME/dbs 或者 $ORACLE_HOME/DATABASE 目录中创建服务器参数文件与控制文件。 
还原服务器参数文件的一般过程是先设置ORACLE_SID 和 登陆 RMAN, 然后设置DBID, 使RMAN知道需要查找哪一个数据库的服务器参数文件,还必须在这个操作的同时启动数据库实例。
启动数据库实例后,如果使用默认的位置来存储控制文件的自动备份,就可以简单的执行:Restore spfile from autobackup, 这样RMAN 就可以查找包含最新服务器参数备份的控制文件备份集。 一旦恢复了服务器参数文件,就必须关闭重启数据库实例。如果使用的是非默认位置,就需要分配一个指向该位置的通道,然后在使用相同的方法来还原服务器参数文件。
执行 restore spfile from autobackup 命令时,Oracle 会在默认位置中(或者在使用allocate channel 命令定义的为位置中)查找自动的控制文件备份集。 RMAN 创建控制文件自动备份片时,会使用默认的命名约定: C-DBID-DATE-序列号。 如:C-1247395743-2010627-00。 注意的是, 这种命名规则不适用于FRA。
需要注意的是,如果没有使用恢复目录(并且没有使用控制文件,这是可能的),Oracle 就不知道最新控制文件备份片的名称,因此Oracle 会基于这些备份集的默认命名标准来构造控制文件备份片的名称。 Oracle 会遍历整个目录,向后查找数据库的控制文件备份集。 在默认情况下,Oracle 会查找一个在过去10天内创建的控制文件备份集。 如果Oracle 美欧查找到指定时间周期内创建的控制文件备份集,就会产生一个错误。 如果Oracle 发现一个有效的控制文件备份集,就会为用户还原服务器参数文件。
使用restore 命令的maxseq 和 maxdays 参数可以修改RMAN 向后查找控制文件自动备份的时间周期。 
使用默认设置的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore spfile from autobackup;
shutdown immediate;
不使用默认设置的示例:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run {
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore spfile from autobackup;
}
shutdown immediate;
使用maxseq 和 maxdays 参数在超过默认天数(10天)的时间周期内向后查找控制文件备份集:
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run {
set controlfile autobackup format for device type disk to 'f:/backup/%f';
allocate channel c1 device type disk;
restore spfile from autobackup maxseq 200 maxdays 1000;
}