随着数据库的不断增长,其备份占用的空间也在不断增长。
幸运的是,RMAN 内置了压缩此类大型备份的支持,这比使用 TAR 等操作系统实用程序更方便。
以下是 RMAN 使用的 3 种压缩技术:
- 空压缩
- 未使用的块压缩
- 二进制压缩
RMAN 默认使用块压缩,这就是我们不能将其关闭(或者打开)的原因。
有两种块压缩模式可用,未使用块压缩 (UBC) 和空块压缩 (NBC)。
在 NBC 中,所有未使用的空块都被跳过。
此模式始终用于级别 0 和完整备份。
在 UBC 中,没有被任何对象使用的块不会被读取或者包含在备份中。
甚至过去使用但现在为空的块(例如,截断表或者删除表操作后的块)也被跳过。
与适用于所有备份的 NBC 不同,UBC 仅适用于使用 Oracle Secure Backup 完成的基于磁盘的备份和磁带备份。
由于块级压缩是开箱即用的,因此没有特别的理由在 BACKUP 命令中提及它。
各种压缩类型
对于各种压缩类型,我们可以参考 V$RMAN_COMPRESSION_ALGORITHM 视图。
SQL> select ALGORITHM_NAME, ALGORITHM_DESCRIPTION, ALGORITHM_COMPATIBILITY from V$RMAN_COMPRESSION_ALGORITHM ; ALGORITHM_NAME ALGORITHM_DESCRIPTION ALGORITHM_COMPATIB --------------- ------------------------------------------------------------ ----------------- BZIP2 good compression ratio 9.2.0.0.0 BASIC good compression ratio 9.2.0.0.0 LOW maximum possible compression speed 11.2.0.0.0 ZLIB balance between speed and compression ratio 11.0.0.0.0 MEDIUM balance between speed and compression ratio 11.0.0.0.0 HIGH maximum possible compression ratio 11.2.0.0.0 6 rows selected.
3. 二进制压缩
二进制压缩可以通过在备份命令中指定“AS COMPRESSED”子句来完成,这种压缩称为二进制压缩。
RMAN 可以在将数据写入备份集时应用二进制压缩算法。
这种压缩类似于许多磁带供应商在将数据备份到磁带时提供的压缩。
但是我们不能给出确切的压缩百分比。
这种二进制压缩算法可以大大减少磁盘备份存储所需的空间。
它通常是 2 到 4 倍,对于文本密集型数据库来说更大。
进行压缩备份的命令:
RMAN> backup as compressed backupset database;
有一些与压缩备份集相关的 CPU 开销。
如果正在备份的数据库以最大负载或者接近其最大负载运行,我们可能会发现使用 AS COMPRESSED BACKUPSET 的开销是不可接受的。
在大多数其他情况下,压缩备份集可以节省足够的磁盘空间,值得 CPU 开销。
没有特殊的命令可以从压缩的备份集恢复数据库,恢复命令将与未压缩的备份相同。
从压缩的备份集恢复将比未压缩的备份集花费更多的时间。
除了 Oracle 10G 中现有的备份二进制压缩,RMAN 11G 可执行文件通过高级压缩选项 (ACO) 提供更广泛的压缩级别。
默认压缩算法设置为 BASIC,不需要高级压缩选项。
但是,如果我们启用了 Oracle Database 11g 第 2 版高级压缩选项,则可以从以下压缩级别中进行选择:
- 低 - 对备份吞吐量的影响最小,适用于 CPU 资源是限制因素的环境。
- 中 - 推荐用于大多数环境。压缩比和速度的良好组合
- HIGH - 最适合通过较慢的网络进行备份,其中限制因素是网络速度
下表总结了所有压缩模式:
压缩模式 | 默认 | 需要 ACO | 备份大小 | CPU 负荷 |
---|---|---|---|---|
Basic | Yes | No | 小 | 中等到高 |
Low | No | Yes | 小 | 低 |
Medium | No | Yes | 中等 | 中等 |
High | No | Yes | 最小 | 非常高 |
压缩可用于数据文件、归档日志和控制文件的备份集。
例如:
RMAN> backup as compressed backupset archivelog all; RMAN> backup as compressed backupset database; RMAN> backup as compressed backupset current controlfile;
RMAN 在写入磁盘之前压缩备份集内容。
rman 压缩备份在恢复过程中不需要另外的解压步骤;
配置压缩算法:
RMAN> CONFIGURE COMPRESSION ALGORITHM '[alg_name]';
撤消块压缩/优化
从 11g 开始,RMAN 执行撤消块优化。
在备份撤消优化中,RMAN 排除了备份恢复不需要的撤消,即已提交的事务。
只有在以下情况下才能撤消优化:
- 这是备份集备份。
- 完整或者增量级别 0。
- 不是验证。
- 备份片版本为11.0或者以上。
- 用户未使用“_undo_block_compression = FALSE”禁用撤销优化
- 备份到磁盘或者 OSB 磁带。
- 无保证还原点(从 11.2 开始启用此检查)。
2. 未使用的块压缩
从 Oracle 10.2 版开始,RMAN 会跳过当前不包含数据的块,这称为“未使用的块压缩”。
RMAN 现在通过跳过当前未用于存储数据的数据文件块来创建更紧凑的数据文件备份。
在可能的情况下跳过未使用的数据块使 RMAN 能够使用更少的空间来备份数据文件,并且可以提高 I/O 的效率。
在以前的版本中,RMAN 仅支持 NULL 压缩,这会跳过从未分配过的数据文件中的空间。
DBA 无需另外操作即可使用此功能。
示例:我们有一个表空间,其中包含一个大小为 100MB 的数据文件,并且在 100MB 中,用户表使用了 50MB。
然后用户删除了一个属于该表空间的表,该表为 25MB,并备份了 25MB 文件上的新未使用块压缩。
在此示例中,如果使用空压缩,则它会备份 50MB,因为空压缩将考虑已格式化/曾经使用过的块。
如果满足以下所有条件,则完成未使用的块压缩:
- COMPATIBLE 初始化参数设置为 10.2
- 目前没有为数据库定义的保证还原点
- 数据文件在本地管理
- 正在将数据文件备份到备份集,作为完整备份或者 0 级增量备份的一部分
- 正在磁盘上创建备份集
- 使用“OSB”(Oracle 安全备份)对 TAPE 进行备份!
1. 空压缩
将数据文件备份到备份集中时,RMAN 不会备份从未分配过的数据块的内容。
在以前的版本中,这种行为被称为 NULL 压缩。
这意味着 RMAN 永远不会备份从未使用过的块。
RMAN,通过 Oracle 版本 9i 和更高版本已经执行了空压缩。
示例:我们有一个表空间,其中包含一个大小为 100MB 的数据文件,并且在 100MB 中仅使用了 50 MB。
然后 RMAN 将只备份 50MB。