Oracle 数据库恢复目录详解

Oracle 数据库恢复目录详解

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


1. 概述

恢复目录(Recovery Catalog)集中管理 RMAN 元数据[1]:

详细见:Oracle RMAN Catalog 详解Oracle RMAN 恢复目录


2. 优势

2.1 vs Control File

Control FileRecovery Catalog
保留时间短(CONTROL_FILE_RECORD_KEEP_TIME)长期
脚本存储
多库管理
报表有限丰富
异机恢复复杂简化

2.2 推荐

- 多数据库
- 长期保留
- 集中管理
- 复杂环境

3. 架构

Target DB1 → RMAN → Recovery Catalog DB
Target DB2 → RMAN → Recovery Catalog DB
Target DB3 → RMAN → RMAN Catalog DB

4. 创建

4.1 Catalog 数据库

-- 独立数据库
CREATE TABLESPACE rcat_ts 
  DATAFILE '/u01/oradata/rcat01.dbf' SIZE 1G;

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

GRANT RECOVERY_CATALOG_OWNER TO rcat;
GRANT CREATE SESSION TO rcat;

4.2 创建 Catalog

rman catalog rcat/password@rcat

RMAN> CREATE CATALOG TABLESPACE rcat_ts;

4.3 注册数据库

rman target / catalog rcat/password@rcat

RMAN> REGISTER DATABASE;

5. 使用

5.1 连接

rman target / catalog rcat/password@rcat

5.2 备份

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
# 自动同步 Catalog

5.3 恢复

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
# 自动从 Catalog 读取信息

6. 脚本

6.1 创建

RMAN> CREATE SCRIPT full_backup {
  BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
  CROSSCHECK BACKUP;
  DELETE NOPROMPT OBSOLETE;
}

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

6.2 执行

RMAN> RUN { EXECUTE SCRIPT full_backup; }
RMAN> RUN { EXECUTE GLOBAL SCRIPT all_backup; }

6.3 管理

RMAN> PRINT SCRIPT full_backup;
RMAN> REPLACE SCRIPT full_backup { ... };
RMAN> DELETE SCRIPT full_backup;
RMAN> LIST SCRIPT NAMES;

7. 同步

7.1 自动

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

7.2 手动

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

7.3 全同步

RMAN> RESYNC CATALOG FROM DB_UNIQUE_NAME 'prod' FULL;

8. 视图

8.1 RC_ 视图

-- 数据库
SELECT * FROM rc_database;
SELECT * FROM rc_database_incarnation;

-- 备份
SELECT * FROM rc_backup_set;
SELECT * FROM rc_backup_piece;
SELECT * FROM rc_backup_datafile;
SELECT * FROM rc_backup_controlfile;
SELECT * FROM rc_backup_spfile;

-- 归档
SELECT * FROM rc_archived_log;

-- 结构
SELECT * FROM rc_tablespace;
SELECT * FROM rc_datafile;
SELECT * FROM rc_tempfile;

-- 脚本
SELECT * FROM rc_stored_script;
SELECT * FROM rc_stored_script_line;

9. 多数据库

9.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;

9.2 查询

SELECT db_id, name, db_unique_name FROM rc_database;

10. 虚拟专用目录(VPC)

10.1 创建

-- Base 用户
CONNECT rcat/password@rcat
EXEC DBMS_RCVCAT.CREATE_VIRTUAL_CATALOG;

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

-- 授权
EXEC DBMS_RCVCAT.GRANT_DB_ACCESS('dba1', 'DB1');

10.2 使用

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

11. 备份 Catalog

11.1 RMAN

# Catalog 数据库本身用 Control File
rman target /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

11.2 Data Pump

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

11.3 频率

- 每日
- 关键
- 异地

12. 异机恢复

12.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;

12.2 优势

- 无需手动找备份
- Catalog 提供信息
- 简化

13. 升级 Catalog

rman catalog rcat/password@rcat

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

14. 注销数据库

14.1 RMAN

RMAN> UNREGISTER DATABASE DB_UNIQUE_NAME 'old_db';

14.2 PL/SQL

EXEC DBMS_RCVCAT.UNREGISTERDATABASE(db_key, db_id);

15. 常见坑与排错

15.1 ORA-19550

- 无法访问 Catalog
- 检查连接

15.2 不同步

- RESYNC CATALOG

15.3 版本

- Catalog 版本 >= Target
- UPGRADE CATALOG

15.4 Catalog 满

- 表空间不足
- 扩展

16. 最佳实践

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

17. 参考资料

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