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 File | Recovery 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. 最佳实践
- 独立数据库:Catalog
- 定期备份:Catalog
- 脚本管理:集中
- 多库管理:统一
- VPC:多租户
- 同步:定期
- 版本:升级
- 监控:状态
- 测试:恢复
- 文档:配置
17. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Recovery Catalog” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/