从Oracle 10g开始,Oracle允许我们对备份集进行压缩,以减少空间耗用,这个特性通过对BACKUP命令伴增加AS COMPRESSED BACKUPSET子句实现。
压缩备份在恢复时无需解压缩,这一特性在以下条件下可能大为有益:
- 备份存储空间有限;
- 通过网络备份而带宽有限;
- 直接备份至磁带、CD、DVD介质不能直接压缩。
可以选择在备份命令里显示指定压缩选项:
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
也可以仅对部分文件进行压缩,例如,对1、5文件压缩备份:
BACKUP AS COMPRESSED BACKUPSET DATAFILE 1,5;
也可以配置RMAN指定压缩选项:
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET;
但是需要了解的是,压缩备份会消耗更多的CPU资源以及时间,不同的技术只不过是在不同资源间的一种平衡,如何选择依赖于我们的条件及需求。
可以修改一下RMAN的配置参数,以方便测试:
RMAN> configure device type disk backup type to compressed backupset; old RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1; new RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1; new RMAN configuration parameters are successfully stored released channel: ORA_DISK_1
复制
此时执行备份,备份集将被压缩:
RMAN> backup full filesperset 11 database ; Starting backup at 29-MAR-05 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=161 devtype=DISK channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00009 name=/data1/oradata/systemfile/bigtbs.dbf 。。。。。。。 input datafile fno=00005 name=/data1/oradata/systemfile/eygle01.dbf piece handle=/backupset/o1_mf_nnndf_TAG20050329T062814_14k1813y_.bkp channel ORA_DISK_1: backup set complete, elapsed time: 00:08:35 channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00011 name=/opt/oracle/oradata/eygle/t2k01.dbf piece handle=/backupset/o1_mf_nnndf_TAG20050329T062814_14k1r4fh_.bkp channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07 Finished backup at 29-MAR-05
复制
注意压缩备耗时为00:08:35 + 00:00:07 = 8:42 = 522s。再来看一下非压缩备份:
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO backupset; old RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1; new RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 1; new RMAN configuration parameters are successfully stored RMAN> backup full filesperset 11 database ; Starting backup at 29-MAR-05 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=161 devtype=DISK channel ORA_DISK_1: starting full datafile backupset input datafile fno=00009 name=/data1/oradata/systemfile/bigtbs.dbf input datafile fno=00005 name=/data1/oradata/systemfile/eygle01.dbf piece handle=/backupset/o1_mf_nnndf_TAG20050329T065513_14k2tmx7_.bkp channel ORA_DISK_1: backup set complete, elapsed time: 00:01:55 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00011 name=/opt/oracle/oradata/eygle/t2k01.dbf channel ORA_DISK_1: starting piece 1 at 29-MAR-05 channel ORA_DISK_1: finished piece 1 at 29-MAR-05 piece handle=/backupset/o1_mf_nnndf_TAG20050329T065513_14k2y7go_.bkp channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07 Finished backup at 29-MAR-05
复制
非压缩备份耗时为00:01:55 + 00:00:07 = 2:02 = 122s。压缩备份使用的时间是非压缩方式的522 / 122 = 4.28 倍。再来对比一下压缩比率:
$ ls -l total 2585568 -rw-r----- 1 oracle dba 190103552 Mar 29 06:36 o1_mf_nnndf_TAG20050329T062814_14k1813y_.bkp -rw-r----- 1 oracle dba 1093632 Mar 29 06:36 o1_mf_nnndf_TAG20050329T062814_14k1r4fh_.bkp -rw-r----- 1 oracle dba 1130618880 Mar 29 06:57 o1_mf_nnndf_TAG20050329T065513_14k2tmx7_.bkp -rw-r----- 1 oracle dba 1302528 Mar 29 06:57 o1_mf_nnndf_TAG20050329T065513_14k2y7go_.bkp
复制
可以知道,压缩备份大小为190103552 + 1093632 = 182.33984375 MB,非压缩备份集为1130618880 + 1302528 = 1079.484375 MB,非压缩较压缩大小为1079.484375/182.33984375 = 5.9倍,即压缩方式大大节省了空间。
测试过程中收集了CPU消耗信息,再来比较一下备份进程的CPU消耗。
压缩备份时CPU消耗如下,大约在26%左右。
PID USERNAME THR PR NCE SIZE RES STATE TIME FLTS CPU COMMAND 15252 oracle 11 10 0 430M 353M cpu01 1:38 0 26.35% oracle
复制
而非压缩模式下CPU消耗如下,大约为16%左右。
PID USERNAME THR PR NCE SIZE RES STATE TIME FLTS CPU COMMAND 15252 oracle 11 52 0 445M 364M sleep 9:07 57 16.43% oracle
复制
可见,压缩模式较非压缩模式多消耗10%左右的CPU。看来选择哪一种模式要依赖你的环境及需要,但是毕竟Oracle提供了更多的可选项给我们。