一. 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
三、还原服务器参数文件
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;
}
shutdown immediate;
将参数文件还原到不同的位置和文件中的示例(假定数据库正在启动和运行):
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore spfile to 'f:/backup/spfile.restore' from autobackup;
shutdown immediate;
2、使用RMAN 和 FRA 从自动备份中恢复服务器参数文件
使用FRA 恢复参数文件比不使用FRA 简单。 首先,我们不需要担心DBID 没有意义,也不用操心分配通道的工作,这就节省了一定的时间。 恢复服务器参数文件时,我们只需要正确配置临时参数文件(确保适当的设置FRA目标目录),启动ORACLE 实例,并且执行restore spfile 命令。
set oracle_sid=orcl
rman target sys/pwd
startup nomount;
restore spfile from autobackup;
shutdown immediate;
3、从特定的备份集中恢复服务器参数文件
在Oracle 10g中, restore 命令包含了一个from backup子句, 使用该子句可以指示包含服务器参数文件的备份的备份集片。 因此,只需要知道该备份集片的名称和它的位置,就可以还原服务器参数文件。 在某些情况下,查找包含服务器参数文件备份的备份集片可能存在一些困难,但一旦找到了该备份集片,还原工作就会非常简单,当然,最好还原最新的控制文件备份。
为了还原服务器参数文件,首先要启动数据库实例并标识包含服务器参数文件备份的备份集片(或者进行猜测)。 接着启动RMAN,然后设置数据库饿DBID。 一旦设置了DBID,就需要分配通道给要还原的设备。 分配通道后,执行restore spfile 命令,在命令的末尾传入备份集片的名称。 于是RMAN 将服务器参数还原到正确的位置。
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
allocate channel c1 device type disk;
restore spfile from 'f:/backup/c-1247395743-2010627-00';
}
shutdown immediate;
4、使用恢复目录恢复服务器参数文件
如果使用了恢复目录,在启动(未加载)ORACLE 实例后简单执行restore spfile 命令就可以还原最新的服务器参数文件。 RMAN 会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
set oracle_sid=orcl
rman target sys/pwd catalog user/pwd@sid
startup nomount;
restore spfile from autobackup;
shutdown immediate;
5、使用联机操作的数据库还原备份的服务器参数文件
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取服务器参数文件的副本是非常容易的。 我们应当注意到这个操作会生成一个文本参数文件,而不是生成一个服务器参数文件。 因此如果要将这个文本参数文件用作服务器参数文件,就必须转换该文件。
如果不是使用恢复目录并且控制文件的自动备份已经启动,只需要执行下面的命令:
RMAN>RESTORE SPFILE TO PFILE 'D:/BAKCUP/ORCL.ORA' FROM AUTOBACKUP;
对于任何自动备份的还原操作来说,如果不提供maxseq 和maxdays 参数值,RMAN 只需要查找过去7天内生成的控制文件的自动备份片。
如果没有使用恢复目录与控制文件自动备份,或者是在使用恢复目录,就可以执行:
RMAN>RESTORE SPFILE TO PFILE 'D:/BACKUP/ORCL.ORA';
这种情况下,Oracle 会使用数据库控制文件找到最新的备份集,并从这个备份集中还原服务器参数文件。
oracle视频教程请关注: