当未使用Catalog方式进行RMAN备份时,将备份集转移到其他主机时,除非目录结构相同,否则控制文件将无法识别路径不同的备份集,针对这类问题,可以使用dbms_backup_restore包进行文件回复;但是从Oracle 10g开始,Oracle终于简化了这类问题的处理,现在通过RMAN就可以很容易地处理不同主机的RMAN备份集恢复。
通过以下实例来看一下Oracle的这一新特性增强。
首先备份源数据库,并以这个备份做为恢复的基础:
RMAN> backup database plus archivelog;
启动 backup 于 23-4月 -07
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
通道 ORA_DISK_1: 正在启动段 1 于 23-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 23-4月 -07
段句柄=D:\FRA\EYGLE\2007_04_23\O1_MF_ANNNN_TAG20070423T142748_32RNH7PN_.BKP 标记=TAG20
070423T142748 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 23-4月 -07
启动 backup 于 23-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=D:\ORADATA\EYGLE\DATAFILE\O1_MF_SYSTEM_2G8OHFX6_.DBF
输入数据文件 fno=00002 name=D:\ORADATA\EYGLE\DATAFILE\O1_MF_UNDOTBS1_2G8OJ6NB_.DBF
输入数据文件 fno=00003 name=D:\ORADATA\EYGLE\DATAFILE\O1_MF_SYSAUX_2G8OJHP9_.DBF
输入数据文件 fno=00004 name=D:\ORADATA\EYGLE\DATAFILE\O1_MF_USERS_2G8OJYYS_.DBF
通道 ORA_DISK_1: 正在启动段 1 于 23-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 23-4月 -07
段句柄=D:\FRA\EYGLE\2007_04_23\O1_MF_NNNDF_TAG20070423T142753_32RNHCYN_.BKP 标记=TAG20
070423T142753 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:36
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 23-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 23-4月 -07
段句柄=D:\FRA\EYGLE\2007_04_23\O1_MF_NCSNF_TAG20070423T142753_32RNLG77_.BKP 标记=TAG20
070423T142753 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:06
完成 backup 于 23-4月 -07
启动 backup 于 23-4月 -07
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =8 记录 ID=20 时间戳=620663381
通道 ORA_DISK_1: 正在启动段 1 于 23-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 23-4月 -07
段句柄=
D:\FRA\EYGLE\2007_04_23\O1_MF_ANNNN_TAG20070423T142941_32RNLQVC_.BKP 标记=TAG20
070423T142941 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 23-4月 -07
再备份控制文件:
RMAN> backup current controlfile;
启动 backup 于 23-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
通道 ORA_DISK_1: 正在启动段 1 于 23-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 23-4月 -07
段句柄=D:\FRA\EYGLE\2007_04_23\O1_MF_NCNNF_TAG20070423T143224_32RNQT90_.BKP 标记=TAG20
070423T143224 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 23-4月 -07
然后生成源数据库的参数文件,修改后传送至目标数据库,修改后的参数文件可以用于数据库启动,主要修改的参数应该包括:* _dump_dest、control_files、db_recovery_file_dest、db_create_file_dest等。
在Windows平台下,可以通过oradim创建一个服务启动Oracle环境:
C:\>oradim -new -sid julia
实例已创建。
然后可以通过RMAN来启动数据库到nomount状态:
C:\>set oracle_sid=julia
C:\>rman target /
恢复管理器: Release 10.2.0.1.0 - Production on 星期一 4月 23 14:35:32 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount;
Oracle 实例已启动
系统全局区域总计 289406976 字节
Fixed Size 1248600 字节
Variable Size 92275368 字节
Database Buffers 192937984 字节
Redo Buffers 2945024 字节
通过备份的控制文件恢复出控制文件:
RMAN> restore controlfile to
2> 'E:\ORADATA\JULIA\CONTROLFILE\1.CTL'
3> from
4> 'E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NCNNF_TAG20070423T143224_32RNQT90_.BKP';
启动 restore 于 23-4月 -07
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:05
完成 restore 于 23-4月 -07
有了控制文件之后,数据库可以被加载:
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
注意:前面恢复出来的控制文件位置及名称取决于你在参数文件中的设置。
关键的步骤是向控制文件中加载备份集,这是Oracle 10g新增加的特性,通过Catalog Start With命令,Oracle可以搜索制定目录中的备份文件,并将这些备份文件加入控制文件,从而使得从这些文件的恢复成为可能:
RMAN> catalog start with 'e:\oradata\backupset';
启动 implicit crosscheck backup 于 23-4月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
已交叉检验的 4 对象
完成 implicit crosscheck backup 于 23-4月 -07
启动 implicit crosscheck copy 于 23-4月 -07
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 23-4月 -07
搜索恢复区域中的所有文件
正在编制文件目录...
没有为文件编制目录
搜索与样式 e:\oradata\backupset 匹配的所有文件
数据库未知文件的列表
=====================================
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142748_32RNH7PN_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142941_32RNLQVC_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NCNNF_TAG20070423T143224_32RNQT90_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NCSNF_TAG20070423T142753_32RNLG77_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NNNDF_TAG20070423T142753_32RNHCYN_.BKP
是否确实要将上述文件列入目录 (输入 YES 或 NO)? YES
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142748_32RNH7PN_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142941_32RNLQVC_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NCNNF_TAG20070423T143224_32RNQT90_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NCSNF_TAG20070423T142753_32RNLG77_.BKP
文件名: E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NNNDF_TAG20070423T142753_32RNHCYN_.BKP
然后可以通过crosscheck backup进行备份集校验,源数据库的备份文件肯定是无法发现的,所以会被标记出来。解析来通过控制文件获得表空间及数据文件列表:
RMAN> report schema;
RMAN-06139: 警告: 控制文件不是 REPORT SCHEMA 的当前控制文件
数据库方案报表
永久数据文件列表
===========================
文件大小 (MB) 表空间 回退段数据文件名称
---- -------- ----------- ------- ------------------------
1 0 SYSTEM *** D:\ORADATA\EYGLE\DATAFILE\O1_MF_SYSTEM_2G8OHFX6_.DBF
2 0 UNDOTBS1 *** D:\ORADATA\EYGLE\DATAFILE\O1_MF_UNDOTBS1_2G8OJ6NB_.DBF
3 0 SYSAUX *** D:\ORADATA\EYGLE\DATAFILE\O1_MF_SYSAUX_2G8OJHP9_.DBF
4 0 USERS *** D:\ORADATA\EYGLE\DATAFILE\O1_MF_USERS_2G8OJYYS_.DBF
临时文件列表
=======================
文件大小 (MB) 表空间最大大小 (MB) 临时文件名称
---- -------- --------- ----------- --------------------
1 0 TEMP 32767 D:\ORADATA\EYGLE\DATAFILE\O1_MF_TEMP_2G8OJPDX_.TMP
通过列表编写恢复脚本,然后执行恢复:
RMAN> run {
2> set newname for datafile 1
3> to 'E:\ORADATA\JULIA\DATAFILE\SYSTEM.DBF';
4> set newname for datafile 2
5> to 'E:\ORADATA\JULIA\DATAFILE\UNDOTBS1.DBF';
6> set newname for datafile 3
7> to 'E:\ORADATA\JULIA\DATAFILE\SYSAUX.DBF';
8> set newname for datafile 4
9> to 'E:\ORADATA\JULIA\DATAFILE\USERS.DBF';
10> restore database;
11> switch datafile all;
12> }
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 23-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORADATA\JULIA\DATAFILE\SYSTEM.DBF
正将数据文件00002恢复到E:\ORADATA\JULIA\DATAFILE\UNDOTBS1.DBF
正将数据文件00003恢复到E:\ORADATA\JULIA\DATAFILE\SYSAUX.DBF
正将数据文件00004恢复到E:\ORADATA\JULIA\DATAFILE\USERS.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NNNDF_TAG20070423T142753_32RNHCYN_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_NNNDF_TAG20070423T142753_32RNHCYN_.BKP 标记 = TAG20070423T142753
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:26
完成 restore 于 23-4月 -07
在数据文件恢复出来以后,可以对数据库应用归档日志进行恢复:
RMAN> recover database;
启动 recover 于 23-4月 -07
使用通道 ORA_DISK_1
正在开始介质的恢复
通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=8
通道 ORA_DISK_1: 正在读取备份段
E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142941_32RNLQVC_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORADATA\BACKUPSET\2007_04_23\O1_MF_ANNNN_TAG20070423T142941_32RNLQVC_.BKP 标记 = TAG20070423T142941
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:03
存档日志文件名 =
E:\ORADATA\FLASH_RECOVERY_AREA\EYGLE\ARCHIVELOG\2007_04_23\O1_MF_1_8_32ROZDGZ_.ARC 线程 =1 序列 =8
通道 default: 正在删除存档日志
存档日志文件名 =
E:\ORADATA\FLASH_RECOVERY_AREA\EYGLE\ARCHIVELOG\2007_04_23\O1_MF_1_8_32ROZDGZ_.ARC 记录 ID=21 时间戳 =62
0664812
无法找到存档日志
存档日志线程 =1 序列=9
最后通过Resetlogs方式打开数据库:
RMAN> alter database open resetlogs;
数据库已打开
至此,数据库的异地恢复完成,当然恢复完全可以在同一台主机上进行。