RMAN磁盘备份需同时配置COMPRESSED BACKUPSET和BASIC压缩算法才真正生效;仅加AS COMPRESSED BACKUPSET或设MEDIUM/HIGH算法无效,因磁盘仅支持BASIC;验证须查V$RMAN_BACKUP_JOB_DETAILS中OUTPUT_BYTES_DISPLAY是否显著小于INPUT_BYTES_DISPLAY。
rman压缩备份确实能节省空间,但前提是真正启用并生效——默认不压缩,as compressed backupset 只是声明意图,不是魔法开关。
为什么 backup as compressed backupset 没变小?
常见错误现象:BACKUP AS COMPRESSED BACKUPSET DATABASE 执行后,生成的备份文件大小和未加 COMPRESSED 时几乎一样。
根本原因不是命令写错了,而是 RMAN 没有实际调用压缩算法:
-
CONFIGURE COMPRESSION ALGORITHM未设置,或设成了不被当前环境支持的值(如'MEDIUM'或'HIGH') - 你用的是纯磁盘备份(
DEVICE TYPE DISK),但配置了'LOW'或'MEDIUM'—— 这些算法只在配合 Oracle Secure Backup(OSB)或第三方介质管理器(如 NetBackup、Commvault)时才生效 - 文件系统级压缩(如 ZFS、NetApp、NFS 压缩)已开启,掩盖了 RMAN 自身是否压缩,导致
OUTPUT_BYTES_DISPLAY看似没变化,其实底层 I/O 已减少
验证是否真压缩,别看文件大小,查视图:SELECT INPUT_BYTES_DISPLAY, OUTPUT_BYTES_DISPLAY, COMPRESSION_RATIO FROM V$RMAN_BACKUP_JOB_DETAILS WHERE START_TIME > SYSDATE - 1/24 ORDER BY START_TIME DESC;
只要 OUTPUT_BYTES_DISPLAY 明显小于 INPUT_BYTES_DISPLAY,才算 RMAN 级压缩成功。
磁盘备份该配哪个 compression algorithm?
Oracle 12c+ 支持 'BASIC'、'LOW'、'MEDIUM'、'HIGH',但磁盘备份(DEVICE TYPE DISK)仅支持 'BASIC'。
实操建议:
- 执行:
CONFIGURE COMPRESSION ALGORITHM 'BASIC';—— 这是唯一兼容磁盘备份的选项 -
'BASIC'基于 LZ77 变种,CPU 开销低,压缩比通常 2x~3x,适合日常生产环境 - 不要尝试
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';—— 在纯磁盘环境下会被静默忽略,SHOW COMPRESSION ALGORITHM虽显示MEDIUM,但实际不生效 - 想确认当前生效算法,运行:
SHOW COMPRESSION ALGORITHM;,再结合V$RMAN_BACKUP_JOB_DETAILS中的COMPRESSION_RATIO交叉验证
configure device type disk backup type to compressed backupset 是必须的吗?
不是必须,但推荐显式配置,避免每次 BACKUP 都要写 AS COMPRESSED BACKUPSET。
两种等效方式:
- 全局配置(一劳永逸):
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET; - 单次覆盖(更灵活):
BACKUP AS COMPRESSED BACKUPSET DATABASE;—— 优先级高于全局配置
注意:CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; 会关闭压缩;若之前配过压缩,这条命令会清掉它。
另外,这个配置和 CONFIGURE COMPRESSION ALGORITHM 是正交关系:前者决定“是否走压缩路径”,后者决定“用什么算法压缩”。两者都得配对,压缩才真正启用。
压缩带来的代价容易被忽略
压缩不是免费午餐,三个硬事实:
- CPU 使用率会上升,尤其在高并发备份时,可能影响 OLTP 性能;建议避开业务高峰执行
- 备份耗时增加(实测约 +30%~100%,取决于数据可压缩性与 CPU 资源),
BACKUP的ELAPSED_SECONDS会明显变长 - 恢复时间也变长——RMAN 必须先解压再还原,不能跳过膨胀步骤;相比镜像副本(
BACKUP AS COPY),恢复慢是确定的
真正关键的一点:如果你的存储本身支持硬件压缩(如全闪存阵列、ZFS pool 启用 compression=on),RMAN 压缩可能反而降低吞吐——因为双重压缩浪费 CPU,且文件系统层压缩对随机块更高效。这种场景下,关掉 RMAN 压缩、依赖底层压缩,才是更优选择。


















