9i的增量备份,要扫描所有使用过的块,应该没啥办法吧,10g有了新特性block change tracking就好点
这不能说是10g新特性,只是10g对增备的完善,10g的增备是实际意义上的增备,速度提升明显。不像9i如果是oltp系统增备时间往往会比全备长,10g对于增备推出了BLOCK change tracking 日志,其实就是在日志里维护了一个全库块的位图。位图操作快,而且不大。就是最繁忙的库,相对大的库,这个BLOCK change tracking 日志也很难到10m,所以说10g的增备相当值得应用!在数据量超过2t以后,效果更好!
引用自:http://www.itpub.net/thread-395435-1-1.html
在10g之前的版本,使用rman做增量备份,rman在做1级备份的时候怎么来确定0级备份之后都有哪些数据块做了修改呢?看下面一段
Each data block in a datafile contains a system change number (SCN), which is the
SCN at which the most recent change was made to the block. During an incremental
backup, RMAN reads the SCN of each data block in the input file and compares it to
the checkpoint SCN of the parent incremental backup. If the SCN in the input data
block is greater than or equal to the checkpoint SCN of the parent, then RMAN copies
the block.
也就是说在做level 1级备份的时候,需要扫描所有的数据块并且用块中记录修改的SCN跟level 0备份时的SCN做比较,来确定什么是需要备份的。
所以扫描整个数据文件是不可避免的 !(这是10g以前的版本)
Block change tracking是Oracle10g的一个新特性,Block change tracking进程记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN可以不再扫描整个文件以查找变更数据。
RMAN's change tracking feature for incremental backups improves incremental
backup performance by recording changed blocks in each datafile in a change tracking
file. If change tracking is enabled, RMAN uses the change tracking file to identify
changed blocks for incremental backup, thus avoiding the need to scan every block in
the datafile.
估计又是使用的位图!没找到依据呢,看书不太仔细。
让我们来对它们的速度做一下测试,
不使用block change tracking,看看备份需要的时间
首先关闭block change tracking
SYS@CH> select status , filename, bytes from v$block_change_tracking;
STATUS FILENAME BYTES
---------- ---------------------------------------- ----------
DISABLED
然后让我们来做个0级增量备份,和一个1级备份,注意它们使用的时间
RMAN> backup incremental level 0 format '/u01/level0_%U.bak' database;
Starting backup at 30-AUG-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=136 devtype=DISK
channel ORA_DISK_1: starting incremental level 0 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA1/ch/datafile/system.268.792554517
input datafile fno=00003 name=+DATA1/ch/datafile/sysaux.267.792554563
input datafile fno=00005 name=+DATA1/ch/datafile/example.266.792554587
input datafile fno=00004 name=+DATA1/ch/datafile/users.265.792554603
input datafile fno=00002 name=+DATA1/ch/datafile/undotbs1.264.792554609
input datafile fno=00008 name=+DATA2/ch/datafile/test2.256.792657081
input datafile fno=00009 name=+DATA3/ch/datafile/test4.256.792658607
input datafile fno=00006 name=+DATA1/ch/datafile/test01.dbf
input datafile fno=00007 name=+DATA1/ch/datafile/test02.dbf
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level0_0jnjv5d8_1_1.bak tag=TAG20120830T172352 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting incremental level 0 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level0_0knjv5eb_1_1.bak tag=TAG20120830T172352 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 30-AUG-12
RMAN> backup incremental level 1 format '/u01/level1_%U.bak' database;
Starting backup at 30-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA1/ch/datafile/system.268.792554517
input datafile fno=00003 name=+DATA1/ch/datafile/sysaux.267.792554563
input datafile fno=00005 name=+DATA1/ch/datafile/example.266.792554587
input datafile fno=00004 name=+DATA1/ch/datafile/users.265.792554603
input datafile fno=00002 name=+DATA1/ch/datafile/undotbs1.264.792554609
input datafile fno=00008 name=+DATA2/ch/datafile/test2.256.792657081
input datafile fno=00009 name=+DATA3/ch/datafile/test4.256.792658607
input datafile fno=00006 name=+DATA1/ch/datafile/test01.dbf
input datafile fno=00007 name=+DATA1/ch/datafile/test02.dbf
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level1_0lnjv5go_1_1.bak tag=TAG20120830T172544 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting incremental level 1 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level1_0mnjv5i5_1_1.bak tag=TAG20120830T172544 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 30-AUG-12
level 0备份后其实我根本就没有对数据库做什么更改,level 1备份居然也使用了45秒(大部分时间是耗费在扫描变化上了)
然后让我们把block change tracking启用后测试一下level 1需要的时间
SYS@CH> alter database enable block change tracking using file '/u01/BLOCK_CHANGE_TRACE.LOG';
Database altered.
SYS@CH> select status , filename, bytes from v$block_change_tracking;
STATUS FILENAME BYTES
---------- ---------------------------------------- ----------
ENABLED /u01/BLOCK_CHANGE_TRACE.LOG 11599872
block change tracing启用后对应操作系统上的ora_ctwr_
[oracle@yitai ~]$ ps -ef | grep -i ctwr
oracle 7292 1 2 17:31 ? 00:00:00 ora_ctwr_CH
oracle 7294 7260 0 17:31 pts/7 00:00:00 grep -i ctwr
先删除原来的备份
RMAN> delete backupset ;(删除当前为止所有的备份集)
RMAN> backup incremental level 0 format '/u01/level0_%U.bak' database;
Starting backup at 30-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 0 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA1/ch/datafile/system.268.792554517
input datafile fno=00003 name=+DATA1/ch/datafile/sysaux.267.792554563
input datafile fno=00005 name=+DATA1/ch/datafile/example.266.792554587
input datafile fno=00004 name=+DATA1/ch/datafile/users.265.792554603
input datafile fno=00002 name=+DATA1/ch/datafile/undotbs1.264.792554609
input datafile fno=00008 name=+DATA2/ch/datafile/test2.256.792657081
input datafile fno=00009 name=+DATA3/ch/datafile/test4.256.792658607
input datafile fno=00006 name=+DATA1/ch/datafile/test01.dbf
input datafile fno=00007 name=+DATA1/ch/datafile/test02.dbf
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level0_0nnjv5vn_1_1.bak tag=TAG20120830T173343 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:05
channel ORA_DISK_1: starting incremental level 0 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level0_0onjv61o_1_1.bak tag=TAG20120830T173343 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 30-AUG-12
RMAN> backup incremental level 1 format '/u01/level1_%U.bak' database;
Starting backup at 30-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA1/ch/datafile/system.268.792554517
input datafile fno=00003 name=+DATA1/ch/datafile/sysaux.267.792554563
input datafile fno=00005 name=+DATA1/ch/datafile/example.266.792554587
input datafile fno=00004 name=+DATA1/ch/datafile/users.265.792554603
input datafile fno=00002 name=+DATA1/ch/datafile/undotbs1.264.792554609
input datafile fno=00008 name=+DATA2/ch/datafile/test2.256.792657081
input datafile fno=00009 name=+DATA3/ch/datafile/test4.256.792658607
input datafile fno=00006 name=+DATA1/ch/datafile/test01.dbf
input datafile fno=00007 name=+DATA1/ch/datafile/test02.dbf
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level1_0pnjv628_1_1.bak tag=TAG20120830T173503 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting incremental level 1 datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 30-AUG-12
channel ORA_DISK_1: finished piece 1 at 30-AUG-12
piece handle=/u01/level1_0qnjv629_1_1.bak tag=TAG20120830T173503 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 30-AUG-12
显然level 1备份用了1秒就完成了,比起没有启用block change tracking快了几十倍
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27042095/viewspace-742397/ ,如需转载,请注明出处,否则将追究法律责任。