第5章 恢复编录(Recovery Catalog)
使用恢复编录的优点:
- 持久性
- 能够保存比控制文件更多的备份信息,使RMAN资料库不受control_file_record_keep_time参数的限制。
- 安全性
- 当控制文件全部损坏后,也不影响使用RMAN进行恢复。简化丢失控制文件情况下的还原恢复操作
- 便捷性
- 可列出任意时间点上的表空间和数据库文件结构。
创建Catalog数据库
强烈建议单独准备一台数据库服务器作为Catalog数据库,并且创建单独的表空间。
#创建表空间
create tablespace rc_data datafile '/u01/rc_data01.dbf'
size 100m autoextend on next 50m;
#创建用户
create user rcowner identified by oracle
temporary tablespace temp
default tablespace rc_data
quota unlimited on rc_data;
#授权
grant recovery_catalog_owner to rcowner;
#登录catalog数据库创建对象 提前配置好oid的TNS
#至此Catalog数据库已准备完成,等待目标数据库注册使用
rman catalog rcowneer/oracle@oid
create catalog;
#查询创建的对象
select object_type,count(1) objects from user_objects
group by object_type;
注册Catalog
#192.168.2.23为Catalog数据库,rman/rman为账号密码,rmandb为服务名
#在目标数据库上以sys用户和rman用户同时连接至目标数据库和Catalog数据库
rman target sys/oracle@192.168.133.15:1521/hisdb catalog rman/rman@192.168.2.23:1521/rmandb
#将目标数据库hisdb的信息注册到Catalog中
register database;
#在rman.db表中可以查询已注册的数据库DBID信息
select * from rman.db;
- 局部同步:仅同步归档日志信息、备份集信息、镜像复制信息
- 完全同步:还要同步表空间和数据文件的物理结构信息(来自控制文件)
#链接目标数据库和catalog数据库
rman target sys/oracle@192.168.133.15:1521/hisdb catalog rman/rman@192.168.2.23:1521/rmandb
#手动同步(必须以上面的形式连接rman)
resync catalog;
RMAN能力的增强
- 数据库在nomount状态下无法通过控制文件获取rman的备份集信息(报ORA-01507的错),但是可以通过Catalog数据库来获取
- 可以查看数据文件的历史结构
report schema at time "sysdate - interval '2' day";
- 可以保存RMAN的脚本
没有启用Catalog时,只能将rman脚本保存在操作系统磁盘中
启用Catalog后,可以将rman脚本保存在Catalog中
#链连接目标数据库和catalog数据库
rman target sys/oracle@192.168.133.15:1521/hisdb catalog rman/rman@192.168.2.23:1521/rmandb
#创建一个恢复控制文件的脚本
#create script创建的脚本只能在当前目标数据库上执行
#create global script创建的脚本可以在所有已注册的数据库上执行
create script recovery_controlfile {
startup nomount;
restore controlfile;
mount database;
recovery database;
alter database open resetlogs;
}
#查看Catalog中所有本地脚本和全局脚本的名称
list script names;
#查看脚本的内容 print script 或 print global script
print script recovery_controlfile;
#调用脚本 run {execute script ...} 或 run {execute global script ...}
run {execute script recovery_controlfile;}
建议:一旦启用Catalog,建议每次使用rman连接目标数据库的同时也应该连接Catalog,如rman target ... catalog ...,并在必要的时候手动同步Catalog。