如何配置Oracle RMAN备份压缩功能

作者:袖梨 2026-08-10

RMAN压缩备份能节省空间,但需同时满足三条件:企业版、显式配置CONFIGURE COMPRESSION ALGORITHM 'BASIC'、磁盘设备类型;仅写AS COMPRESSED BACKUPSET无效,须查V$RMAN_BACKUP_JOB_DETAILS中OUTPUT_BYTES_DISPLAY显著小于INPUT_BYTES_DISPLAY且COMPRESSION_RATIO>1.0才确认生效。

为什么 AS COMPRESSED BACKUPSET 没压缩?

写了这个关键字但备份文件大小几乎没变,不是命令错了,而是 RMAN 根本没调用压缩算法。它只是声明“我想压缩”,不等于“已经压缩”。真正起作用的是 CONFIGURE COMPRESSION ALGORITHM 的值,以及你用的设备类型和 Oracle 版本。

  1. AS COMPRESSED BACKUPSET 在磁盘备份中纯属“意图声明”,无实际压缩能力
  2. 如果当前 SHOW COMPRESSION ALGORITHM 返回 'MEDIUM''HIGH',而你用的是 DEVICE TYPE DISK,RMAN 会静默忽略压缩,生成未压缩备份集
  3. Standard Edition 下即使配了 'BASIC',也会跳过——这是 Enterprise Edition 专属功能
  4. 文件系统级压缩(如 ZFS、NetApp)开启后,ls -lh 看到的文件大小可能误导你,实际 RMAN I/O 并未减少

磁盘备份该配哪个 COMPRESSION ALGORITHM?

Oracle 12c+ 支持 'BASIC''LOW''MEDIUM''HIGH',但磁盘只认 'BASIC' —— 其他全无效。

  1. 执行 CONFIGURE COMPRESSION ALGORITHM 'BASIC'; 是唯一有效动作
  2. 'BASIC' 基于 LZ77 变种,CPU 开销低,日常生产够用;压缩比通常 2x~5x(取决于数据空字段、重复块比例)
  3. 别试 CONFIGURE COMPRESSION ALGORITHM 'MEDIUM'; —— SHOW COMPRESSION ALGORITHM 会显示它,但 V$RMAN_BACKUP_JOB_DETAILSCOMPRESSION_RATIO 仍为 1.0
  4. 想确认是否真生效?查视图:SELECT 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_DISPLAYCOMPRESSION_RATIO > 1.0

要不要配 CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET?

这不是必须项,但强烈建议配。它省得每次 BACKUP 都写 AS COMPRESSED BACKUPSET,避免漏写。

  1. 执行 CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET; 后,所有磁盘 BACKUP DATABASE 自动带压缩意图
  2. 但它本身不触发压缩——仍依赖 CONFIGURE COMPRESSION ALGORITHM 'BASIC' 才真正生效
  3. 如果之后想关压缩,用 CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; 即可,不用改算法
  4. 注意:这个配置不影响 sbt 设备(如云存储或磁带),sbt 可用 'LOW'/'MEDIUM' 等高级算法

验证压缩是否真起效的三个硬指标

别信文件大小,也别只看命令有没有 COMPRESSED 字样。RMAN 压缩是否真实发生,只看这三列:

  1. STATUS = 'COMPLETED':排除路径权限、闪回区满、控制文件路径未显式配置等干扰
  2. COMPRESSION_RATIO > 1.0:比如 3.2 表示逻辑输入是输出的 3.2 倍;= 1.0 就是没压(高熵数据如加密列、频繁更新事务表也可能导致接近 1.0)
  3. OUTPUT_BYTES_DISPLAY < INPUT_BYTES_DISPLAY:这才是 RMAN 实际写入磁盘的字节数,比文件系统显示更可信

压缩效果高度依赖数据特征:大量空字段、静态索引叶块、未更新的 LOB 能压出 4x+;已压缩归档日志、加密 BLOB、随机变更块基本压不动。这点容易被忽略,但决定你是否值得为压缩多花 CPU。

相关文章

精彩推荐