Oracle CDB/PDB 备份恢复策略

Oracle CDB/PDB 备份恢复策略

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


1. 概述

多租户环境中备份恢复策略[1]:

层级备份对象命令
CDB整个 CDBBACKUP DATABASE
PDB单个 PDBBACKUP PLUGGABLE DATABASE
RootCDB$ROOTBACKUP 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. 最佳实践

  1. 定期 CDB 全备份:基础保障
  2. PDB 独立备份:精细管理
  3. PDB PITR 测试:验证恢复
  4. 多 PDB 并行备份:提升性能
  5. 启用压缩加密:节省空间+保护数据
  6. 配置保留策略:避免空间膨胀
  7. 监控备份:v$backup_set
  8. 测试恢复:定期演练
  9. 19c+ 用 PDB Flashback:快速恢复
  10. 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/