Oracle RMAN Catalog 详解

Oracle RMAN Catalog 详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

RMAN Catalog 是集中管理备份元数据的数据库[1]:

详细见:Oracle RMAN 恢复目录Oracle RMAN 备份恢复全集


2. 优势

2.1 vs Control File

- 长期保留
- 集中管理
- 脚本存储
- 多库管理
- 报表

2.2 推荐场景

- 多数据库
- 长期保留
- 集中管理
- 异机恢复

3. 创建 Catalog

3.1 表空间

CREATE TABLESPACE rcat_ts 
  DATAFILE '/u01/oradata/rcat01.dbf' SIZE 1G;

3.2 用户

CREATE USER rcat IDENTIFIED BY ******
  DEFAULT TABLESPACE rcat_ts
  QUOTA UNLIMITED ON rcat_ts;

GRANT RECOVERY_CATALOG_OWNER TO rcat;

3.3 Catalog

rman catalog rcat/password@rcat

RMAN> CREATE CATALOG;

4. 注册数据库

4.1 注册

rman target / catalog rcat/password@rcat

RMAN> REGISTER DATABASE;

4.2 查看

RMAN> REPORT SCHEMA;
RMAN> LIST INCARNATION;

5. 同步

5.1 自动

- RMAN 操作时自动同步
- Control File → Catalog

5.2 手动

RMAN> RESYNC CATALOG;
RMAN> RESYNC CATALOG FROM DB_UNIQUE_NAME ALL;

6. 脚本

6.1 创建

RMAN> CREATE SCRIPT backup_db {
  BACKUP DATABASE PLUS ARCHIVELOG;
  DELETE OBSOLETE;
}

RMAN> CREATE GLOBAL SCRIPT backup_all {
  BACKUP DATABASE PLUS ARCHIVELOG;
}

6.2 查看

RMAN> PRINT SCRIPT backup_db;
RMAN> LIST SCRIPT NAMES;
RMAN> LIST GLOBAL SCRIPT NAMES;

6.3 执行

RMAN> RUN { EXECUTE SCRIPT backup_db; }
RMAN> RUN { EXECUTE GLOBAL SCRIPT backup_all; }

6.4 修改

RMAN> REPLACE SCRIPT backup_db {
  BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
  DELETE OBSOLETE;
}

6.5 删除

RMAN> DELETE SCRIPT backup_db;

7. 多数据库

7.1 注册多个

# DB1
rman target sys/pwd@db1 catalog rcat/password@rcat
RMAN> REGISTER DATABASE;

# DB2
rman target sys/pwd@db2 catalog rcat/password@rcat
RMAN> REGISTER DATABASE;

7.2 查询

SELECT db_id, name, db_unique_name FROM rc_database;

8. 视图

8.1 RC_ 视图

SELECT * FROM rc_database;
SELECT * FROM rc_database_incarnation;
SELECT * FROM rc_backup_piece;
SELECT * FROM rc_backup_set;
SELECT * FROM rc_backup_datafile;
SELECT * FROM rc_archived_log;
SELECT * FROM rc_tablespace;
SELECT * FROM rc_datafile;

9. 备份 Catalog

9.1 RMAN

rman target / 
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
# Catalog 数据库本身用 control file 管理

9.2 Data Pump

expdp rcat/password DIRECTORY=dp DUMPFILE=rcat.dmp FULL=Y

10. 虚拟专用目录(VPC)

10.1 概念

- 多租户
- 隔离
- 不同 DBA

10.2 配置

-- Base Catalog 用户
CREATE USER vpc_owner IDENTIFIED BY ******
GRANT RECOVERY_CATALOG_OWNER TO vpc_owner;

-- VPC 用户
CREATE USER dba1 IDENTIFIED BY ******
GRANT CREATE SESSION TO dba1;

-- 授权
BEGIN
  DBMS_RCVCAT.CREATE_VIRTUAL_CATALOG;
  DBMS_RCVCAT.GRANT_DB_ACCESS('dba1', 'DB1');
END;
/

-- DBA1 连接
rman target / catalog dba1/pwd@rcat
RMAN> SET COMMAND ID TO 'DB1';

11. 升级 Catalog

rman catalog rcat/password@rcat

RMAN> UPGRADE CATALOG;
RMAN> UPGRADE CATALOG;  -- 确认

12. 删除注册

12.1 注销

RMAN> UNREGISTER DATABASE DB_UNIQUE_NAME 'prod';

12.2 清理

EXEC DBMS_RCVCAT.UNREGISTERDATABASE(db_key, db_id);

13. 异机恢复

13.1 使用 Catalog

rman target / catalog rcat/password@rcat

RMAN> SET DBID 1234567890;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE;
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

13.2 优势

- 无需 DBID(部分情况)
- 集中元数据
- 简化

14. 常见坑与排错

14.1 ORA-19550

- 无法访问 Catalog
- 检查连接

14.2 不同步

- RESYNC CATALOG

14.3 版本

- Catalog 版本 >= 目标
- UPGRADE CATALOG

15. 最佳实践

  1. 独立数据库:Catalog
  2. 定期备份:Catalog
  3. 脚本管理:集中
  4. 多数据库:统一
  5. VPC:多租户
  6. 同步:定期
  7. 版本:升级
  8. 监控:状态
  9. 测试:恢复
  10. 文档:配置

16. 参考资料

[1] Oracle Database Backup and Recovery User’s Guide 19c, “Recovery Catalog” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/