13.1 恢复目录简介
如果不使用恢复目录,那么RMAN 元数据会存放到目标数据库的控制文件;如果使用恢复目录,那么RMAN 元数据不仅会存放到目标数据库的控制文件,而且还会存放到恢复目录中。
1. 恢复目录数据库
恢复目录数据库是指专门用于存放恢复目录方案的ORACLE 数据库。注意,如果使用恢复目录存放RMAN 元数据,那么一定要将恢复目录存放到独立目录数据库,而不应该存放到目标数据库中。
2. 恢复目录所有者
恢复目录所有者是指在恢复目录数据库中用于管理恢复目录数据库的数据库用户。注意,恢复目录所有者必须具有RECOVERY_CATALOG_OWNER 角色,并且恢复目录所有者不能是SYS 用户。
3. 恢复目录方案
恢复目录方案是指恢复目录数据库对象的集合,其名称实际就是恢复目录所有者的名称。为了建立恢复目录方案,必须在RMAN 中以恢复目录所有者身份登录,然后执行CREATE CATALOG 命令。
4. 规划恢复目录空间
在建立恢复目录之前,必须规划恢复目录所占用的空间。多数情况下,每个目标数据库的RMAN 元数据每年大约占用15M 的恢复目录空间。因此,如果恢复目录方案只存放一个目标数据库的RMAN 元数据,那么每年大约需要15M 空间;如果存放两个目标数据库的RMAN 元数据,那么每年大约需要30M 空间,依此类推。
5. 恢复目录内容
6. 恢复目录的优点
13.2 建立恢复目录
SQL> conn system/catdb@catdb
已连接。
SQL> create tablespace rman_tbs datafile '%oracle_base%/oradata/catdb/rman.dbf'
size 15M;
表空间已创建。
SQL> create user rman identified by rman default tablespace rman_tbs;
用户已创建。
SQL> grant connect,resource,recovery_catalog_owner to rman;
授权成功。
C:/>rman catalog rman/rman@catdb
恢复管理器: Release 10.2.0.1.0 - Production on 星期五 11月 7 22:41:59 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到恢复目录数据库
RMAN> create catalog;
RMAN> connect target sys/demo@demo
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-06004: 恢复目录数据库发生 ORACLE 错误: RMAN-20001: target database not found
in recovery catalog
RMAN> register database;
注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync
RMAN> report schema;
数据库方案报表
永久数据文件列表
===========================
文件大小 (MB) 表空间 回退段数据文件名称
---- -------- -------------------- ------- ------------------------
1 490 SYSTEM YES D:/DEMO/SYSTEM01.DBF
2 120 UNDOTBS1 YES D:/DEMO/UNDOTBS01.DBF
3 270 SYSAUX NO D:/DEMO/SYSAUX01.DBF
4 241 USERS NO C:/DEMO/USERS01.DBF
5 1000 USER07 NO E:/USER07.DBF
临时文件列表
=======================
文件大小 (MB) 表空间 最大大小 (MB) 临时文件名称
---- -------- -------------------- ----------- --------------------
1 50 TEMP 50 D:/DEMO/TEMP01.DBF
13.3 使用存储脚本
存储脚本(Stored Script) 用于存放频繁执行的备份、转储和恢复操作。通过使用预先建立好的存储脚本,不仅可以避免操作人员执行交互操作时可能发生的错误,而且可以使系统自动执行备份操作。注意,存储脚本只能存放在恢复目录中。
1. 建立存储脚本
建立存储脚本是使用CREATE SCRIPT 命令来完成的。
RMAN> create script bak_database{
2> backup format='d:/1109/%d_%s_%p.bak'
3> database include current controlfile
4> plus archivelog;
5> sql 'alter system archive log current';
6> }
已创建脚本 bak_database
2. 运行存储脚本
(1) 在RMAN 提示符下运行存储脚本
RMAN> run {execute script bak_database;}
正在执行脚本: bak_database
启动 backup 于 09-11月-08
当前日志已存档
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=153 devtype=DISK
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =52 记录 ID=723 时间戳=670330585
输入存档日志线程 =1 序列 =53 记录 ID=725 时间戳=670356551
输入存档日志线程 =1 序列 =54 记录 ID=727 时间戳=670356647
输入存档日志线程 =1 序列 =55 记录 ID=729 时间戳=670357152
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_291_1.BAK 标记=TAG20081109T181914 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 09-11月-08
启动 backup 于 09-11月-08
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=E:/USER07.DBF
输入数据文件 fno=00001 name=D:/DEMO/SYSTEM01.DBF
输入数据文件 fno=00003 name=D:/DEMO/SYSAUX01.DBF
输入数据文件 fno=00004 name=C:/DEMO/USERS01.DBF
输入数据文件 fno=00002 name=D:/DEMO/UNDOTBS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_292_1.BAK 标记=TAG20081109T181919 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:03:15
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_293_1.BAK 标记=TAG20081109T181919 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:05
完成 backup 于 09-11月-08
启动 backup 于 09-11月-08
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =56 记录 ID=732 时间戳=670357361
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_294_1.BAK 标记=TAG20081109T182242 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 09-11月-08
sql 语句: alter system archive log current
(2) 在命令行运行存储脚本
C:/>rman target sys/demo@demo catalog rman/rman@catdb script bak_database
恢复管理器: Release 10.2.0.1.0 - Production on 星期日 11月 9 18:25:12 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: DEMO (DBID=3408444956)
连接到恢复目录数据库
正在执行脚本: bak_database
启动 backup 于 09-11月-08
当前日志已存档
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=149 devtype=DISK
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =52 记录 ID=723 时间戳=670330585
输入存档日志线程 =1 序列 =53 记录 ID=725 时间戳=670356551
输入存档日志线程 =1 序列 =54 记录 ID=727 时间戳=670356647
输入存档日志线程 =1 序列 =55 记录 ID=729 时间戳=670357152
输入存档日志线程 =1 序列 =56 记录 ID=731 时间戳=670357361
输入存档日志线程 =1 序列 =57 记录 ID=733 时间戳=670357366
输入存档日志线程 =1 序列 =58 记录 ID=735 时间戳=670357515
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_295_1.BAK 标记=TAG20081109T182516 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 09-11月-08
启动 backup 于 09-11月-08
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=E:/USER07.DBF
输入数据文件 fno=00001 name=D:/DEMO/SYSTEM01.DBF
输入数据文件 fno=00003 name=D:/DEMO/SYSAUX01.DBF
输入数据文件 fno=00004 name=C:/DEMO/USERS01.DBF
输入数据文件 fno=00002 name=D:/DEMO/UNDOTBS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_296_1.BAK 标记=TAG20081109T182519 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:03:05
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_297_1.BAK 标记=TAG20081109T182519 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 09-11月-08
启动 backup 于 09-11月-08
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =59 记录 ID=738 时间戳=670357708
通道 ORA_DISK_1: 正在启动段 1 于 09-11月-08
通道 ORA_DISK_1: 已完成段 1 于 09-11月-08
段句柄=D:/1109/DEMO_298_1.BAK 标记=TAG20081109T182830 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 09-11月-08
sql 语句: alter system archive log current
恢复管理器完成。
3. 显示存储脚本内容
RMAN> print script bak_database;
正在打印存储的脚本: bak_database
{backup format='d:/1109/%d_%s_%p.bak'
database include current controlfile
plus archivelog;
sql 'alter system archive log current';
}
4. 替换存储脚本
RMAN> replace script bak_database{
2> backup database format='d:/1109/%d_%s_%p.bak';
3> }
已替换脚本 bak_database
RMAN> print script bak_database;
正在打印存储的脚本: bak_database
{backup database format='d:/1109/%d_%s_%p.bak';
}
5. 删除存储脚本
RMAN> delete script bak_database;
已删除脚本: bak_database
6. 列出所有存储脚本
RMAN> list script names;
恢复目录中存储脚本的列表
目标数据库 DEMO 的脚本
脚本名
说明
-----------------------------------------------------------------------
bak_database
13.4 维护恢复目录
1. 重新同步恢复目录
重新同步恢复目录是为了使恢复目录和目标数据库控制文件保持同步,当目标数据库物理结构发生改变时,应该重新同步恢复目录。
RMAN> resync catalog;
正在启动全部恢复目录的 resync
完成全部 resync
2. 注销目录数据库
RMAN> resync catalog;
正在启动全部恢复目录的 resync
完成全部 resync
RMAN> unregister database;
数据库名为 "DEMO" 且 DBID 为 3408444956
是否确实要注销数据库 (输入 YES 或 NO)? yes
已从恢复目录中注销数据库
3. 升级恢复目录
RMAN> upgrade catalog;
恢复目录所有者是RMAN
再输入一次 UPGRADE CATALOG 命令来确认目录升级
RMAN> upgrade catalog;
恢复目录已升级到版本10.02.00.00
DBMS_RCVMAN 程序包升级为 10.02.00.00 版
DBMS_RCVCAT 程序包升级为 10.02.00.00 版
4. 删除恢复目录
RMAN> drop catalog
恢复目录所有者是RMAN
再输入一次 DROP CATALOG 命令来确认目录删除
RMAN> drop catalog
恢复目录已删除
5. 恢复数据库到早期数据库副本
(1) 确定数据库副本的副本键值
RMAN> list incarnation of database;
数据库原型列表
DB 关键字 Inc 关键字 DB 名 DB ID STATUS 重置 SCN 重置时间
------- ------- -------- ---------------- --- ---------- ----------
1 9 DEMO 3408444956 PARENT 981709 14-9月 -08
1 10 DEMO 3408444956 PARENT 1061867 25-9月 -08
1 11 DEMO 3408444956 PARENT 1083584 25-9月 -08
1 12 DEMO 3408444956 PARENT 1085098 25-9月 -08
1 13 DEMO 3408444956 PARENT 1134928 27-9月 -08
1 14 DEMO 3408444956 PARENT 1135243 02-10月-08
1 15 DEMO 3408444956 PARENT 1135244 02-10月-08
1 16 DEMO 3408444956 PARENT 1566552 16-10月-08
1 17 DEMO 3408444956 PARENT 1569503 16-10月-08
1 18 DEMO 3408444956 PARENT 1584211 17-10月-08
1 2 DEMO 3408444956 PARENT 1590198 19-10月-08
1 2585 DEMO 3408444956 CURRENT 2126999 10-11月-08
(2) 设置数据库到早期副本
RMAN> startup force mount
Oracle 实例已启动
数据库已装载
系统全局区域总计 167772160 字节
Fixed Size 1247900 字节
Variable Size 62915940 字节
Database Buffers 100663296 字节
Redo Buffers 2945024 字节
RMAN> reset database to incarnation 2;
将数据库重置为原型 2
(3) 转储早期版本的控制文件
RMAN> run{
2> startup force nomount;
3> set until sequence=68;
4> restore controlfile;
5> }
Oracle 实例已启动
系统全局区域总计 167772160 字节
Fixed Size 1247900 字节
Variable Size 62915940 字节
Database Buffers 100663296 字节
Redo Buffers 2945024 字节
正在执行命令: SET until clause
启动 restore 于 10-11月-08
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 正在读取备份段 D:/1110/DEMO.CTL
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = D:/1110/DEMO.CTL 标记 = TAG20081110T103514
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
输出文件名=D:/DEMO/CONTROL01.CTL
输出文件名=C:/DEMO/CONTROL02.CTL
完成 restore 于 10-11月-08
(4) 恢复数据库到早期副本
RMAN> run
2> {
3> alter database mount;
4> restore database;
5> recover database;
6> }
数据库已装载
释放的通道: ORA_DISK_1
启动 restore 于 10-11月-08
启动 implicit crosscheck backup 于 10-11月-08
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
已交叉检验的 7 对象
完成 implicit crosscheck backup 于 10-11月-08
启动 implicit crosscheck copy 于 10-11月-08
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 10-11月-08
搜索恢复区域中的所有文件
正在编制文件目录...
没有为文件编制目录
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:/DEMO/SYSTEM01.DBF
正将数据文件00002恢复到D:/DEMO/UNDOTBS01.DBF
正将数据文件00003恢复到D:/DEMO/SYSAUX01.DBF
正将数据文件00004恢复到C:/DEMO/USERS01.DBF
正将数据文件00005恢复到E:/USER07.DBF
通道 ORA_DISK_1: 正在读取备份段 D:/1110/DEMO_305_1.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = D:/1110/DEMO_305_1.DBF 标记 = TAG20081110T103042
通道 ORA_DISK_1: 恢复完成, 用时: 00:02:15
完成 restore 于 10-11月-08
启动 recover 于 10-11月-08
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 65 已作为文件 C:/DEMO/ARCHIVE/65_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 66 已作为文件 C:/DEMO/ARCHIVE/66_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 67 已作为文件 C:/DEMO/ARCHIVE/67_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 68 已作为文件 C:/DEMO/ARCHIVE/68_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 69 已作为文件 C:/DEMO/ARCHIVE/69_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 70 已作为文件 C:/DEMO/ARCHIVE/70_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 71 已作为文件 C:/DEMO/ARCHIVE/71_1_668514539.LOG 存在于磁盘
上
存档日志线程 1 序列 72 已作为文件 C:/DEMO/ARCHIVE/72_1_668514539.LOG 存在于磁盘
上
存档日志文件名 =C:/DEMO/ARCHIVE/65_1_668514539.LOG 线程 =1 序列 =65
存档日志文件名 =C:/DEMO/ARCHIVE/66_1_668514539.LOG 线程 =1 序列 =66
存档日志文件名 =C:/DEMO/ARCHIVE/67_1_668514539.LOG 线程 =1 序列 =67
存档日志文件名 =C:/DEMO/ARCHIVE/68_1_668514539.LOG 线程 =1 序列 =68
存档日志文件名 =C:/DEMO/ARCHIVE/69_1_668514539.LOG 线程 =1 序列 =69
存档日志文件名 =C:/DEMO/ARCHIVE/70_1_668514539.LOG 线程 =1 序列 =70
存档日志文件名 =C:/DEMO/ARCHIVE/71_1_668514539.LOG 线程 =1 序列 =71
存档日志文件名 =C:/DEMO/ARCHIVE/72_1_668514539.LOG 线程 =1 序列 =72
.......
RMAN> sql 'alter database open resetlogs';
sql 语句: alter database open resetlogs
在恢复目录中注册的数据库的新原型
正在启动全部恢复目录的 resync
完成全部 resync
13.5 查询恢复目录
1. RC_DATABASE
显示在恢复目录中已经注册的所有目标数据库信息
SQL> select * from rc_database;
DB_KEY DBINC_KEY DBID NAME RESETLOGS_CHANGE# RESETLOGS_TIME
---------- ---------- ---------- ---------- ----------------- --------------
1 5670 3408444956 DEMO 2127854 10-11月-08
2. RC_TABLESPACE
显示在恢复目录中所记载的目标数据库的表空间信息
SQL> select * from rc_tablespace;
DB_KEY DBINC_KEY DB_NAME TS# NAME CREATION_CHANGE# CREATION_TIME DROP_CHANGE# DROP_TIME INC BI
---------- ---------- -------- ---------- ---------- ---------------- -------------- ------------ -------------- --- --
1 2 DEMO 0 SYSTEM 9 30-8月 -05 YES NO NO
1 2 DEMO 1 UNDOTBS1 532340 30-8月 -05 YES NO NO
1 2 DEMO 2 SYSAUX 6100 30-8月 -05 YES NO NO
1 2 DEMO 3 TEMP 1095784 26-9月 -08 NO NO YE
1 2 DEMO 4 USERS 9769 30-8月 -05 YES NO NO
1 2 DEMO 14 USER07 1590051 18-10月-08 YES NO NO
1 2585 DEMO 0 SYSTEM 9 30-8月 -05 YES NO NO
1 2585 DEMO 1 UNDOTBS1 532340 30-8月 -05 YES NO NO
1 2585 DEMO 2 SYSAUX 6100 30-8月 -05 YES NO NO
1 2585 DEMO 3 TEMP 1095784 26-9月 -08 NO NO YE
1 2585 DEMO 4 USERS 9769 30-8月 -05 YES NO NO
DB_KEY DBINC_KEY DB_NAME TS# NAME CREATION_CHANGE# CREATION_TIME DROP_CHANGE# DROP_TIME INC BI
---------- ---------- -------- ---------- ---------- ---------------- -------------- ------------ -------------- --- --
1 2585 DEMO 14 USER07 1590051 18-10月-08 YES NO NO
1 5670 DEMO 0 SYSTEM 9 30-8月 -05 YES NO NO
1 5670 DEMO 1 UNDOTBS1 532340 30-8月 -05 YES NO NO
1 5670 DEMO 2 SYSAUX 6100 30-8月 -05 YES NO NO
1 5670 DEMO 3 TEMP 1095784 26-9月 -08 NO NO YE
1 5670 DEMO 4 USERS 9769 30-8月 -05 YES NO NO
1 5670 DEMO 14 USER07 1590051 18-10月-08 YES NO NO
已选择18行。
3. RC_DATAFILE
显示在恢复目录中所记载的目标数据库的数据文件信息
SQL> select file#,name,bytes from rc_datafile;
FILE# NAME BYTES
---------- ------------------------------ ----------
1 D:/DEMO/SYSTEM01.DBF 513802240
2 D:/DEMO/UNDOTBS01.DBF 125829120
3 D:/DEMO/SYSAUX01.DBF 283115520
4 C:/DEMO/USERS01.DBF 252968960
5 E:/USER07.DBF 1048576000
1 D:/DEMO/SYSTEM01.DBF 513802240
2 D:/DEMO/UNDOTBS01.DBF 125829120
3 D:/DEMO/SYSAUX01.DBF 283115520
4 C:/DEMO/USERS01.DBF 252968960
5 E:/USER07.DBF 1048576000
1 D:/DEMO/SYSTEM01.DBF 513802240
2 D:/DEMO/UNDOTBS01.DBF 125829120
3 D:/DEMO/SYSAUX01.DBF 283115520
4 C:/DEMO/USERS01.DBF 252968960
5 E:/USER07.DBF 1048576000
已选择15行。
4. RC_STORED_SCRIPT
显示在恢复目录中所记载的所有存储脚本信息
SQL> select * from rc_stored_script;
DB_KEY DB_NAME SCRIPT_NAME SCRIPT_COMMENT
---------- -------- -------------------- --------------------
1 DEMO bak_database
5. RC_STORED_SCRIPT_LINE
显示存储脚本的内容
SQL> select * from rc_stored_script_line;
DB_KEY SCRIPT_NAME LINE TEXT
---------- -------------------- ---------- -------------------------------------------------------------------------------------
1 bak_database 1 {backup format='d:/1110/%d_%s_%p.bak' database include current controlfile
1 bak_database 2 plus archivelog;
1 bak_database 3 sql 'alter system archive log current';
1 bak_database 4 }