Oracle RMAN 恢复目录(Recovery Catalog)
Oracle RMAN 恢复目录(Recovery Catalog)
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
RMAN Recovery Catalog(恢复目录) 是存储 RMAN 备份元数据的独立数据库[1]:
核心特性:
- 集中存储多数据库备份元数据
- 存储更长历史(控制文件有限)
- 支持 RMAN 脚本存储
- 支持多版本兼容
适用场景:
- 多数据库管理
- 长期保留备份元数据
- 复杂恢复场景
- 异地灾备
2. 恢复目录 vs 控制文件
| 维度 | 控制文件 | 恢复目录 |
|---|---|---|
| 存储 | 本地 | 独立数据库 |
| 历史保留 | 有限(CONTROL_FILE_RECORD_KEEP_TIME) | 长期 |
| 多数据库 | 不支持 | 支持 |
| 脚本存储 | 不支持 | 支持 |
| 集中管理 | 不支持 | 支持 |
| 配置复杂度 | 低 | 中 |
3. 创建恢复目录
3.1 创建目录表空间
-- 在恢复目录数据库
CREATE TABLESPACE rcat_ts
DATAFILE '/u01/oradata/rcat/rcat_ts01.dbf' SIZE 1G
AUTOEXTEND ON;
3.2 创建恢复目录用户
-- 创建用户
CREATE USER rcat_owner IDENTIFIED BY ******
DEFAULT TABLESPACE rcat_ts
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON rcat_ts;
-- 授权
GRANT RECOVERY_CATALOG_OWNER TO rcat_owner;
GRANT CONNECT, RESOURCE TO rcat_owner;
3.3 创建恢复目录
# 使用 RMAN 创建
rman catalog rcat_owner/pwd@rcat_db
RMAN> CREATE CATALOG;
3.4 验证
-- 查看恢复目录对象
SELECT table_name FROM user_tables WHERE table_name LIKE 'DB%';
-- 约 60+ 张表
4. 注册数据库
4.1 注册目标数据库
# 注册
rman target / catalog rcat_owner/pwd@rcat_db
RMAN> REGISTER DATABASE;
4.2 查看注册
-- 在恢复目录
SELECT
db_key,
db_id,
name,
resetlogs_change#
FROM rc_database;
4.3 注册多个数据库
# 每个目标库注册一次
rman target /@orcl1 catalog rcat_owner/pwd@rcat_db
RMAN> REGISTER DATABASE;
rman target /@orcl2 catalog rcat_owner/pwd@rcat_db
RMAN> REGISTER DATABASE;
5. 同步恢复目录
5.1 自动同步
RMAN 操作时自动同步。
5.2 手动同步
RMAN> RESYNC CATALOG;
5.3 从控制文件同步
RMAN> RESYNC CATALOG FROM DB_UNIQUE_NAME orcl;
6. RMAN 脚本
6.1 创建脚本
RMAN> CREATE SCRIPT backup_db {
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE OBSOLETE;
}
6.2 全局脚本
RMAN> CREATE GLOBAL SCRIPT global_backup {
BACKUP DATABASE PLUS ARCHIVELOG;
}
6.3 执行脚本
RMAN> RUN { EXECUTE SCRIPT backup_db; }
RMAN> RUN { EXECUTE GLOBAL SCRIPT global_backup; }
6.4 管理脚本
# 查看
RMAN> PRINT SCRIPT backup_db;
RMAN> LIST SCRIPT NAMES;
RMAN> LIST GLOBAL SCRIPT NAMES;
# 替换
RMAN> REPLACE SCRIPT backup_db {
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
}
# 删除
RMAN> DELETE SCRIPT backup_db;
7. 存储配置
7.1 存储配置(19c+)
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/%U';
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
7.2 恢复目录存储
配置存储在恢复目录,跨实例一致。
8. 恢复目录版本兼容
8.1 版本兼容矩阵
| 恢复目录版本 | 目标数据库版本 |
|---|---|
| 19c | 11g+ |
| 21c | 12c+ |
| 23ai | 19c+ |
8.2 升级恢复目录
# 升级恢复目录模式
rman catalog rcat_owner/pwd@rcat_db
RMAN> UPGRADE CATALOG;
9. 虚拟私有目录(VPC)
9.1 概念
12c 引入,为不同 DBA 隔离视图:
9.2 创建 VPC
-- 1. 创建 VPC 用户
CREATE USER vpc_user IDENTIFIED BY ****** DEFAULT TABLESPACE rcat_ts;
GRANT CREATE SESSION TO vpc_user;
-- 2. 授权基表
GRANT SELECT, INSERT, UPDATE, DELETE
ON rcat_owner.dbinc TO vpc_user;
-- ...
-- 3. 创建 VPC
RMAN> CREATE VIRTUAL CATALOG;
9.3 授权数据库
-- 恢复目录所有者授权
EXEC DBMS_RCVCAT.GRANT_DB_ACCESS('vpc_user', 'orcl');
10. 监控恢复目录
10.1 查看注册数据库
SELECT
db_key,
db_id,
name,
current_dbid,
resetlogs_time
FROM rc_database;
10.2 查看备份
SELECT
db_name,
bs_key,
backup_type,
completion_time,
elapsed_seconds
FROM rc_backup_set
ORDER BY completion_time DESC;
10.3 查看数据文件备份
SELECT
db_name,
file#,
creation_time,
checkpoint_change#,
checkpoint_time
FROM rc_backup_datafile
ORDER BY completion_time DESC;
11. 常见坑与排错
11.1 ORA-19573: 无法获取文件锁
修复:
-- 1. 检查恢复目录状态
SELECT * FROM rc_database;
-- 2. 检查连接
rman target / catalog rcat_owner/pwd@rcat_db
11.2 RMAN-20001: 目标数据库未注册
修复:
# 注册
RMAN> REGISTER DATABASE;
11.3 RMAN-06004: 恢复目录版本不兼容
修复:
# 升级恢复目录
RMAN> UPGRADE CATALOG;
11.4 同步失败
修复:
# 1. 手动同步
RMAN> RESYNC CATALOG;
# 2. 检查控制文件
SELECT * FROM v$controlfile_record_section;
11.5 恢复目录空间不足
修复:
-- 1. 检查表空间
SELECT tablespace_name, free_mb FROM dba_tablespace_usage_metrics;
-- 2. 增加空间
ALTER TABLESPACE rcat_ts ADD DATAFILE '/u01/oradata/rcat/rcat_ts02.dbf' SIZE 1G;
-- 3. 清理旧备份记录
RMAN> DELETE OBSOLETE;
12. 最佳实践
- 生产用恢复目录:多数据库管理
- 专用数据库:避免与业务库混用
- 定期备份恢复目录:保护元数据
- 合理保留策略:避免空间膨胀
- 多版本兼容:恢复目录版本 >= 目标库
- 使用脚本:自动化备份
- VPC 隔离:多 DBA 场景
- 监控同步:RESYNC CATALOG
- 备份恢复目录数据库:保护元数据
- 定期 UPGRADE:升级恢复目录
13. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Managing the Recovery Catalog” https://docs.oracle.com/en/database/oracle/oracle-database/19/rcmfg/