RMAN备份触发归档暴增源于隐式ARCHIVE LOG CURRENT及未删归档。执行BACKUP ARCHIVELOG ALL不加DELETE INPUT会导致旧存新产、空间指数增长;FRA满需先DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1'并CROSSCHECK清理元数据;根治须用DELETE INPUT原子操作、避免PLUS ARCHIVELOG、拆分SCN范围备份,并手工清理控制文件不可见的陈旧归档文件。

为什么RMAN备份会触发归档日志暴增?
RMAN执行BACKUP DATABASE PLUS ARCHIVELOG或BACKUP ARCHIVELOG ALL时,会隐式触发ARCHIVE LOG CURRENT——也就是强制切换当前日志并生成一份新归档。如果备份耗时长(比如大库+慢存储),这过程可能反复切换几十次日志,导致归档量远超日常水平。
更隐蔽的是:某些备份脚本在循环中每轮都执行BACKUP ARCHIVELOG ALL,而没加DELETE INPUT,结果旧归档没删、新归档又不断产生,空间指数级增长。
- 检查归档速率突增是否与备份窗口重合:
SELECT TRUNC(FIRST_TIME) d, COUNT(*) c FROM V$ARCHIVED_LOG GROUP BY TRUNC(FIRST_TIME) ORDER BY d DESC; - 确认备份命令是否包含
DELETE INPUT或DELETE ALL INPUT——漏掉这个,等于只“搬”不“清” - 避免在备份脚本里写
BACKUP ARCHIVELOG ALL;后紧接DELETE ARCHIVELOG ALL;:中间若有新日志生成,会被重复备份
RMAN备份期间归档塞满FRA怎么办?
ORA-19809/ORA-19804报错不是磁盘满了,而是闪回恢复区(FRA)配额耗尽。即使df -h显示还有空间,RMAN也会因db_recovery_file_dest_size限制拒绝写入。
紧急处理必须分两步走:先腾出FRA空间让备份能继续,再查根因。直接ALTER SYSTEM SET db_recovery_file_dest_size扩容只是掩耳盗铃——如果归档还在疯涨,扩完立刻再满。
- 立即释放可用空间:
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';(注意用COMPLETED BEFORE,不是UNTIL TIME) - 同步清理元数据:
CROSSCHECK ARCHIVELOG ALL;→DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; - 查真实占用:
SELECT NAME, ROUND(SPACE_USED/SPACE_LIMIT*100, 1) PCT FROM V$RECOVERY_FILE_DEST;—— 若>95%,说明FRA已被归档占死
如何让RMAN备份不推高归档量?
核心是切断“备份→强制切日志→新归档→再备份”的死循环。Oracle本身不提供“静默备份归档”模式,得靠组合策略规避。
- 改用
BACKUP ARCHIVELOG ALL DELETE INPUT;:把归档备份和删除合并为原子操作,避免中间空档期 - 禁用自动归档切换干扰:备份前临时设
ALTER SYSTEM ARCHIVE LOG CURRENT;一次,确保当前日志已归档,之后备份过程就不会再触发切换 - 对超大库,拆分备份:用
BACKUP ARCHIVELOG FROM SCN xxx UNTIL SCN yyy DELETE INPUT;代替ALL,控制单次处理量 - 别依赖
BACKUP DATABASE PLUS ARCHIVELOG——它默认不删归档,且会在备份末尾再切一次日志,纯属添乱
手动清理RMAN“看不见”的归档文件
控制文件只保留约7–30天的归档元数据(由control_file_record_keep_time决定)。那些年久的*.arc文件,RMAN根本查不到,DELETE ARCHIVELOG命令对它们完全无效。
这类文件物理存在、但不在任何备份集中,也不参与恢复,删了绝对安全——前提是业务RPO允许丢弃对应时间段的日志。
- 先确认哪些文件RMAN管不了:
ls -lt $ORACLE_BASE/flash_recovery_area/$ORACLE_SID/archivelog | head -20,看最老的日期是否远超COMPLETED BEFORE设定值 - 手工删前务必做两件事:
CROSSCHECK ARCHIVELOG ALL;+DELETE NOPROMPT OBSOLETE;,否则v$archived_log状态可能混乱 - 删完后不要忘了:
ALTER SYSTEM SWITCH LOGFILE;触发一次新归档,让控制文件重新建立索引链
归档暴涨从来不是单一操作的问题,而是备份逻辑、FRA配额、控制文件元数据生命周期三者咬合失序的结果。盯着DELETE命令本身没用,得从BACKUP那行代码开始往回捋。


















