Oracle RMAN 保留策略详解

Oracle RMAN 保留策略详解

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


1. 概述

RMAN 保留策略决定备份何时过期[1]:

详细见:Oracle RMAN 备份恢复全集Oracle 备份策略与最佳实践


2. 保留策略类型

2.1 Recovery Window

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- 保留足够恢复到过去 N 天的备份
- 适合 PITR

2.2 Redundancy

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
- 保留 N 份备份
- 简单

2.3 None

CONFIGURE RETENTION POLICY TO NONE;
- 无策略
- 手动管理

3. 配置

3.1 查看

RMAN> SHOW ALL;
RMAN> SHOW RETENTION POLICY;

3.2 修改

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
CONFIGURE RETENTION POLICY TO NONE;

4. 过期备份

4.1 REPORT OBSOLETE

RMAN> REPORT OBSOLETE;
RMAN> REPORT OBSOLETE RECOVERY WINDOW OF 7 DAYS;

4.2 DELETE OBSOLETE

RMAN> DELETE OBSOLETE;
RMAN> DELETE NOPROMPT OBSOLETE;

4.3 过期 vs 无效

- OBSOLETE:保留策略外
- EXPIRED:物理不存在

5. Recovery Window

5.1 逻辑

- 保留恢复到过去 N 天所需的所有备份
- 包括:全备、增量、归档
- 满足 PITR

5.2 示例

- 7 天窗口
- 最新全备
- 之前的全备(若覆盖 7 天前)
- 所有归档(覆盖 7 天)

6. Redundancy

6.1 逻辑

- 保留 N 份完整备份集
- 简单
- 可能不满足 PITR

6.2 示例

- Redundancy 2
- 保留 2 个最新全备
- 旧全备 OBSOLETE

7. REPORT

7.1 NEED BACKUP

RMAN> REPORT NEED BACKUP;
RMAN> REPORT NEED BACKUP DAYS 3;
RMAN> REPORT NEED BACKUP REDUNDANCY 2;
RMAN> REPORT NEED BACKUP RECOVERY WINDOW OF 7 DAYS;

7.2 UNRECOVERABLE

RMAN> REPORT UNRECOVERABLE;

7.3 SCHEMA

RMAN> REPORT SCHEMA;
RMAN> REPORT SCHEMA AT TIME 'SYSDATE-1';

8. LIST

8.1 备份

RMAN> LIST BACKUP SUMMARY;
RMAN> LIST BACKUP BY FILE;
RMAN> LIST BACKUP OF DATABASE;
RMAN> LIST BACKUP OF TABLESPACE users;
RMAN> LIST BACKUP OF DATAFILE 5;
RMAN> LIST BACKUP OF ARCHIVELOG ALL;
RMAN> LIST BACKUP OF CONTROLFILE;
RMAN> LIST BACKUP OF SPFILE;

8.2 副本

RMAN> LIST COPY;
RMAN> LIST COPY OF DATABASE;
RMAN> LIST COPY OF ARCHIVELOG ALL;

8.3 详细

RMAN> LIST BACKUP VERBOSE;

9. CROSSCHECK

9.1 检查

RMAN> CROSSCHECK BACKUP;
RMAN> CROSSCHECK COPY;
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> CROSSCHECK BACKUP COMPLETED AFTER 'SYSDATE-7';

9.2 结果

- AVAILABLE:存在
- EXPIRED:不存在

9.3 删除 EXPIRED

RMAN> DELETE EXPIRED BACKUP;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
RMAN> DELETE EXPIRED COPY;

10. 自动化

10.1 脚本

#!/bin/bash
rman target / <<EOF
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT OBSOLETE;
EOF

10.2 调度

0 3 * * * /u01/scripts/rman_maintenance.sh

11. 应用场景

11.1 日常备份

- Recovery Window 7-30 天
- 满足 PITR

11.2 长期归档

- 备份到磁带
- 长期保留
- 单独管理

11.3 测试环境

- Redundancy 1
- 节省空间

12. FRA 空间

12.1 监控

SELECT name, space_limit, space_used, space_reclaimable
FROM v$recovery_file_dest;

SELECT file_type, percent_space_used, percent_space_reclaimable
FROM v$flash_recovery_area_usage;

12.2 清理

- DELETE OBSOLETE
- DELETE EXPIRED
- 增大 FRA

详细见:Oracle 归档日志管理与 FRA 空间


13. 常见坑与排错

13.1 ORA-19809

- FRA 满
- DELETE OBSOLETE
- 增大 FRA

13.2 备份不被删除

- 保留策略
- 检查 REPORT OBSOLETE

13.3 恢复失败

- 备份不存在
- CROSSCHECK
- DELETE EXPIRED

14. 最佳实践

  1. Recovery Window:PITR
  2. Redundancy:简单
  3. 定期 CROSSCHECK:每日
  4. DELETE OBSOLETE:清理
  5. 监控 FRA:空间
  6. 自动化:脚本
  7. 测试恢复:验证
  8. 长期归档:磁带
  9. 文档:策略
  10. 演练:定期

15. 参考资料

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