Oracle CDB/PDB 备份恢复策略
Oracle CDB/PDB 备份恢复策略
适用版本:Oracle Database 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
多租户环境中备份恢复策略[1]:
| 层级 | 备份对象 | 命令 |
|---|---|---|
| CDB | 整个 CDB | BACKUP DATABASE |
| PDB | 单个 PDB | BACKUP PLUGGABLE DATABASE |
| Root | CDB$ROOT | BACKUP DATABASE ROOT |
| 表空间 | PDB 表空间 | BACKUP TABLESPACE |
| 数据文件 | 单个文件 | BACKUP DATAFILE |
2. CDB 全备份
2.1 备份整个 CDB
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
2.2 备份 CDB Root
RMAN> BACKUP DATABASE ROOT;
2.3 备份所有 PDB
RMAN> BACKUP PLUGGABLE DATABASE ALL;
2.4 配置自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/%F';
3. PDB 备份
3.1 备份单个 PDB
RMAN> BACKUP PLUGGABLE DATABASE hrpdb PLUS ARCHIVELOG;
3.2 备份多个 PDB
RMAN> BACKUP PLUGGABLE DATABASE hrpdb, salespdb;
3.3 PDB 表空间备份
-- 必须切换到 PDB
ALTER SESSION SET CONTAINER = hrpdb;
-- 备份表空间
RMAN> BACKUP TABLESPACE users, example;
3.4 PDB 数据文件备份
RMAN> BACKUP DATAFILE 5, 6, 7;
4. PDB 时间点恢复(PITR)
4.1 PDB PITR
-- 1. 关闭 PDB
RMAN> ALTER PLUGGABLE DATABASE hrpdb CLOSE;
-- 2. 时间点恢复
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2026-07-21 14:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE PLUGGABLE DATABASE hrpdb;
RECOVER PLUGGABLE DATABASE hrpdb;
}
-- 3. 打开 RESETLOGS
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN RESETLOGS;
4.2 PDB SCN 恢复
RMAN> RUN {
SET UNTIL SCN 1234567;
RESTORE PLUGGABLE DATABASE hrpdb;
RECOVER PLUGGABLE DATABASE hrpdb;
}
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN RESETLOGS;
4.3 辅助实例恢复
PDB PITR 需要辅助实例:
-- 19c 自动创建辅助实例
-- 12c 需手动配置
5. PDB 删除后恢复
5.1 备份存在的情况
-- 1. 从备份恢复 PDB
RMAN> RESTORE PLUGGABLE DATABASE hrpdb;
-- 2. 恢复
RMAN> RECOVER PLUGGABLE DATABASE hrpdb;
-- 3. 打开
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN;
5.2 从 CDB 备份恢复
-- 1. 恢复控制文件
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
-- 2. 恢复 PDB
RMAN> RESTORE PLUGGABLE DATABASE hrpdb;
RMAN> RECOVER PLUGGABLE DATABASE hrpdb;
-- 3. 打开
RMAN> ALTER DATABASE OPEN;
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN;
6. CDB 完全恢复
6.1 恢复整个 CDB
-- 1. 启动到 nomount
RMAN> STARTUP NOMOUNT;
-- 2. 恢复 SPFILE
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
RMAN> SHUTDOWN;
RMAN> STARTUP NOMOUNT;
-- 3. 恢复控制文件
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
-- 4. 恢复数据库
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
-- 5. 打开
RMAN> ALTER DATABASE OPEN RESETLOGS;
6.2 仅恢复 PDB(CDB 已 OPEN)
-- CDB OPEN
RMAN> ALTER PLUGGABLE DATABASE hrpdb CLOSE;
RMAN> RESTORE PLUGGABLE DATABASE hrpdb;
RMAN> RECOVER PLUGGABLE DATABASE hrpdb;
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN;
7. RMAN 配置(多租户)
7.1 配置默认设备
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/%U';
7.2 保留策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
7.3 加密压缩
RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
RMAN> CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
8. Data Guard 与多租户
8.1 CDB Data Guard
整个 CDB 作为 Data Guard 单元:
-- 主备库结构一致
-- 所有 PDB 同步
8.2 PDB 快照备库
-- 转换为快照备库
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
ALTER PLUGGABLE DATABASE hrpdb OPEN READ ONLY;
-- 可读写测试
详细内容见:Oracle Data Guard 架构与配置。
9. Flashback 与多租户
9.1 CDB Flashback
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
ALTER DATABASE OPEN RESETLOGS;
9.2 PDB Flashback(19c+)
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
FLASHBACK PLUGGABLE DATABASE hrpdb TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
ALTER PLUGGABLE DATABASE hrpdb OPEN RESETLOGS;
详细内容见:Oracle Flashback 技术全解。
10. 备份监控
10.1 查看备份
-- CDB 备份
SELECT
con_id,
bs_key,
backup_type,
completion_time,
elapsed_seconds
FROM v$backup_set
ORDER BY completion_time DESC;
10.2 PDB 备份
SELECT
p.name AS pdb_name,
b.bs_key,
b.backup_type,
b.completion_time
FROM v$backup_set b, v$pdbs p
WHERE b.con_id = p.con_id
ORDER BY b.completion_time DESC;
10.3 备份进度
SELECT
sid,
serial#,
opname,
target,
sofar,
totalwork,
time_remaining
FROM v$session_longops
WHERE opname LIKE '%RMAN%';
11. 常见坑与排错
11.1 ORA-39166: 对象不存在
现象:PDB 备份失败。
修复:
-- 1. 检查 PDB 状态
SELECT name, open_mode FROM v$pdbs;
-- 2. PDB 必须处于 MOUNT 或 OPEN
ALTER PLUGGABLE DATABASE hrpdb OPEN;
11.2 PDB PITR 失败
修复:
-- 1. 检查归档
SELECT sequence#, archived FROM v$archived_log ORDER BY sequence# DESC;
-- 2. 检查辅助实例空间
-- 3. 使用 19c+ 自动辅助实例
11.3 PDB 恢复后无法打开
修复:
-- 1. 检查 RESETLOGS
RMAN> ALTER PLUGGABLE DATABASE hrpdb OPEN RESETLOGS;
-- 2. 检查违规
SELECT message FROM pdb_plug_in_violations WHERE name='HRPDB';
11.4 备份空间不足
修复:
-- 1. 检查空间
df -h /u01/backup
-- 2. 删除旧备份
RMAN> DELETE OBSOLETE;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
11.5 CDB 恢复失败
修复:
-- 1. 检查控制文件
SELECT name, status FROM v$controlfile;
-- 2. 检查数据文件
SELECT file_name, status FROM dba_data_files;
-- 3. 启动到 nomount
STARTUP NOMOUNT;
12. 最佳实践
- 定期 CDB 全备份:基础保障
- PDB 独立备份:精细管理
- PDB PITR 测试:验证恢复
- 多 PDB 并行备份:提升性能
- 启用压缩加密:节省空间+保护数据
- 配置保留策略:避免空间膨胀
- 监控备份:v$backup_set
- 测试恢复:定期演练
- 19c+ 用 PDB Flashback:快速恢复
- Data Guard 灾备:异地容灾
13. 参考资料
[1] Oracle Multitenant Administrator’s Guide 19c, “Backing Up and Recovering CDBs and PDBs” https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/
[2] Oracle Database Backup and Recovery User’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/