增量备份总是小于完整备份,但节省的时间不如你想的多。这是因为增量备份的默认行为是扫描备份的整个数据文件来确定哪些块需要提取。这样做有一个优点:允许rman检查块的损坏。但是我们希望增量备份快一些。这可以通过块变更跟踪来实现。
块变更跟踪block change tracking依赖于启动一个额外的后台进程:CTWR(change tracking writer,变更跟踪写入器)。这个进程在名为“变更跟踪文件”的文件中记录每个已更改的块的地址。如果启用了块变更跟踪,rman将在执行增量备份的时候读取变更跟踪文件来确认哪些块需要备份。这样比扫描整个文件要快得多。
变更跟踪文件将在DBA指定位置创建,默认位置是DB_CREATE_FILE_DEST目录(如果做了定义)。它的初始大小为10MB,并将以10MB增量增长。除非数据库是百万兆字节的,否则10MB足够了。
查看数据库是否启用了块变更跟踪可以通过视图V$BLOCK_CHANGE_TRACKING:
SYS@orcl 10-OCT-14>desc v$block_change_tracking
Name Null? Type
----------------------------------------- -------- ----------------------------
STATUS VARCHAR2(10)
FILENAME VARCHAR2(513)
BYTES NUMBER
SYS@orcl 10-OCT-14>col filename for a50
SYS@orcl 10-OCT-14>select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- -------------------------------------------------- ----------
DISABLED
当我们在sql*plus执行如下命令:
SYS@orcl 10-OCT-14>alter database enable block change tracking using file '/u01/app/datafile/change_tracking.dbf';Database altered.
SYS@orcl 10-OCT-14>select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- -------------------------------------------------- ----------
ENABLED /u01/app/datafile/change_tracking.dbf 11599872

SYS@orcl 10-OCT-14>alter system set db_create_file_dest='/u01/app/datafile/change_tracking.dbf' scope=spfile;
System altered.
之后,当每次数据库发生改变的时候,Oracle就会把每个改变的块的信息写到change_tracking.dbf这个文件中。下次rman做增量备份的时候,就不用再去数据文件把每个块都读一遍,而是直接在change_tracking.dbf中读就行了,这样可以提高增量备份的效率,缺点就是在数据库日常运作的过程中增大了数据库的负荷。