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 版本兼容矩阵

恢复目录版本目标数据库版本
19c11g+
21c12c+
23ai19c+

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. 最佳实践

  1. 生产用恢复目录:多数据库管理
  2. 专用数据库:避免与业务库混用
  3. 定期备份恢复目录:保护元数据
  4. 合理保留策略:避免空间膨胀
  5. 多版本兼容:恢复目录版本 >= 目标库
  6. 使用脚本:自动化备份
  7. VPC 隔离:多 DBA 场景
  8. 监控同步:RESYNC CATALOG
  9. 备份恢复目录数据库:保护元数据
  10. 定期 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/