RMAN不自动清理归档日志,需通过外部调度器定期执行包含CROSSCHECK、DELETE EXPIRED和DELETE COMPLETED BEFORE三步的脚本;未校验则RMAN“看不见”文件,元数据超control_file_record_keep_time后彻底失控。
rman 本身不自动清理归档日志——它只在你明确执行 delete archivelog 或 backup ... delete input 时才动手删。所谓“自动”,全靠外部调度器(如 cron 或 windows 任务计划)定期调用脚本实现,且必须包含状态校验、过期清理、时间条件删除三步闭环。
为什么 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7' 常常没效果
这不是语法问题,而是 RMAN “看不见”那些文件:
-
CROSSCHECK ARCHIVELOG ALL没先执行:控制文件里记录的归档状态可能已陈旧,物理文件还在磁盘上,但 RMAN 不知道它们存在;不校验就删,会跳过实际存在的归档 - 归档路径不在
DB_RECOVERY_FILE_DEST或 RMAN 控制文件识别范围内:比如归档被手动挪到其他目录,LIST ARCHIVELOG ALL根本查不到,自然删不了 -
control_file_record_keep_time默认约 30 天:超过这个时间的归档元数据会被覆盖,RMAN 完全无法识别,只能用find手工清理 - OS 层面无写权限:RMAN 能连库,但删文件时被系统拒绝,错误往往只记在日志里,终端无提示
脚本里必须包含的三个 RMAN 步骤
缺一不可,顺序也不能乱。否则会出现“删了文件但 df -h 不释放空间”或“FRA 使用率居高不下”的假满现象:
-
CROSSCHECK ARCHIVELOG ALL:强制扫描磁盘上的所有归档文件,把缺失的标记为EXPIRED -
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL:清除控制文件中已失效的记录,这是释放 FRA 配额的关键一步 -
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7':按业务保留窗口删有效归档(注意:COMPLETED BEFORE查的是v$archived_log.completion_time,不是文件修改时间)
Linux 下可直接部署的定时清理脚本
以下内容可保存为 /home/oracle/bin/clean_arch.sh,确保 ORACLE_HOME 和 ORACLE_SID 设置正确:
#!/bin/bash export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1 <p>$ORACLE_HOME/bin/rman target / log=/home/oracle/log/clean<em>arch</em>$(date +\%F).log append <<'EOF' CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; DELETE NOPROMPT OBSOLETE; EXIT; EOF
加执行权限后加入 cron:
0 2 * * * /home/oracle/bin/clean_arch.sh > /dev/null 2>&1
注意:DELETE OBSOLETE 是补漏项,它会按当前 RETENTION POLICY 清理所有过期备份和依赖归档,但前提是前面两步已把控制文件同步干净,否则可能漏删。
历史残留归档只能靠操作系统命令处理
如果 LIST ARCHIVELOG ALL 返回的条目远少于 ls -l /path/to/archivelog | wc -l,说明有大量归档超出控制文件记录范围。这些文件 RMAN 永远不会管,必须手工清理:
- 先预览:
find /oracle/app/archivelog -name "*.dbf" -mtime +15 -ls - 再执行:
find /oracle/app/archivelog -name "*.dbf" -mtime +15 -delete - 务必确认路径准确,且这些文件确实早于最近一次全备+归档链的起点时间
最易被忽略的一点:RMAN 的清理逻辑完全依赖控制文件快照,而控制文件本身不存“全量历史”。一旦归档元数据被覆盖,那部分物理文件就彻底脱离 RMAN 管理体系,只能靠运维人工介入。


















