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
13. 常见坑与排错
13.1 ORA-19809
- FRA 满
- DELETE OBSOLETE
- 增大 FRA
13.2 备份不被删除
- 保留策略
- 检查 REPORT OBSOLETE
13.3 恢复失败
- 备份不存在
- CROSSCHECK
- DELETE EXPIRED
14. 最佳实践
- Recovery Window:PITR
- Redundancy:简单
- 定期 CROSSCHECK:每日
- DELETE OBSOLETE:清理
- 监控 FRA:空间
- 自动化:脚本
- 测试恢复:验证
- 长期归档:磁带
- 文档:策略
- 演练:定期
15. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “Retention Policies” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/