rman压缩分块级(ubc/nbc)和二进制(advanced compression)两层:ubc/nbc默认生效,仅跳过未用/空块,体积减少10%–30%;二进制压缩需企业版、advanced compression许可及显式as compressed backupset,否则静默失效或报错。

RMAN压缩不是“开个开关就能省一半空间”,它分层生效、受版本和许可严格限制,盲目启用 AS COMPRESSED BACKUPSET 可能导致备份失败或恢复异常。
块级压缩(UBC/NBC)默认生效,但不等于“已压缩备份集”
Oracle 10gR2 起,所有 RMAN 备份默认启用块级压缩:跳过未使用块(UBC)或空块(NBC)。这属于物理层面的“瘦身”,不依赖 Advanced Compression 许可,也不需要显式命令。但它只减少块数量,不改变数据块内部字节结构——所以备份集体积下降有限,通常 10%–30%。
-
BACKUP DATABASE和BACKUP ARCHIVELOG命令天然享受 UBC/NBC,无需加任何选项 - UBC 仅对磁盘备份和 Oracle Secure Backup 磁带备份有效;NBC 全场景适用
- 如果表空间大量执行过
TRUNCATE或DROP,UBC 效果会更明显;否则 NBC 是主力 - 注意:块压缩不会降低备份集文件数或影响
MAXPIECESIZE分片逻辑
二进制压缩(Advanced Compression)必须显式启用且需对应许可
真正大幅缩减体积(通常 50%–70%)靠的是二进制压缩,即 Advanced Compression 选件提供的算法。它在备份写入前对数据块做 LZ、BZIP2 或 ZLIB 级别压缩,但必须满足三个硬性条件:数据库版本 ≥ 11.2、已安装 Advanced Compression 选项、且 RMAN 命令中明确指定 AS COMPRESSED BACKUPSET。
- 错误示例:
BACKUP DATABASE;—— 即使有许可,也不会触发二进制压缩 - 正确写法:
BACKUP AS COMPRESSED BACKUPSET DATABASE; - 压缩级别可选(需 12c+):
BACKUP AS COMPRESSED BACKUPSET SECTION SIZE 1G DATABASE PLUS ARCHIVELOG;后加COMPRESS FOR LOW/MEDIUM/HIGH - 没买许可却执行该命令,RMAN 报错:
ORA-19566: exceeded limit of 0 corrupt blocks for file ...(实际是许可校验失败伪装成坏块)
压缩级别选择直接影响 CPU 与体积的平衡
从 LOW 到 HIGH,压缩率递增,但 CPU 消耗非线性上升。实测中,MEDIUM 在多数 OLTP 环境下是性价比拐点:体积减少约 60%,CPU 增幅可控(
-
COMPRESS FOR LOW:接近传统 UBC+NBC 效果,适合归档日志备份等 I/O 密集型任务 -
COMPRESS FOR MEDIUM:推荐作为生产库全备默认策略 -
COMPRESS FOR HIGH:仅建议用于冷备归档、长期保留场景,且需确认备份窗口允许延长 - 压缩不改变恢复流程:还原时 RMAN 自动解压,无需额外步骤或磁盘空间预留
最容易被忽略的一点:压缩效果高度依赖数据可压缩性。含大量加密字段、LOB(尤其是已压缩的 BLOB)、或已用 SecureFile 加密的表空间,二进制压缩收益极低,甚至可能略微增大体积。上线前务必用 BACKUP VALIDATE + LIST BACKUP 对比压缩前后 BYTES 和 ELAPSED_SECONDS。不要只看文档里的百分比数字。











