RMAN备份磁盘空间不足主因是FRA配额耗尽、压缩未生效(需同时配置COMPRESS ALGORITHM 'BASIC'和AS COMPRESSED BACKUPSET)、归档堆积三者叠加;须查v$recovery_file_dest确认真实使用率,再通过CROSSCHECK+DELETE EXPIRED/ARCHIVELOG/OBSOLETE清理或合理扩容db_recovery_file_dest_size。

RMAN备份磁盘空间不足,八成不是磁盘真满了,而是FRA配额卡死、压缩没生效、归档堆积这三件事叠在一起。单独扩磁盘或删文件,解决不了问题。
为什么BACKUP AS COMPRESSED BACKUPSET生成的文件还是那么大
常见错误现象:BACKUP AS COMPRESSED BACKUPSET DATABASE执行成功,但.bkp文件大小和不加COMPRESSED几乎一样。
- 根本原因不是语法错,而是RMAN压根没调用压缩算法:要么
CONFIGURE COMPRESSION ALGORITHM根本没设,要么设成了'MEDIUM'或'HIGH'——这两个在DEVICE TYPE DISK下会被静默忽略 - 你用的是Standard Edition?那
AS COMPRESSED BACKUPSET直接被忽略,不报错也不压缩 - 底层文件系统开了ZFS/NFS压缩,会掩盖RMAN是否真压缩,造成误判
- 实操建议:必须执行
CONFIGURE COMPRESSION ALGORITHM 'BASIC';(11g起支持),这是磁盘备份唯一有效的选项;'BASIC'基于LZ77变种,CPU开销低,日常压缩比通常2x~3x
怎么确认FRA(闪回恢复区)是不是真满了
ORA-19809和ORA-19804报错,本质是db_recovery_file_dest_size逻辑配额耗尽,跟df -h显示的物理磁盘剩余完全无关。
- 必须进数据库查真实占用:
SELECT name, space_limit/1024/1024/1024 AS "GB Limit", space_used/1024/1024/1024 AS "GB Used", ROUND(space_used/space_limit*100, 2) AS "Pct Used" FROM v$recovery_file_dest; - 如果
Pct Used≥ 95%,说明FRA已被归档或过期备份占满;再查v$flash_recovery_area_usage看哪类文件占比高(比如ARCHIVED LOG占99%,就是归档没清理) - 别信
SHOW PARAMETER db_recovery_file_dest就完事——参数值可能和挂载点实际空间严重不匹配,比如设了10G但挂载点只剩2G,Oracle启动时都可能拒绝归档
RMAN清理归档日志的正确顺序是什么
手动rm归档日志后df -h不释放空间,是因为控制文件和RMAN资料库还存着元数据记录。必须用RMAN同步清理,否则FRA使用率不会下降。
- 先
CROSSCHECK ARCHIVELOG ALL;:把OS层已删但控制文件还记着的“幽灵归档”标为EXPIRED - 再
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;:清除这些元数据残留 - 然后
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';:删真正过期的物理归档(注意用COMPLETED BEFORE,它查的是v$archived_log.completion_time,比SYSDATE更准) - 最后
DELETE NOPROMPT OBSOLETE;:按当前保留策略删无恢复价值的备份 - 清理后务必跑
LIST RECOVERY AREA确认空间释放,别只看DELETE输出的“deleted”
清理完还是不够用,要不要扩FRA配额
临时扩容可以救急,但必须匹配物理磁盘余量,否则可能引发更严重问题。
- 动态修改(10gR2+单实例常见):
ALTER SYSTEM SET db_recovery_file_dest_size = 8G SCOPE=BOTH; - 若报
ORA-02095,说明参数是静态的,得改SCOPE=SPFILE再重启:SHUTDOWN IMMEDIATE; STARTUP; - 设太大但挂载点实际空间不足,Oracle启动时会检查并可能拒绝归档,甚至实例崩溃;设太小(如默认2G/4G),高事务库几天就满
- 改完立刻查
v$recovery_file_dest确认SPACE_LIMIT已更新,再做CROSSCHECK和DELETE
最容易被忽略的一点:很多定时清理脚本只写DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7',漏掉CROSSCHECK和DELETE EXPIRED,长期运行后会出现“文件已删但FRA配额仍被占”的假满现象——空间根本没真正释放。


















