一. 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;
}
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.1.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;
2.1.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;
2.1.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;
2.1.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 会使用数据库控制文件找到最新的备份集,并从这个备份集中还原服务器参数文件。
2.2 还原控制文件
2.2.1 使用RMAN(不使用FRA)从自动备份中恢复控制文件
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;
2.2.2 使用RMAN 和 FRA 从自动备份中恢复控制文件
使用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;
2.2.3 恢复较早的控制文件备份
有时候,可能需要恢复一段时间以前建立的控制文件备份,因而控制文件不是来自于最新的备份(执行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 命令确定哪些备份控制文件可以用于还原操作。
RMAN> 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>
2.2.4 从备份集中恢复控制文件
在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;
2.2.5 使用恢复目录恢复控制文件
使用恢复目录,可以简单的执行restore controlfile 命令,还原最新的控制文件,RMAN会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
Set oracle_sid=orcl
Rman target sys/pwd catalog user/pwd@sid;
Startup nomount;
Restore controlfile;
Alter database mount;
2.2.6 还原控制文件后的数据库恢复
当使用RMAN 还原控制文件(并且没有丢失数据文件和联机重做日志),有两件事要考虑:首先,要考虑在还原控制文件后如何启动和运行数据库,其实,要恢复与RMAN相关的信息,如使用RMAN 在新创建的控制文件中注册归档的重做日志和备份集。
2.2.6.1 在恢复控制文件后打开数据库
如果只丢失了控制文件,那么恢复控制文件和数据库就非常容易。 恢复控制文件的命令是相同的,只需要模拟一个不完全恢复操作以打开数据库。
Noarchivelog 模式,恢复方法
set oracle_sid=orcl
Rman target sys/pwd;
set dbid=1247395743
startup nomount;
Restore controlfile from autoback;
Alter database mount;
Recover database noredo;
Alter database open resetlogs;
Archivelog 模式,恢复方法
set oracle_sid=orcl
Rman target sys/pwd;
set dbid=1247395743
startup nomount;
Restore controlfile from autoback;
Alter database mount;
Recover database;
Alter database open resetlogs;
当然,丢失其他物理文件可能会使这种恢复操作变得复杂。 此外,如果没有最近的控制文件备份,则操作就变得非常复杂,并且可能最终需要使用create control file 命令重建控制文件。
Oracle 控制文件
2.2.6.2 还原控制文件中RMAN 相关的记录
一旦还原了控制文件,就需要考虑丢失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';
2.2.7 联机还原控制文件
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取控制文件的副本是非常容易的。如果不使用恢复目录且控制文件的自动波备份可用,只需要执行下面的命令即可:
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过程来手工还原控制文件。
三.Restore 和 recover 命令
3.1 RESTORE 命令
虽然store 命令有一些辅助目标,但其主要功能是从RMAN备份中还原文件,为恢复做准备。 RMAN和restore 命令非常只能,他们将选择最近的备份来进行还原,从而减少恢复时间。 其结果是,restore 命令可能从备份集中还原数据文件,也可能从映像副本中还原数据文件,或者两者并用来进行还原,只要对加快还原过程有帮助即可。
Restore 命令用于从自动的备份中还原服务器参数文件和控制文件。 Restore 命令也可用于创建备份数据库的备用控制文件。也可以用restore 命令来将数据库还原到任何时间点。在这种情况下,该命令将查找离给定时间点最近的备份以进行还原。 如果没有恢复目录,RMAN 可以在数据库的对应物中将数据库还原到任何时间点(假设备份可用)。 Restore 命令也可将从前面的对应物中还原数据库,但需要建立对应物期间备份控制文件。 如果使用恢复目录,接可以将数据库还原到任何对应物。
Restore 命令也可根据分配给备份的给定标记还原特定的备份。 如果开发环境中存在需要经常用于还原的“黄金”备份,这种还原方式就非常有用。如果需要归档的重做日志,restore 命令也可用于还原归档的重做日志。
此外,restore 命令可用于验证实际恢复数据的能力。 这将确保备份可用于还原数据库,并且可以验证这些备份的完整性。 也可以使用restore preview 命令标识还原数据库所需要的备份。
使用restore命令时,如果备份加密,则需要确保加密方法的正确配置。如果使用透明模式的加密,相应的电子皮夹必须可用。
使用restore 命令时,该命令会在没有认识提示的情况下重写已经存在的任何文件,除非使用set newname命令。 由于这一点,在还原文件时必须非常小心,并且确保重写已经存在的文件不会产生任何不利的影响。
Restore 命令也具有故障恢复功能。在恢复期间,如果RMAN 发现给定的备份文件不可用或者已被破坏,他就会自动尝试使用前面的备份来完成修复过程。 进行故障恢复时,RMAN会在数据库警报日志中添加一条相应的信息。
3.2 RECOVER 命令 recover 命令用于恢复数据库。该命令可以执行数据库的完全恢复或者时间点恢复。 Recover 命令确定需要哪些归档的重做日志,并且析取和应用他们。 一旦完成重做的应用,我们就只需要使用alter database open命令打开数据库即可。
Recover 命令也用于判断是否存在可用的增量备份映像。 这些映像可应用与基本增量备份或数据文件映像副本。 Recover命令总是尝试首先增量备份,因为这将是还原数据库最快的方法。
还原归档的重做日志时,recover 命令尝试使用磁盘上已有的重做日志。如果磁盘上没有可用的重做日志,recover 就会尝试从各种格挡的重做日志备份集中还原他们。 注意,可以使用recover 命令中的noredo 参数来指示rman 不应该尝试将重做日志应用于数据库。
四.在Noarchivelog 模式中还原与恢复数据库
如果数据库在noarchivelog模式下,我们将从完全的脱机备份中恢复这个数据库,并且不可能实现时间点恢复。
4.1 还原的准备工作
如果在noarchivelog 模式中运行数据库并且假定拥有数据库的一个备份,就可以非常容易地执行数据库的完全恢复。 首先要清理所有的数据文件,以及旧的重做日志和控制文件。 虽然不是一定要这么做,但由于使用了noarchivelog模式,我们希望一切从头开始。
清理完数据文件,控制文件和重做日志后,就可以开始启动恢复进程。 首先,可以从最近生成的备份中恢复控制文件,或者可以使用在某个时间点(备份完成后的时间内)创建的备份控制文件。 如果使用create control file命令,就需要在还原数据库之前把与RMAN 备份相关的文件编程目录。
如果恢复了服务器参数文件和控制文件,就可以忽视使用恢复目录和不使用恢复目录之间的差异。 因此,我们只介绍不使用恢复目录的恢复操作。 此外,使用FRA 和不使用FRA的恢复操作也没有很大区别。
恢复操作的RMAN 命令如下:
Startup mount;
Restore database;
Recover database noredo; -- 如果联机日志存在,可以用recover database代替
Alter database open resetlogs;
这里假定已经恢复了服务器参数文件和数据库控制文件。 第一条命令startup mount 加载数据库,因此Orace 会读取准备用于数据库还原操作的控制文件。 第二条命令restore database将使RMAN 启动数据库的还原操作。 第三条命令指示RMAN执行最后的恢复操作以准备打开这个数据库。 由于是noarchivelog 模式,并且不应用任何归档的重做日志并且丢失了联机重做日志,所以在这条命令中使用noredo 参数。 如果存在完整的联机重做日志,就不需要使用noredo 参数。 最后,使用alter database open resetlogs 命令打开这个数据库。 由于已经还原了控制文件,并且需要重新构建联机重做日志,所以必须使用resetlogs 命令。
Resetlogs 表示一个数据库逻辑生命周期的结束与另一个逻辑生命周期的开始,使用resetlogs后,SCN不会被重置,但是会重置日志序列号,重置redo log。 以防止不完全恢复后日志序列发生冲突。
4.2 从旧备份中还原数据库
有事,我们可能需要还原多个备份,并且想要从最新备份之外的某些备份中恢复数据库。 在这种情况下,需要使用set命令和其他还原进程。 下面是实现比默认备份更早的备份中还原数据库:
Startup mount;
Run
{
Set until time "to_date('2010-6-28 17:04:00','yyyy-mm-dd hh24:mi:ss')";
Restore database;
Recover database noredo;
Alter database open resetlogs;
}
这里的set until time 命令被限定在run 代码块中。 如果要使用set until time命令,就必须满足这个要求。 我们设定的时间是2010-6-28 17:04:00,Oracle会查找最接近但是不会超过这个设置值的时间生成备份。 如果说在6-28日生成了3个备份。 分别是8点,18点,22点。 那么RMAN 会选择18点的备份。
如果不使用run 代码块,就必须在restore 命令中设置时间限制:
Startup mount;
Restore database until time "to_date('2010-6-28 17:04:00','yyyy-mm-dd hh24:mi:ss')";
Recover database noredo;
Alter database open resetlogs;
4.3 在不同的位置上还原数据库
我们并不是总是希望将数据库还原到Oracle文件的原始文件位置。 例如,在一个灾难恢复练习中,我们可以将数据库恢复到一个大的文件系统中。
RMAN 默认将数据文件还原到备份时数据文件所在的原始位置。如果想更换位置,输入set newname for datafile 和switch命令即可。 如:
Set newname for datafile 'D:/app/Administrator/oradata/orcl/dave01.dbf' to 'E:/app/Administrator/oradata/orcl';
这里定义的是数据文件的原始位置和RMAN应当将文件复制到新的位置。 一旦对所有要还原到不同位置的数据文件都执行了set newname for datafile命令,就可以使用restore 和 recover 命令。 最后,在打开数据库之前,必须告诉Oracle以后永久的使用已还原,重定位的数据文件。 这里我们使用swithch命令就可以。
Switch 命令可以修改数据库控制文件中数据文件的位置,以反映Oracle数据库文件新的位置。 通常,使用switch datafile all命令,可以知识Oracle 转换控制文件中所有数据文件位置。 此外switch datafile命令也可以转换特定数据文件的位置。
如果使用set newname for datafile命令但不转换所有还原的数据文件,RMAN 就会将没有转换的数据文件当作数据文件的副本,并且在恢复数据库时RMAN不会尝试使用这些没有转换的数据文件。 示例如:
Startup nomount;
Restore controlfile from autobackup;
Alter database mount;
Run
{
Set newname for datafile 'D:/app/Administrator/oradata/orcl/dave01.dbf' to 'E:/app/Administrator/oradata/orcl/dave01.dbf';
Set newname for datafile 'D:/app/Administrator/oradata/orcl/user01.dbf' to 'E:/app/Administrator/oradata/orcl/user01.dbf';
Restore database;
Recover database noredo;
Alter database open restlogs;
Switch datafile all; -- 修改控制文件中数据文件位置
}
注意的是,如果恢复操作不成功,但是却成功的还原了数据文件,那么还原的数据文件就会成为数据文件副本,并且不会被删除。
五.在ARCHIVELOG 模式中恢复数据库
5.1 故障点数据库恢复
对于故障点(point-of-failure)的恢复,也称为完全数据库恢复,此时必须要求联机重做日志是完整无损的。 如果丢失了联机重做日志,就必须对数据库做不完全恢复。
我们假设联机重做日志和控制文件完整无损,此时我们通过以下步骤来完全恢复数据库:
Shutdown immediate;
Startup mount;
Restore database;
Recover database;
Alter database open;
这种恢复操作比较简单,但是有几点需要注意。 首先,如果某个文件已经存在并且不需要被恢复,Oracle就不会恢复这个文件。 Oracle 会确定要还原的文件是否存在。 如果已存在,并且已有的文件与准备还原的文件相同,RMAN 就不会再次还原这个文件。 如果备份映像上的文件与已有的数据库文件有所不同,RMAN 则会恢复这个文件。 因此,如果丢失了一个或两个数据文件,可能需要执行一个数据文件或表空间恢复操作。
对于任何archivelog 模式还原操作来说,这些步骤都是非常类似的。 恢复目录服务器参数文件和控制文件之后,可以执行restore database命令,使RMAN 开始还原所有的数据库数据文件。注意的是,在这种情况下,由于我们要还原关键的表空间(SYSTEM表空间),所以必须关闭数据库。 尽管可以联机执行多archivelog 模式的还原操作,但是不能联机执行完全时间恢复操作。
一旦还原了数据文件,Oracle 会执行下一条命令(recover database),这条命令通过应用归档的重做日志(执行完全时间点恢复要用的)使ORACLE RDBMS 开始将数据库恢复到故障点。 此外,RMAN 的另一个优点是它可以从磁盘上还原所需要的归档的重做日志,这样就可以在恢复进程中应用这些归档文件的重做日志。一旦完成了恢复,就可以open 数据库。
5.2 表空间恢复
有时候,我们只丢失了某个表空间的数据文件,此时,我们可以选择只恢复这个表空间,而不用恢复整个数据库。 表空间恢复可以在不关闭数据库的情况下进行。 示例:
SQL>Alter tablespace tablespace_name offline;
RMAN>restore tablespace tablespace_name ;
RMAN>recover tablespace tablespace_name ;
SQL>Alter tablespace tablespace_name online;
注意:不能将单个表空间或数据文件还原到与数据库其他部分所处时间点不同的某个时间点。
也可以同时还原多个表空间:
SQL>Alter tablespace tablespace_name1 offline;
SQL>Alter tablespace tablespace_name2 offline;
RMAN>restore tablespace tablespace_name1,tablespace_name2 ;
RMAN>recover tablespace tablespace_name1,tablespace_name2 ;
SQL>Alter tablespace tablespace_name1 online;
SQL>Alter tablespace tablespace_name2 online;
5.3 数据文件恢复
数据文件恢复和表空间恢复很类似,只不过换成数据文件的路径了。这里我们仅替换丢失数据的数据文件,同时保持表空间其余部分的保持联机状态,这样用户任何可以访问这些部分。
补充一点知识:
我们可以通过一下sql 查看file ID和文件的关系。 一般在报错的时候,都会有ID。 这样在恢复的时候也比较方便。
SQL> select file_id,file_name from dba_data_files;
FILE_ID FILE_NAME
---------- ---------------------------------------------------------------------
4 D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF
3 D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF
2 D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF
1 D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF
5 D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF
恢复示例:
SQL>alter database datafile 5 offiline;
SQL>alter database datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF' offline;
RMAN>restore datafile 5;
RMAN>restore datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF';
RMAN>recover datafile 3;
RMAN>recover datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF';
SQL>alter database datafile 3 online;
SQL>alter database datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF' online;
5.4 使用增量备份的恢复操作
Oracle 会在还原数据文件时自动判断是否使用了增量备份策略,还会根据需要自动应用所需的增量备份集。 在这种情况下,不需要执行不同的恢复操作。
使用增量备份的还原操作期间,restore 命令只还原基本备份。一旦完成了这个还原操作,就可以执行recover 命令将增量备份和归档的重做日志应用于数据库。 一旦完成了恢复操作,我们就能正常打开数据库。 在所有情况下,Oracle 都会尝试还原基本备份和最新的增量备份。 这样减少完全恢复数据库所应用的重做日志,从而减少还原时间。
需要注意的是,由于在恢复进程期间,数据库很可能有多个备份集,所以恢复操作的时间会超出我们的预期。 不过,根据多种因素,数据更改速率是一个重要因素,应用增量备份集比应用大量重做日志更快,这种增量备份解决方案就是一个快速的解决方案。 因此,增量备份地优势在于它是一个快速备份的策略并且需要更小的空间来保存备份集片。不过它的代价就是恢复时间有可能会更长。
DBA1 群:62697716(满); DBA2 群:62697977