在RMAN 用于中,还原与恢复是两个不同的概念。
指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象。
是一个数据库与给定时间点相一致以保证能够打开这个数据库的实际进程,该进程通常是通过应用重做(包括联机重做日志和归档的重做日志)来完成的。
数据库中的数据状态对数据库是非常重要的,在数据库启动时要求数据与给定的时间状态一致。 如果数据库是一致的,就可以打开这个数据库,如果不一致,就不能打开。 通过使用回滚段,就可以在启动和运行数据库时保持这种一致性。 正常关闭数据库时,数据文件会再一次一致。
Oracle 严格要求数据的一致性。 当我们在恢复数据文件后重新启动数据库时,Oracle 会检测这些数据文件是否状态不一致。 Oracle 会跟踪每个数据库数据文件头中的当前SCN和控制文件中的当前SCN。 打开数据库时,Oracle 要经历3个阶段: 未加载,加载和打开。 数据库启动进入打开阶段时,Oracle 会开始尝试打开这个数据库。 在尝试打开数据库的时候,Oracle 检测控制文件中的SCN以及每个数据文件中的SCN,如果这些SCN 不匹配,Oracle 就会知道数据库存在某些错误并且处于不一致的状态。
如果发现数据库是不一致的。 Oracle 就需要判断是否能够基于联机重做日志来恢复这个数据库,或者是否需要归档的重做日志来完成恢复操作。 如果Oracle 能够使用联机重做日志来执行恢复操作,它就会执行灾难恢复(或者在RAC 环境中执行实例恢复操作)。 如果Oracle 不能使用联机重做来确保数据库的一致性,它就会停止启动进程,通知报告需要执行介质恢复操作。
启动数据库恢复时,我们必须先恢复服务器参数文件,然后恢复控制文件。
当我们修改为自动备份后,在每次备份之后都会自动备份控制文件和初始化pfile.
RMAN> show all;
RMAN> backup database;
......
段 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';
RMAN> backup spfile ;
段 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
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。
需要注意的是,如果没有使用恢复目录(并且没有使用控制文件,这是可能的),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;
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;
使用FRA 恢复参数文件比不使用FRA 简单。 首先,我们不需要担心DBID 没有意义,也不用操心分配通道的工作,这就节省了一定的时间。 恢复服务器参数文件时,我们只需要正确配置临时参数文件(确保适当的设置FRA目标目录),启动ORACLE 实例,并且执行restore spfile 命令。
set oracle_sid=orcl
rman target sys/pwd
startup nomount;
restore spfile from autobackup;
shutdown immediate;
在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;
如果使用了恢复目录,在启动(未加载)ORACLE 实例后简单执行restore spfile 命令就可以还原最新的服务器参数文件。 RMAN 会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
set oracle_sid=orcl
rman target sys/pwd catalog user/pwd@sid
startup nomount;
restore spfile from autobackup;
shutdown immediate;
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取服务器参数文件的副本是非常容易的。 我们应当注意到这个操作会生成一个文本参数文件,而不是生成一个服务器参数文件。 因此如果要将这个文本参数文件用作服务器参数文件,就必须转换该文件。
如果不是使用恢复目录并且控制文件的自动备份已经启动,只需要执行下面的命令:
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 会默认地在$ORACLE_HOME/dbs 或者 $ORACLE_HOME/DATABASE 目录中创建服务器参数文件与控制文件。
假设已经还原了实例参数文件和启动了实例,还原控制文件时,一般过程是先设置ORACLE_SID 和 登陆 RMAN, 然后设置DBID, 使RMAN知道需要查找哪一个数据库的控制文件。
如果使用默认的位置来存储控制文件的自动备份,就可以简单的执行:Restore controlfile from autobackup, 这样RMAN 就可以查找包含最新控制文件的控制文件备份集。 一旦恢复了控制文件,就必须关闭重启数据库实例。如果使用的是非默认位置,就需要分配一个指向该位置的通道,然后在使用相同的方法来还原控制文件。
执行 restore controlfile from autobackup 命令时,Oracle 会在默认位置中(或者在使用allocate channel 命令定义的为位置中)查找自动的控制文件备份集。 通过DBID, RMAN 使用这个DBID在包含控制文件备份的目录中查找数据库的最新控制文件备份集。 通过应用restore 命令的maxseq 和 maxdays 参数,可以修改RMAN查找控制文件自动备份的时间周期。
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore controlfile 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 controlfile from autobackup maxseq 200 maxdays 1000;
}
shutdown immediate;
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
restore controlfile to 'f:/backup/ctl.restore' from autobackup;
shutdown immediate;
使用FRA恢复控制文件过程非常简单,首先确保FRA位置参数被正确设置。 然后启动实例,执行: restore controlfile from autobackup;
set oracle_sid=orcl
rman target sys/pwd
startup nomount;
restore controlfile from autobackup;
shutdown immediate;
也可以使用maxseq 和 maxdays 参数进行设置:
Restore controlfile from autobackup maxseq 200 maxdays 100;
有时候,可能需要恢复一段时间以前建立的控制文件备份,因而控制文件不是来自于最新的备份(执行resetlogs 通常是这样)。 结合until time 参数,restore controlfile from autobackup 命令可以实现这一操作。 如:
Restore controlfile from autobackup until time "to_date('2010-6-27 13:25:00','yyyy-mm-dd hh24:mi:ss')";
如果要使用这个命令,就需要知道哪些控制文件备份可以用于操作。 可以使用list backup of controlfile 命令确定哪些备份控制文件可以用于还原操作。
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
113 Full 16.00M SBT_TAPE 00:00:05 18-6月 -10
BP 关键字: 116 状态: AVAILABLE 已压缩: NO 标记: TAG20100618T085926
句柄: 07lghd6e_1_1 介质: /,07lghd6e_1_1
包括的控制文件: Ckp SCN: 1403939 Ckp 时间: 18-6月 -10
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
558 Full 9.52M DISK 00:00:02 26-6月 -10
BP 关键字: 560 状态: AVAILABLE 已压缩: NO 标记: TAG20100626T154715
段名:D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1_MF_S
_722706435_62CD44SN_.BKP
包括的控制文件: Ckp SCN: 7992586 Ckp 时间: 26-6月 -10
RMAN>
在Oracle 10g中,restore 有from backup 子句,使用该子句可以指示包含控制文件备份的备份集。因此只需要知道了该备份集片的名称和它的位置,就可以还原控制文件。
为了还原控制文件,首先设置数据库的实例并标识包含控制文件备份的备份集(或者进行猜测)。 接着启动RMAN,然后设置数据库的DBID。 设置完后就需要分配通道给要还原的设备,分配通道后,执行restore controlfile from 命令,就可还原控制文件并复制到不同的control_file 参数位置。
set oracle_sid=orcl
rman target sys/pwd
set dbid=1247395743
startup nomount;
run
{
allocate channel c1 device type disk;
restore controlfile from 'F:/BACKUP/ORCL_0OLGTB96_1_1.BAK';
}
shutdown immediate;
使用恢复目录,可以简单的执行restore controlfile 命令,还原最新的控制文件,RMAN会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
Set oracle_sid=orcl
Rman target sys/pwd catalog user/pwd@sid;
Startup nomount;
Restore controlfile;
Alter database mount;
当使用RMAN 还原控制文件(并且没有丢失数据文件和联机重做日志),有两件事要考虑:首先,要考虑在还原控制文件后如何启动和运行数据库,其实,要恢复与RMAN相关的信息,如使用RMAN 在新创建的控制文件中注册归档的重做日志和备份集。
如果只丢失了控制文件,那么恢复控制文件和数据库就非常容易。 恢复控制文件的命令是相同的,只需要模拟一个不完全恢复操作以打开数据库。
set oracle_sid=orcl
Rman target sys/pwd;
set dbid=1247395743
startup nomount;
Restore controlfile from autoback;
Alter database mount;
Alter database open resetlogs;
set oracle_sid=orcl
Rman target sys/pwd;
set dbid=1247395743
startup nomount;
Restore controlfile from autoback;
Alter database mount;
Alter database open resetlogs;
当然,丢失其他物理文件可能会使这种恢复操作变得复杂。 此外,如果没有最近的控制文件备份,则操作就变得非常复杂,并且可能最终需要使用create control file 命令重建控制文件。
Oracle 控制文件
一旦还原了控制文件,就需要考虑丢失RMAN相关数据的可能性。 由于RMAN将所有数据存储在控制中,很有可能至少丢失与归档的重做日志相关的一些记录(Oracle 需要完全恢复归档的重做日志)。
RMAN 简化了这个问题的处理,因为可以在还原控制文件后注册各种RMAN 相关的备份文件,从而确保控制文件中有恢复所需的全部文件。 为了重建RMAN 相关的归档重做日志记录,可以使用catalog 命令来在控制文件中注册归档重做日志。 Catalog 命令可用于注册特定的备份集片。 如:
RMAN>catalog backuppiece 'F:/BACKUP/ORCL_11LH4449_1_1.BAK';
也可以对归档的重做日志编目录:
RMAN>catalog archivelog 'D:/archivelog/ORCL_1_102_719615012.ARC';
如果每天生成太多的redo log,采用这种方法就很麻烦。 RMAN 可以对整个目录编目录,而不需要列出单个文件,只要再次使用catalog 命令及以下的一个关键字即可:
(1)recovery area 或者 db_recovery_file_dest
(2)Start with
recovery area 和 db_recovery_file_dest 功能相同,他们是RMAN对整个FRA 编目录,如果RMAN 发现已经对一些文件编目录,它就会跳过这些文件并继续对控制文件中的剩余文件编目录。如:
RMAN>catalog recovery area;
如果没有使用FRA,则可以使用start with 语法。 该语法允许遍历非FRA备份目录并且对包含该目录以及该目录下任何子目录中的所有RMAN相关文件编目录。 如:
RMAN>catalog swart with 'D:/archivelog';
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取控制文件的副本是非常容易的。如果不使用恢复目录且控制文件的自动波备份可用,只需要执行下面的命令即可:
RMAN>restore controlfile to 'd:/backup/' from autobackup;
执行这条命令会在D:/backup 目录中将控制文件还原为test.ora 文件。 对于任何自动备份的还原操作来说,RMAN 只会查找过去7天内生成的控制文件自动备份片。 我们可以使用maxseq 和 maxdays 参数修改这个默认的时间周期。
如果没有使用恢复目录与控制文件的自动备份,或者使用了恢复目录,可以执行下面的命令:
RMAN>restore controlfile to 'd:/backup';
在这种情况下,Oracle 会使用数据库的控制文件找到最新的备份集,并从这个备份集还原控制文件。 当然,使用dbms_backup_restore过程来手工还原控制文件。