前面说过的,在非恢复目录(catalog)模式下,rman的备份信息都将存储在目标数据库的控制文件中,所以一旦控制文件丢失,不仅目标数据库崩溃,而且rman备份信息也尽数丢失,这种情况下,如果您有控制文件备份,那还有救(没有备份的话,也并非完全没有希望,如果您对自己的oracle结构非常了解,可以通过写脚本的方式自已重建控制文件。看看oracle是不是考虑的很周全了,很多情况下你认为没救了的时候,也并非完全陷入绝境)。
本章将模拟归档模式下,控制文件丢失情况下的恢复,在本例中,我们仍然借助上节中建立的备份做恢复,大家应该还记的。
在应用备份恢复时,必须知道目标数据库的DBID,有多种方式可查,比如我们创建自动备份时,如果没有更改其命名方式,文件名中会包含DBID;或者查看之前的rman备份日志,其中登陆到rman之后会显示出目标数据库的DBID
sql>select*fromjss.tmp3; COL -------------------------------------------------- test4 test1 test2 test3 sql>shutdownimmediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 sql> hostdel F:\OraHome1\oradata\jssweb\CONTROL *; sql>EXIT; C:\DocumentsandSettings\Administrator>rmantarget/ 恢复管理器:版本9.2.0.1.0-Production Copyright(c)1995,2002,OracleCorporation.Allrightsreserved. 连接到目标数据库:jssweb(未安装) RMAN> setdbid3391142503 ##### 由于目标数据库控制文件丢失,在此处必须指定dbid 正在执行命令:SETDBID RMAN> restorecontrolfilefrom¨d:\backup\C-3391142503-20070718-04¨; ######## 如果打开了自动备份,通过restorecontrolfilefromautobackup也可以 ######## 不过需要 注意 ,因为控制文件没有了,所以rman的配置信息也丢失了,你需要用setcontrolfileautobackupformatfordevicetypediskto¨d:\backup\%F¨;命令重设一个自动备份的控制文件所在路径。 启动restore于18-7月-07 使用通道ORA_DISK_1 通道ORA_DISK_1:正在恢复控制文件 通道ORA_DISK_1:恢复完成 正在复制控制文件 输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL01.CTL 输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL02.CTL 输出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL03.CTL 完成restore于18-7月-07 RMAN> sql¨alterdatabasemount¨; ####### 控制文件已恢复,将目标数据库置为加载状态 正在使用目标数据库控制文件替代恢复目录 sql 语句:alterdatabasemount RMAN> restoredatabase; ######## 修复数据库 启动restore于18-7月-07 分配的通道:ORA_DISK_1 通道ORA_DISK_1:sid=12devtype=DISK 通道ORA_DISK_1:正在开始恢复数据文件备份集 通道ORA_DISK_1:正在指定从备份集恢复的数据文件 正将数据文件00001恢复到F:\ORAHOME1\ORADATA\JSSWEB\SYSTEM01.DBF 正将数据文件00002恢复到F:\ORAHOME1\ORADATA\JSSWEB\UNDOTBS01.DBF 正将数据文件00003恢复到F:\ORAHOME1\ORADATA\JSSWEB\DRSYS01.DBF 正将数据文件00004恢复到F:\ORAHOME1\ORADATA\JSSWEB\EXAMPLE01.DBF 正将数据文件00005恢复到F:\ORAHOME1\ORADATA\JSSWEB\INDX01.DBF 正将数据文件00006恢复到F:\ORAHOME1\ORADATA\JSSWEB\ODM01.DBF 正将数据文件00007恢复到F:\ORAHOME1\ORADATA\JSSWEB\TOOLS01.DBF 正将数据文件00008恢复到F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF 正将数据文件00009恢复到F:\ORAHOME1\ORADATA\JSSWEB\XDB01.DBF 正将数据文件00010恢复到F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA 通道ORA_DISK_1:已恢复备份段1 段handle=D:\BACKUP\1AIN4JU5_1_1tag=TAG20070718T092837params=NULL 通道ORA_DISK_1:恢复完成 完成restore于18-7月-07 RMAN> recoverdatabase; ######## 恢复数据库 启动recover于18-7月-07 使用通道ORA_DISK_1 正在开始介质的恢复 存档日志线程1序列7已作为文件F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG存在于 盘上 存档日志线程1序列8已作为文件F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG存在于 盘上 存档日志线程1序列9已作为文件F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG存在于 盘上 通道ORA_DISK_1:正在启动到默认目标的存档日志恢复 通道ORA_DISK_1:正在恢复存档日志 存档日志线程=1序列=5 通道ORA_DISK_1:已恢复备份段1 段handle=D:\BACKUP\1BIN4K16_1_1tag=TAG20070718T093014params=NULL 通道ORA_DISK_1:恢复完成 存档日志文件名=F:\ORAHOME1\RDBMS\ARC00005.001线程=1序列=5 存档日志文件名=F:\ORAHOME1\RDBMS\ARC00006.001线程=1序列=6 存档日志文件名=F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG线程=1序列=7 存档日志文件名=F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG线程=1序列=8 存档日志文件名=F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG线程=1序列=9 完成介质的恢复 完成recover于18-7月-07 RMAN> sql¨alterdatabaSEOpenresetlogs¨; ###### 由于使用备份的控制文件恢复,该文件内不包含目标数据库redologs和数据文件头部scn信息,所以必须通过resetlogs方式open。 sql 语句:alterdatabaSEOpenresetlogs RMAN>host; MicrosoftWindows[ 版本5.2.3790] (C) 版权所有1985-2003MicrosoftCorp. C:\DocumentsandSettings\Administrator>sqlplusjss/jss sql*Plus:Release9.2.0.1.0-Productionon 星期三7月1817:40:282007 Copyright(c)1982,OracleCorporation.Allrightsreserved. 连接到: Oracle9iEnterpriseEditionRelease9.2.0.1.0-Production WiththePartitioning,OLAPandOracleDataMiningoptions JServerRelease9.2.0.1.0-Production sql>select*fromtmp3; COL -------------------------------------------------- test4 test1 test2 test3 ####### 成功恢复,数据也没有丢失 sql>exit 从Oracle9iEnterpriseEditionRelease9.2.0.1.0-Production WiththePartitioning,OLAPandOracleDataMiningoptions JServerRelease9.2.0.1.0-Production 中断开 C:\DocumentsandSettings\Administrator>exit 主机命令完成 RMAN>
注意,恢复之后表忘了重建临时表空间。另外,由于resetlogs,建议立即对数据库进行一次完全备份。