一.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>showall;
CONFIGURECONTROLFILEAUTOBACKUPON;--该参数默认是关闭的
RMAN>backupdatabase;
......
启动ControlFileandSPFILEAutobackup于25-6月-10
段handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_25/O1
_MF_S_722604317_6288DYQF_.BKPcomment=NONE
完成ControlFileandSPFILEAutobackup于25-6月-10
配置控制文件和参数文件的自动备份时的一些规则:
(1)在RUN程序块之外执行每个RMAN的backup或者copy命令时,都会自动备份控制文件和参数文件。
(2)使用使用了RUN程序块,而且该程序块的最后一个命令不是backup或者copy,在RUN程序块结尾处会备份控制文件和参数文件。
除了上面2种自动控制文件备份类型,我们还可以配置另一种特殊的控制文件备份类型。该类型发生在数据库变化时,这些变化包括添加新的表空间,添加数据文件,添加联机重做日志等。这些自动备份类型只在磁盘上发生,使用configurecontrolfileautobackup命令的特殊选项可以简化备份。如:
Configurecontrolfileautobackupformatfordevicetypediskto'd:/backup/sid_%F';
使用了该选项,RDBMS会在数据结构的变化控制文件产生影响时自动备份控制文件。强调一点,只支持磁盘。
手动的备份控制文件
Alterdatabasebackupcontrolfileto'd:/backup/orcl_backup.ctl';
手工备份spfile:
RMAN>backupspfile;
启动ControlFileandSPFILEAutobackup于26-6月-10
段handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1
_MF_S_722706435_62CD44SN_.BKPcomment=NONE
完成ControlFileandSPFILEAutobackup于26-6月-10
2.1还原服务器参数文件
2.1.1使用RMAN(不使用FRA)从自动备份中恢复服务器参数文件
ORACLE会默认地在$ORACLE_HOME/dbs或者$ORACLE_HOME/DATABASE目录中创建服务器参数文件与控制文件。
还原服务器参数文件的一般过程是先设置ORACLE_SID和登陆RMAN,然后设置DBID,使RMAN知道需要查找哪一个数据库的服务器参数文件,还必须在这个操作的同时启动数据库实例。
启动数据库实例后,如果使用默认的位置来存储控制文件的自动备份,就可以简单的执行:Restorespfilefromautobackup,这样RMAN就可以查找包含最新服务器参数备份的控制文件备份集。一旦恢复了服务器参数文件,就必须关闭重启数据库实例。如果使用的是非默认位置,就需要分配一个指向该位置的通道,然后在使用相同的方法来还原服务器参数文件。
执行restorespfilefromautobackup命令时,Oracle会在默认位置中(或者在使用allocatechannel命令定义的为位置中)查找自动的控制文件备份集。RMAN创建控制文件自动备份片时,会使用默认的命名约定:C-DBID-DATE-序列号。如:C-1247395743-2010627-00。注意的是,这种命名规则不适用于FRA。
需要注意的是,如果没有使用恢复目录(并且没有使用控制文件,这是可能的),Oracle就不知道最新控制文件备份片的名称,因此Oracle会基于这些备份集的默认命名标准来构造控制文件备份片的名称。Oracle会遍历整个目录,向后查找数据库的控制文件备份集。在默认情况下,Oracle会查找一个在过去10天内创建的控制文件备份集。如果Oracle美欧查找到指定时间周期内创建的控制文件备份集,就会产生一个错误。如果Oracle发现一个有效的控制文件备份集,就会为用户还原服务器参数文件。
使用restore命令的maxseq和maxdays参数可以修改RMAN向后查找控制文件自动备份的时间周期。
使用默认设置的示例:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
restorespfilefromautobackup;
shutdownimmediate;
不使用默认设置的示例:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
setcontrolfileautobackupformatfordevicetypediskto'f:/backup/%f';
allocatechannelc1devicetypedisk;
restorespfilefromautobackup;
}
shutdownimmediate;
使用maxseq和maxdays参数在超过默认天数(10天)的时间周期内向后查找控制文件备份集:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
setcontrolfileautobackupformatfordevicetypediskto'f:/backup/%f';
allocatechannelc1devicetypedisk;
restorespfilefromautobackupmaxseq200maxdays1000;
}
shutdownimmediate;
将参数文件还原到不同的位置和文件中的示例(假定数据库正在启动和运行):
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
restorespfileto'f:/backup/spfile.restore'fromautobackup;
shutdownimmediate;
2.1.2使用RMAN和FRA从自动备份中恢复服务器参数文件
使用FRA恢复参数文件比不使用FRA简单。首先,我们不需要担心DBID没有意义,也不用操心分配通道的工作,这就节省了一定的时间。恢复服务器参数文件时,我们只需要正确配置临时参数文件(确保适当的设置FRA目标目录),启动ORACLE实例,并且执行restorespfile命令。
setoracle_sid=orcl
rmantargetsys/pwd
startupnomount;
restorespfilefromautobackup;
shutdownimmediate;
2.1.3从特定的备份集中恢复服务器参数文件
在Oracle10g中,restore命令包含了一个frombackup子句,使用该子句可以指示包含服务器参数文件的备份的备份集片。因此,只需要知道该备份集片的名称和它的位置,就可以还原服务器参数文件。在某些情况下,查找包含服务器参数文件备份的备份集片可能存在一些困难,但一旦找到了该备份集片,还原工作就会非常简单,当然,最好还原最新的控制文件备份。
为了还原服务器参数文件,首先要启动数据库实例并标识包含服务器参数文件备份的备份集片(或者进行猜测)。接着启动RMAN,然后设置数据库饿DBID。一旦设置了DBID,就需要分配通道给要还原的设备。分配通道后,执行restorespfile命令,在命令的末尾传入备份集片的名称。于是RMAN将服务器参数还原到正确的位置。
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
allocatechannelc1devicetypedisk;
restorespfilefrom'f:/backup/c-1247395743-2010627-00';
}
shutdownimmediate;
2.1.4使用恢复目录恢复服务器参数文件
如果使用了恢复目录,在启动(未加载)ORACLE实例后简单执行restorespfile命令就可以还原最新的服务器参数文件。RMAN会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
setoracle_sid=orcl
rmantargetsys/pwdcataloguser/pwd@sid
startupnomount;
restorespfilefromautobackup;
shutdownimmediate;
2.1.5使用联机操作的数据库还原备份的服务器参数文件
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取服务器参数文件的副本是非常容易的。我们应当注意到这个操作会生成一个文本参数文件,而不是生成一个服务器参数文件。因此如果要将这个文本参数文件用作服务器参数文件,就必须转换该文件。
如果不是使用恢复目录并且控制文件的自动备份已经启动,只需要执行下面的命令:
RMAN>RESTORESPFILETOPFILE'D:/BAKCUP/ORCL.ORA'FROMAUTOBACKUP;
对于任何自动备份的还原操作来说,如果不提供maxseq和maxdays参数值,RMAN只需要查找过去7天内生成的控制文件的自动备份片。
如果没有使用恢复目录与控制文件自动备份,或者是在使用恢复目录,就可以执行:
RMAN>RESTORESPFILETOPFILE'D:/BACKUP/ORCL.ORA';
这种情况下,Oracle会使用数据库控制文件找到最新的备份集,并从这个备份集中还原服务器参数文件。
2.2还原控制文件
2.2.1使用RMAN(不使用FRA)从自动备份中恢复控制文件
ORACLE会默认地在$ORACLE_HOME/dbs或者$ORACLE_HOME/DATABASE目录中创建服务器参数文件与控制文件。
假设已经还原了实例参数文件和启动了实例,还原控制文件时,一般过程是先设置ORACLE_SID和登陆RMAN,然后设置DBID,使RMAN知道需要查找哪一个数据库的控制文件。
如果使用默认的位置来存储控制文件的自动备份,就可以简单的执行:Restorecontrolfilefromautobackup,这样RMAN就可以查找包含最新控制文件的控制文件备份集。一旦恢复了控制文件,就必须关闭重启数据库实例。如果使用的是非默认位置,就需要分配一个指向该位置的通道,然后在使用相同的方法来还原控制文件。
执行restorecontrolfilefromautobackup命令时,Oracle会在默认位置中(或者在使用allocatechannel命令定义的为位置中)查找自动的控制文件备份集。通过DBID,RMAN使用这个DBID在包含控制文件备份的目录中查找数据库的最新控制文件备份集。通过应用restore命令的maxseq和maxdays参数,可以修改RMAN查找控制文件自动备份的时间周期。
使用默认设置的示例:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
restorecontrolfilefromautobackup;
shutdownimmediate;
不使用默认设置的示例:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
setcontrolfileautobackupformatfordevicetypediskto'f:/backup/%f';
allocatechannelc1devicetypedisk;
restorespfilefromautobackup;
}
shutdownimmediate;
使用maxseq和maxdays参数在超过默认天数(10天)的时间周期内向后查找控制文件备份集:
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
setcontrolfileautobackupformatfordevicetypediskto'f:/backup/%f';
allocatechannelc1devicetypedisk;
restorecontrolfilefromautobackupmaxseq200maxdays1000;
}
shutdownimmediate;
将参数文件还原到不同的位置和文件中的示例(假定数据库正在启动和运行):
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
restorecontrolfileto'f:/backup/ctl.restore'fromautobackup;
shutdownimmediate;
2.2.2使用RMAN和FRA从自动备份中恢复控制文件
使用FRA恢复控制文件过程非常简单,首先确保FRA位置参数被正确设置。然后启动实例,执行:restorecontrolfilefromautobackup;
setoracle_sid=orcl
rmantargetsys/pwd
startupnomount;
restorecontrolfilefromautobackup;
shutdownimmediate;
也可以使用maxseq和maxdays参数进行设置:
Restorecontrolfilefromautobackupmaxseq200maxdays100;
2.2.3恢复较早的控制文件备份
有时候,可能需要恢复一段时间以前建立的控制文件备份,因而控制文件不是来自于最新的备份(执行resetlogs通常是这样)。结合untiltime参数,restorecontrolfilefromautobackup命令可以实现这一操作。如:
Restorecontrolfilefromautobackupuntiltime"to_date('2010-6-2713:25:00','yyyy-mm-ddhh24:mi:ss')";
如果要使用这个命令,就需要知道哪些控制文件备份可以用于操作。可以使用listbackupofcontrolfile命令确定哪些备份控制文件可以用于还原操作。
RMAN>listbackupofcontrolfile;
备份集列表
===================
BS关键字类型LV大小设备类型经过时间完成时间
--------------------------------------------------------
113Full16.00MSBT_TAPE00:00:0518-6月-10
BP关键字:116状态:AVAILABLE已压缩:NO标记:TAG20100618T085926
句柄:07lghd6e_1_1介质:/,07lghd6e_1_1
包括的控制文件:CkpSCN:1403939Ckp时间:18-6月-10
BS关键字类型LV大小设备类型经过时间完成时间
--------------------------------------------------------
558Full9.52MDISK00:00:0226-6月-10
BP关键字:560状态:AVAILABLE已压缩:NO标记:TAG20100626T154715
段名:D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/AUTOBACKUP/2010_06_26/O1_MF_S
_722706435_62CD44SN_.BKP
包括的控制文件:CkpSCN:7992586Ckp时间:26-6月-10
RMAN>
2.2.4从备份集中恢复控制文件
在Oracle10g中,restore有frombackup子句,使用该子句可以指示包含控制文件备份的备份集。因此只需要知道了该备份集片的名称和它的位置,就可以还原控制文件。
为了还原控制文件,首先设置数据库的实例并标识包含控制文件备份的备份集(或者进行猜测)。接着启动RMAN,然后设置数据库的DBID。设置完后就需要分配通道给要还原的设备,分配通道后,执行restorecontrolfilefrom命令,就可还原控制文件并复制到不同的control_file参数位置。
setoracle_sid=orcl
rmantargetsys/pwd
setdbid=1247395743
startupnomount;
run
{
allocatechannelc1devicetypedisk;
restorecontrolfilefrom'F:/BACKUP/ORCL_0OLGTB96_1_1.BAK';
}
shutdownimmediate;
2.2.5使用恢复目录恢复控制文件
使用恢复目录,可以简单的执行restorecontrolfile命令,还原最新的控制文件,RMAN会使用恢复目录找出最新的控制文件备份,并析取这个备份以供用户使用。
Setoracle_sid=orcl
Rmantargetsys/pwdcataloguser/pwd@sid;
Startupnomount;
Restorecontrolfile;
Alterdatabasemount;
2.2.6还原控制文件后的数据库恢复
当使用RMAN还原控制文件(并且没有丢失数据文件和联机重做日志),有两件事要考虑:首先,要考虑在还原控制文件后如何启动和运行数据库,其实,要恢复与RMAN相关的信息,如使用RMAN在新创建的控制文件中注册归档的重做日志和备份集。
2.2.6.1在恢复控制文件后打开数据库
如果只丢失了控制文件,那么恢复控制文件和数据库就非常容易。恢复控制文件的命令是相同的,只需要模拟一个不完全恢复操作以打开数据库。
Noarchivelog模式,恢复方法
setoracle_sid=orcl
Rmantargetsys/pwd;
setdbid=1247395743
startupnomount;
Restorecontrolfilefromautoback;
Alterdatabasemount;
Recoverdatabasenoredo;
Alterdatabaseopenresetlogs;
Archivelog模式,恢复方法
setoracle_sid=orcl
Rmantargetsys/pwd;
setdbid=1247395743
startupnomount;
Restorecontrolfilefromautoback;
Alterdatabasemount;
Recoverdatabase;
Alterdatabaseopenresetlogs;
当然,丢失其他物理文件可能会使这种恢复操作变得复杂。此外,如果没有最近的控制文件备份,则操作就变得非常复杂,并且可能最终需要使用createcontrolfile命令重建控制文件。
Oracle控制文件
http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4974440.aspx
2.2.6.2还原控制文件中RMAN相关的记录
一旦还原了控制文件,就需要考虑丢失RMAN相关数据的可能性。由于RMAN将所有数据存储在控制中,很有可能至少丢失与归档的重做日志相关的一些记录(Oracle需要完全恢复归档的重做日志)。
RMAN简化了这个问题的处理,因为可以在还原控制文件后注册各种RMAN相关的备份文件,从而确保控制文件中有恢复所需的全部文件。为了重建RMAN相关的归档重做日志记录,可以使用catalog命令来在控制文件中注册归档重做日志。Catalog命令可用于注册特定的备份集片。如:
RMAN>catalogbackuppiece'F:/BACKUP/ORCL_11LH4449_1_1.BAK';
也可以对归档的重做日志编目录:
RMAN>catalogarchivelog'D:/archivelog/ORCL_1_102_719615012.ARC';
如果每天生成太多的redolog,采用这种方法就很麻烦。RMAN可以对整个目录编目录,而不需要列出单个文件,只要再次使用catalog命令及以下的一个关键字即可:
(1)recoveryarea或者db_recovery_file_dest
(2)Startwith
recoveryarea和db_recovery_file_dest功能相同,他们是RMAN对整个FRA编目录,如果RMAN发现已经对一些文件编目录,它就会跳过这些文件并继续对控制文件中的剩余文件编目录。如:
RMAN>catalogrecoveryarea;
如果没有使用FRA,则可以使用startwith语法。该语法允许遍历非FRA备份目录并且对包含该目录以及该目录下任何子目录中的所有RMAN相关文件编目录。如:
RMAN>catalogswartwith'D:/archivelog';
2.2.7联机还原控制文件
不管是否使用控制文件或恢复目录,在数据库启动时从数据库备份中析取控制文件的副本是非常容易的。如果不使用恢复目录且控制文件的自动波备份可用,只需要执行下面的命令即可:
RMAN>restorecontrolfileto'd:/backup/'fromautobackup;
执行这条命令会在D:/backup目录中将控制文件还原为test.ora文件。对于任何自动备份的还原操作来说,RMAN只会查找过去7天内生成的控制文件自动备份片。我们可以使用maxseq和maxdays参数修改这个默认的时间周期。
如果没有使用恢复目录与控制文件的自动备份,或者使用了恢复目录,可以执行下面的命令:
RMAN>restorecontrolfileto'd:/backup';
在这种情况下,Oracle会使用数据库的控制文件找到最新的备份集,并从这个备份集还原控制文件。当然,使用dbms_backup_restore过程来手工还原控制文件。
三.Restore和recover命令
3.1RESTORE命令
虽然store命令有一些辅助目标,但其主要功能是从RMAN备份中还原文件,为恢复做准备。RMAN和restore命令非常只能,他们将选择最近的备份来进行还原,从而减少恢复时间。其结果是,restore命令可能从备份集中还原数据文件,也可能从映像副本中还原数据文件,或者两者并用来进行还原,只要对加快还原过程有帮助即可。
Restore命令用于从自动的备份中还原服务器参数文件和控制文件。Restore命令也可用于创建备份数据库的备用控制文件。也可以用restore命令来将数据库还原到任何时间点。在这种情况下,该命令将查找离给定时间点最近的备份以进行还原。如果没有恢复目录,RMAN可以在数据库的对应物中将数据库还原到任何时间点(假设备份可用)。Restore命令也可将从前面的对应物中还原数据库,但需要建立对应物期间备份控制文件。如果使用恢复目录,接可以将数据库还原到任何对应物。
Restore命令也可根据分配给备份的给定标记还原特定的备份。如果开发环境中存在需要经常用于还原的“黄金”备份,这种还原方式就非常有用。如果需要归档的重做日志,restore命令也可用于还原归档的重做日志。
此外,restore命令可用于验证实际恢复数据的能力。这将确保备份可用于还原数据库,并且可以验证这些备份的完整性。也可以使用restorepreview命令标识还原数据库所需要的备份。
使用restore命令时,如果备份加密,则需要确保加密方法的正确配置。如果使用透明模式的加密,相应的电子皮夹必须可用。
使用restore命令时,该命令会在没有认识提示的情况下重写已经存在的任何文件,除非使用setnewname命令。由于这一点,在还原文件时必须非常小心,并且确保重写已经存在的文件不会产生任何不利的影响。
Restore命令也具有故障恢复功能。在恢复期间,如果RMAN发现给定的备份文件不可用或者已被破坏,他就会自动尝试使用前面的备份来完成修复过程。进行故障恢复时,RMAN会在数据库警报日志中添加一条相应的信息。
3.2RECOVER命令 recover命令用于恢复数据库。该命令可以执行数据库的完全恢复或者时间点恢复。Recover命令确定需要哪些归档的重做日志,并且析取和应用他们。一旦完成重做的应用,我们就只需要使用alterdatabaseopen命令打开数据库即可。
Recover命令也用于判断是否存在可用的增量备份映像。这些映像可应用与基本增量备份或数据文件映像副本。Recover命令总是尝试首先增量备份,因为这将是还原数据库最快的方法。
还原归档的重做日志时,recover命令尝试使用磁盘上已有的重做日志。如果磁盘上没有可用的重做日志,recover就会尝试从各种格挡的重做日志备份集中还原他们。注意,可以使用recover命令中的noredo参数来指示rman不应该尝试将重做日志应用于数据库。
四.在Noarchivelog模式中还原与恢复数据库
如果数据库在noarchivelog模式下,我们将从完全的脱机备份中恢复这个数据库,并且不可能实现时间点恢复。
4.1还原的准备工作
如果在noarchivelog模式中运行数据库并且假定拥有数据库的一个备份,就可以非常容易地执行数据库的完全恢复。首先要清理所有的数据文件,以及旧的重做日志和控制文件。虽然不是一定要这么做,但由于使用了noarchivelog模式,我们希望一切从头开始。
清理完数据文件,控制文件和重做日志后,就可以开始启动恢复进程。首先,可以从最近生成的备份中恢复控制文件,或者可以使用在某个时间点(备份完成后的时间内)创建的备份控制文件。如果使用createcontrolfile命令,就需要在还原数据库之前把与RMAN备份相关的文件编程目录。
如果恢复了服务器参数文件和控制文件,就可以忽视使用恢复目录和不使用恢复目录之间的差异。因此,我们只介绍不使用恢复目录的恢复操作。此外,使用FRA和不使用FRA的恢复操作也没有很大区别。
恢复操作的RMAN命令如下:
Startupmount;
Restoredatabase;
Recoverdatabasenoredo;--如果联机日志存在,可以用recoverdatabase代替
Alterdatabaseopenresetlogs;
这里假定已经恢复了服务器参数文件和数据库控制文件。第一条命令startupmount加载数据库,因此Orace会读取准备用于数据库还原操作的控制文件。第二条命令restoredatabase将使RMAN启动数据库的还原操作。第三条命令指示RMAN执行最后的恢复操作以准备打开这个数据库。由于是noarchivelog模式,并且不应用任何归档的重做日志并且丢失了联机重做日志,所以在这条命令中使用noredo参数。如果存在完整的联机重做日志,就不需要使用noredo参数。最后,使用alterdatabaseopenresetlogs命令打开这个数据库。由于已经还原了控制文件,并且需要重新构建联机重做日志,所以必须使用resetlogs命令。
Resetlogs表示一个数据库逻辑生命周期的结束与另一个逻辑生命周期的开始,使用resetlogs后,SCN不会被重置,但是会重置日志序列号,重置redolog。以防止不完全恢复后日志序列发生冲突。
4.2从旧备份中还原数据库
有事,我们可能需要还原多个备份,并且想要从最新备份之外的某些备份中恢复数据库。在这种情况下,需要使用set命令和其他还原进程。下面是实现比默认备份更早的备份中还原数据库:
Startupmount;
Run
{
Setuntiltime"to_date('2010-6-2817:04:00','yyyy-mm-ddhh24:mi:ss')";
Restoredatabase;
Recoverdatabasenoredo;
Alterdatabaseopenresetlogs;
}
这里的setuntiltime命令被限定在run代码块中。如果要使用setuntiltime命令,就必须满足这个要求。我们设定的时间是2010-6-2817:04:00,Oracle会查找最接近但是不会超过这个设置值的时间生成备份。如果说在6-28日生成了3个备份。分别是8点,18点,22点。那么RMAN会选择18点的备份。
如果不使用run代码块,就必须在restore命令中设置时间限制:
Startupmount;
Restoredatabaseuntiltime"to_date('2010-6-2817:04:00','yyyy-mm-ddhh24:mi:ss')";
Recoverdatabasenoredo;
Alterdatabaseopenresetlogs;
4.3在不同的位置上还原数据库
我们并不是总是希望将数据库还原到Oracle文件的原始文件位置。例如,在一个灾难恢复练习中,我们可以将数据库恢复到一个大的文件系统中。
RMAN默认将数据文件还原到备份时数据文件所在的原始位置。如果想更换位置,输入setnewnamefordatafile和switch命令即可。如:
Setnewnamefordatafile'D:/app/Administrator/oradata/orcl/dave01.dbf'to'E:/app/Administrator/oradata/orcl';
这里定义的是数据文件的原始位置和RMAN应当将文件复制到新的位置。一旦对所有要还原到不同位置的数据文件都执行了setnewnamefordatafile命令,就可以使用restore和recover命令。最后,在打开数据库之前,必须告诉Oracle以后永久的使用已还原,重定位的数据文件。这里我们使用swithch命令就可以。
Switch命令可以修改数据库控制文件中数据文件的位置,以反映Oracle数据库文件新的位置。通常,使用switchdatafileall命令,可以知识Oracle转换控制文件中所有数据文件位置。此外switchdatafile命令也可以转换特定数据文件的位置。
如果使用setnewnamefordatafile命令但不转换所有还原的数据文件,RMAN就会将没有转换的数据文件当作数据文件的副本,并且在恢复数据库时RMAN不会尝试使用这些没有转换的数据文件。示例如:
Startupnomount;
Restorecontrolfilefromautobackup;
Alterdatabasemount;
Run
{
Setnewnamefordatafile'D:/app/Administrator/oradata/orcl/dave01.dbf'to'E:/app/Administrator/oradata/orcl/dave01.dbf';
Setnewnamefordatafile'D:/app/Administrator/oradata/orcl/user01.dbf'to'E:/app/Administrator/oradata/orcl/user01.dbf';
Restoredatabase;
Recoverdatabasenoredo;
Alterdatabaseopenrestlogs;
Switchdatafileall;--修改控制文件中数据文件位置
}
注意的是,如果恢复操作不成功,但是却成功的还原了数据文件,那么还原的数据文件就会成为数据文件副本,并且不会被删除。
五.在ARCHIVELOG模式中恢复数据库
5.1故障点数据库恢复
对于故障点(point-of-failure)的恢复,也称为完全数据库恢复,此时必须要求联机重做日志是完整无损的。如果丢失了联机重做日志,就必须对数据库做不完全恢复。
我们假设联机重做日志和控制文件完整无损,此时我们通过以下步骤来完全恢复数据库:
Shutdownimmediate;
Startupmount;
Restoredatabase;
Recoverdatabase;
Alterdatabaseopen;
这种恢复操作比较简单,但是有几点需要注意。首先,如果某个文件已经存在并且不需要被恢复,Oracle就不会恢复这个文件。Oracle会确定要还原的文件是否存在。如果已存在,并且已有的文件与准备还原的文件相同,RMAN就不会再次还原这个文件。如果备份映像上的文件与已有的数据库文件有所不同,RMAN则会恢复这个文件。因此,如果丢失了一个或两个数据文件,可能需要执行一个数据文件或表空间恢复操作。
对于任何archivelog模式还原操作来说,这些步骤都是非常类似的。恢复目录服务器参数文件和控制文件之后,可以执行restoredatabase命令,使RMAN开始还原所有的数据库数据文件。注意的是,在这种情况下,由于我们要还原关键的表空间(SYSTEM表空间),所以必须关闭数据库。尽管可以联机执行多archivelog模式的还原操作,但是不能联机执行完全时间恢复操作。
一旦还原了数据文件,Oracle会执行下一条命令(recoverdatabase),这条命令通过应用归档的重做日志(执行完全时间点恢复要用的)使ORACLERDBMS开始将数据库恢复到故障点。此外,RMAN的另一个优点是它可以从磁盘上还原所需要的归档的重做日志,这样就可以在恢复进程中应用这些归档文件的重做日志。一旦完成了恢复,就可以open数据库。
5.2表空间恢复
有时候,我们只丢失了某个表空间的数据文件,此时,我们可以选择只恢复这个表空间,而不用恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行。示例:
SQL>Altertablespacetablespace_nameoffline;
RMAN>restoretablespacetablespace_name;
RMAN>recovertablespacetablespace_name;
SQL>Altertablespacetablespace_nameonline;
注意:不能将单个表空间或数据文件还原到与数据库其他部分所处时间点不同的某个时间点。
也可以同时还原多个表空间:
SQL>Altertablespacetablespace_name1offline;
SQL>Altertablespacetablespace_name2offline;
RMAN>restoretablespacetablespace_name1,tablespace_name2;
RMAN>recovertablespacetablespace_name1,tablespace_name2;
SQL>Altertablespacetablespace_name1online;
SQL>Altertablespacetablespace_name2online;
5.3数据文件恢复
数据文件恢复和表空间恢复很类似,只不过换成数据文件的路径了。这里我们仅替换丢失数据的数据文件,同时保持表空间其余部分的保持联机状态,这样用户任何可以访问这些部分。
补充一点知识:
我们可以通过一下sql查看fileID和文件的关系。一般在报错的时候,都会有ID。这样在恢复的时候也比较方便。
SQL>selectfile_id,file_namefromdba_data_files;
FILE_IDFILE_NAME
-------------------------------------------------------------------------------
4D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF
3D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF
2D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF
1D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF
5D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF
恢复示例:
SQL>alterdatabasedatafile5offiline;
SQL>alterdatabasedatafile'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF'offline;
RMAN>restoredatafile5;
RMAN>restoredatafile'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF';
RMAN>recoverdatafile3;
RMAN>recoverdatafile'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF';
SQL>alterdatabasedatafile3online;
SQL>alterdatabasedatafile'D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF'online;
5.4使用增量备份的恢复操作
Oracle会在还原数据文件时自动判断是否使用了增量备份策略,还会根据需要自动应用所需的增量备份集。在这种情况下,不需要执行不同的恢复操作。
使用增量备份的还原操作期间,restore命令只还原基本备份。一旦完成了这个还原操作,就可以执行recover命令将增量备份和归档的重做日志应用于数据库。一旦完成了恢复操作,我们就能正常打开数据库。在所有情况下,Oracle都会尝试还原基本备份和最新的增量备份。这样减少完全恢复数据库所应用的重做日志,从而减少还原时间。
需要注意的是,由于在恢复进程期间,数据库很可能有多个备份集,所以恢复操作的时间会超出我们的预期。不过,根据多种因素,数据更改速率是一个重要因素,应用增量备份集比应用大量重做日志更快,这种增量备份解决方案就是一个快速的解决方案。因此,增量备份地优势在于它是一个快速备份的策略并且需要更小的空间来保存备份集片。不过它的代价就是恢复时间有可能会更长。
整理自《Oracle10gRMAN备份与恢复》
------------------------------------------------------------------------------
Blog:http://blog.csdn.net/tianlesoftware
网上资源:http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1群:62697716(满);DBA2群:62697977