RMAN压缩备份能节省空间,但需同时满足三条件:企业版、显式配置CONFIGURE COMPRESSION ALGORITHM 'BASIC'、磁盘设备类型;仅写AS COMPRESSED BACKUPSET无效,须查V$RMAN_BACKUP_JOB_DETAILS中OUTPUT_BYTES_DISPLAY显著小于INPUT_BYTES_DISPLAY且COMPRESSION_RATIO>1.0才确认生效。
写了这个关键字但备份文件大小几乎没变,不是命令错了,而是 RMAN 根本没调用压缩算法。它只是声明“我想压缩”,不等于“已经压缩”。真正起作用的是 CONFIGURE COMPRESSION ALGORITHM 的值,以及你用的设备类型和 Oracle 版本。
AS COMPRESSED BACKUPSET 在磁盘备份中纯属“意图声明”,无实际压缩能力SHOW COMPRESSION ALGORITHM 返回 'MEDIUM' 或 'HIGH',而你用的是 DEVICE TYPE DISK,RMAN 会静默忽略压缩,生成未压缩备份集'BASIC',也会跳过——这是 Enterprise Edition 专属功能ls -lh 看到的文件大小可能误导你,实际 RMAN I/O 并未减少Oracle 12c+ 支持 'BASIC'、'LOW'、'MEDIUM'、'HIGH',但磁盘只认 'BASIC' —— 其他全无效。
CONFIGURE COMPRESSION ALGORITHM 'BASIC'; 是唯一有效动作'BASIC' 基于 LZ77 变种,CPU 开销低,日常生产够用;压缩比通常 2x~5x(取决于数据空字段、重复块比例)CONFIGURE COMPRESSION ALGORITHM 'MEDIUM'; —— SHOW COMPRESSION ALGORITHM 会显示它,但 V$RMAN_BACKUP_JOB_DETAILS 里 COMPRESSION_RATIO 仍为 1.0SELECT INPUT_BYTES_DISPLAY, OUTPUT_BYTES_DISPLAY, COMPRESSION_RATIO FROM V$RMAN_BACKUP_JOB_DETAILS WHERE START_TIME > SYSDATE - 1/24; —— 关键看 OUTPUT_BYTES_DISPLAY < INPUT_BYTES_DISPLAY 且 COMPRESSION_RATIO > 1.0
这不是必须项,但强烈建议配。它省得每次 BACKUP 都写 AS COMPRESSED BACKUPSET,避免漏写。
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET; 后,所有磁盘 BACKUP DATABASE 自动带压缩意图CONFIGURE COMPRESSION ALGORITHM 'BASIC' 才真正生效CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; 即可,不用改算法sbt 设备(如云存储或磁带),sbt 可用 'LOW'/'MEDIUM' 等高级算法别信文件大小,也别只看命令有没有 COMPRESSED 字样。RMAN 压缩是否真实发生,只看这三列:
STATUS = 'COMPLETED':排除路径权限、闪回区满、控制文件路径未显式配置等干扰COMPRESSION_RATIO > 1.0:比如 3.2 表示逻辑输入是输出的 3.2 倍;= 1.0 就是没压(高熵数据如加密列、频繁更新事务表也可能导致接近 1.0)OUTPUT_BYTES_DISPLAY < INPUT_BYTES_DISPLAY:这才是 RMAN 实际写入磁盘的字节数,比文件系统显示更可信压缩效果高度依赖数据特征:大量空字段、静态索引叶块、未更新的 LOB 能压出 4x+;已压缩归档日志、加密 BLOB、随机变更块基本压不动。这点容易被忽略,但决定你是否值得为压缩多花 CPU。