对rman 压缩的彻底理解
适用于:
Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.3 [Release 8.1.7 to 11.2]
Information in this document applies to any platform.
***Checked for relevance on 14-Oct-2014***
目标:
rman 压缩是怎么工作的?
解决方案:
默认,rman 有3种类型的压缩:
1. null 压缩
2. unused block 压缩
3. binary 压缩
10.1及其以前,只有null 压缩可以被使用
从10.2开始,null压缩和unused block 压缩 可以被使用。
这些压缩是自动被执行的,不需要特别的命令来执行压缩。
null 压缩和 unused block 压缩 是对进行backup的 block 实施 过滤(当然有过滤的规则)
binary 压缩 是一个额外的压缩,该压缩是在进行backup的block级别实行的。
1. null 压缩
当备份datafile到backupset中时,rman 不会备份 那些 从没有被allocate 的data block(在之前的版本中,该行为被称作null 压缩)
这意味着rman从来不备份 那些 从来没有used的 blocks 。直到oracle 9i ,rman执行的就是null 压缩。
举例:
有一个tablespace,该tablespace有一个datafile,该datafile size 是100MB,在这100MB中,有50MB已经被使用,那么rman只会备份50MB
2.unused block 压缩
从oracle 10.2开始,rman备份时会skip 掉 那些 当前不包括data(数据)的block,该行为称作unused block 压缩。
通过skip掉那些 当前不用来存储data(数据)的block,rman 建立了更为紧凑的datafile的备份。 在之前的oracle版本中,
rman 仅仅支持null 压缩,null压缩是指 skip掉 datafile 中的那些从来没有被allocate过的空间。使用该特性时,不需要dba进行额外的工作。
举例:有一个tablespace,该tablespace中有一个datafile,该datafile有100MB,在100MB中,50MB 已经被user table使用掉了。
然后 user drop了 该表空间中一个25MB的表,with the new Unused Block Compression on 25MB of the files is backed up.
在该例子中,若是使用null压缩的话,将会备份50MB,null压缩会考虑(其实考虑翻译成备份更为合适)那些已经formattd,曾经used 过的block。
如果下面的所有条件被满足,unused block 压缩才会被启用:
1) compatible 参数被设置为10.2
2) db中没有定义guaranteed restore points
3) datafile 是本地管理
4) datafile作为 full backup 或者level 0 incremental backup 的备份集的一部分被备份、
5) 备份集被创建在disk上
或者
使用OSB(Oracle Secure Backup)将备份集创建在tape上。
注意:若是使用第三方备份软件备份到tape上,unused block 压缩将不会被使用。
跳过unused data block 将会使rman 备份datafile 时,用更少的空间,使得io更有效率。
3 binary 压缩
binary 压缩可以通过在backup 子句中指定关键字‘as compressed’ 来使用,这种压缩称之为binary 压缩
当rman 写数据到backup set中时,rman可以使用binary 压缩算法。 这个压缩类似于 很多tape vendors 在备份数据到tape上时的压缩。
但是,我们不能给出一个确切的压缩百分比。这个binary 压缩算法可以极大的降低备份文件所占用的磁盘空间。典型的是2倍或者4倍,对于文本密集型database 甚至更高的压缩倍数。
做压缩备份的命令为
RMAN> backup as compressed backupset database;
压缩backupset时,会有cpu的过载。当在数据库负载最大的时候,做数据库的压缩备份时,你会发现使用as compressed backupset方式进行备份是不可接受的。
在多数其他场景中,压缩备份集节省出足够的disk space,是值得让cpu 负载提高的。
从compressed backupset中restore database,不需要特别的命令,restore命令和非压缩备份时的restore命令一样。
从compressed backupset中restore的时间要比非压缩备份时的时间长。
除了oracle 10g中binary 压缩使用的BZIP2压缩算法,rman 11g也支持ZLIB算法,用来压缩使用 database 11g 高级压缩选项的backup。
BZIP2是11g和10g中默认的压缩算法。
BZIP2 压缩率很高,但是很慢,并且是cpu敏感型的。
ZLIB 很快,但是压缩率不想其他算法那么高(11g 并且使用高级压缩option时才能用)
受支持的压缩算法是BZIP2(默认的)和ZLIB。对最大程度上压缩而言,BZIP2 压缩算法是最优化的。
而ZLIB压缩算法是CPU使用率上最优化的。BZIP2的cpu 资源消耗比ZLIB要高,但是一般会生成更紧凑的backup。
对ZLIB压缩算法,初始化参数compatible必须设置为11.0.0 或者更高,并且需要Oracle 高级压缩 option
binary压缩可以使用于:controlfile,archive log, datafile
比如:
MAN> backup as compressed backupset archivelog all;
RMAN> backup as compressed backupset database;
RMAN> backup as compressed backupset current controlfile;
在写入到disk之前,rman 压缩backupset的内容(contents).对于rman 压缩backup,不需要额外的解压缩步骤。
配置压缩算法的方法如下:
RMAN> CONFIGURE COMPRESSION ALGORITHM '<alg_name>';
4.各种不同的压缩算法:
对于不同的压缩算法,可以去查询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.