AS COMPRESSED BACKUPSET 仅声明压缩意图,实际压缩需满足三前提:必须为Oracle企业版、CONFIGURE COMPRESSION ALGORITHM 显式设为BASIC(磁盘唯一支持算法)、控制文件自动备份路径须显式配置,否则静默失效。
oracle 19c 中 as compressed backupset 不等于真压缩,必须配合 configure compression algorithm 才生效;磁盘备份只认 basic,high 等高级算法在磁盘上静默失效。
为什么 BACKUP AS COMPRESSED BACKUPSET 备份文件没变小
这是最常踩的坑:命令里写了 COMPRESSED,但实际没压缩。根本原因是 RMAN 的压缩不是靠 SQL 关键字开关驱动的,而是由底层配置和运行环境共同决定的。
-
AS COMPRESSED BACKUPSET只是声明“我想压缩”,不保证压缩发生 - 真正起作用的是
CONFIGURE COMPRESSION ALGORITHM 'BASIC'—— 这是唯一被磁盘备份支持的算法 - 如果当前配置是
'LOW'、'MEDIUM'或'HIGH',而你又没用 Oracle Secure Backup(OSB)或第三方媒体管理器(如云 SBT 插件),RMAN 会直接忽略压缩请求,生成未压缩备份集 - Standard Edition 下即使配了
BASIC,也会静默跳过(企业版专属功能)
如何确认当前压缩配置是否生效
不能只看备份文件大小,得查 RMAN 内部元数据。执行完一次备份后,立即运行:
SELECT INPUT_BYTES_DISPLAY, OUTPUT_BYTES_DISPLAY, COMPRESSION_RATIO, STATUS FROM V$RMAN_BACKUP_JOB_DETAILS WHERE START_TIME > SYSDATE - 1/24 ORDER BY START_TIME DESC;
关键看三列:
-
COMPRESSION_RATIO > 1.0:说明有压缩收益(比如 3.2 表示逻辑输入是输出的 3.2 倍) OUTPUT_BYTES_DISPLAY :写入磁盘的实际字节数确实减少了-
STATUS = 'COMPLETED'且无报错:排除权限、路径、闪回区满等干扰
如果 COMPRESSION_RATIO = 1.0,大概率是算法没启用,或数据本身不可压(如已加密 LOB、归档日志中大量随机变更块)。
CONFIGURE COMPRESSION ALGORITHM 各选项在磁盘上的真实行为
Oracle 19c 支持多种算法,但磁盘设备(DEVICE TYPE DISK)只认一个:
-
BASIC:唯一可用选项,基于 LZ77,开销低,压缩比通常 2x–5x(对空字段多、索引叶块未更新的数据效果最好) -
LOW/MEDIUM/HIGH:仅在SBT_TAPE设备下有效(如对接云存储或 OSB),磁盘备份时完全无视,不报错也不压缩 -
ADVANCED:需额外许可(Advanced Compression Option),且仍依赖介质管理器,磁盘不支持
验证方式很简单:
RMAN> SHOW COMPRESSION ALGORITHM;
返回值如果不是 'BASIC',就说明当前配置对磁盘备份无效。
启用压缩前必须检查的三个硬性前提
哪怕配对了 BASIC,以下任一条件不满足,压缩依然不会发生:
- 数据库版本必须是
Enterprise Edition—— Standard Edition 下CONFIGURE COMPRESSION ALGORITHM 'BASIC'会被接受,但备份时静默降级为不压缩 - 控制文件自动备份路径必须显式指定(尤其升级自 11g):
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/path/cf_%F.ctl';,否则可能因闪回区异常导致整个备份流程中断,压缩自然无从谈起 - 如果启用了
BACKUP OPTIMIZATION ON,要确保V$BLOCK_CHANGE_TRACKING.STATUS = 'ENABLED',否则 RMAN 可能因无法判断块变更而跳过压缩逻辑(尤其在增量备份场景)
压缩不是“开了就见效”的黑盒功能,它卡在版本、配置、数据特征三层边界上——漏掉任何一层,AS COMPRESSED BACKUPSET 都只是个语法正确的摆设。











