Block Change Tracking (块改变跟踪)
理论背景:
Block ChangeTracking 是Oracle 10g里推出的特性。 Block change tracking 会记录data file里每个block的update 信息,这些tracking信息保存在tracking 文件里。 当启动block change tracking 后,RMAN 使用trackingfile里的信息,只读取改变的block信息,而不用在对整个data file进行扫描,从而提高了RMAN 备份的性能。
几点说明:
1. block change tracking file 是bitmap file。
2. Block change tracking 默认是禁用的,如果启用了incrementalbackup,那么建议开启block change tracking。启用BCT后,不需要其他的维护操作。
3. 在备份期间,change tracking会维护已经标记为change 的block 的bitmap 信息。Oracle 会自动管理change tracking file的大小,只保留最近最近8次blockchange 的信息。 超过8次, 那么最前面的block bitmap 信息会被current change 覆盖。
4. 第一个0级的增量备份扫描整个datafile。 随后的增量备份使用block changetracking file的信息,只扫描自上次备份以来被标记为change 的block。
5. 要考虑change tracking file 的8次限制与备份策略的关系。 如果我们在0级备份之后又进行了7次不同的增量备份,那么这时block change tracking 就包含了8个bitmaps信息。 如果我们在进行1级的增量备份,那么此时的增量就不是最优的, 还会扫描整个data file。 因为我们之前0级的bitmap信息被我们当前的bitmap 信息覆盖掉了,这样就没有了参考的依据。所以RMAN的备份策略要考虑到这个8次bitmap 的影响。
6. block change tracking 文件是针对整个数据库,默认情况下,changetracking file 会作为Oracle managed file,在DB_CREATE_FILE_DEST指定的目录下创建。 可以放到放到其他的目录。 Oracle 不建议使用rawdevice 来存放change tracking file.
7. 如果是RAC 环境,change tracking file 必须放在共享设备上。
8. RMAN 不支持对change tracking file 的备份与恢复。当数据检测到change tracking file 无效时,就会reset changetracking file。 如果我们还原了数据库,那么数据库也会reset block change tracking,并从新进行tracking。
9. block change tracking file的大小和数据库的大小及 enabledthreads of redo 的数量有关系,tracking file 的大小会根据数据库大小的变化和变化。 和更新频率没有关系。
10. 典型的,单实例下大约DB的1/30000的block 会把track。 如果是RAC 环境,在乘以threads。
11. 以下因素会导致file 超过估计值:为了避免tracking file 占用太多的空间, 初始值是10M,然后每次增加10M,如果数据库接近300G,那么trackingfile 不能小于10M,如果接近600G,不能小于20M。 每个datafile,在tracking file里最少需要分配320k的空间,所以如果有大量的小data file, change tracking file 也会相对较大。
DB_CREATE_FILE_DEST 参数的作用:
DB_CREATE_FILE_DEST 参数用来指定默认的Oracle Managed datafiles 的位置。 在没有指定DB_CREATE_ONLINE_LOG_DEST_n参数的情况下,这个参数也可以用来作为Oracle-managed control files和online redo logs的默认位置。
如果使用文件系统目录作为默认的位置,那么这个目录必须是已经存在的,Oracle 不会创建这个目录。 并且Oracle对这个目录有足有的操作的权限。 使用OMF管理时,在这个目录下生成文件每个名称都是唯一的,这个文件也称为Oracle-Manager file。
启用和禁用Block Change Tracking:( 数据库在open 或者 mounted 状态都可以启用block change tracking )
1. 检查DB_CREATE_FILE_DEST参数配置
SQL> show parameter db_create_file_dest
[oracle@11g ~]$ mkdir bct
[oracle@11g ~]$ cd bct/
[oracle@11g bct]$ pwd
/home/oracle/bct
SQL> alter system set db_create_file_dest = '/home/oracle/bct/' scope=both sid='*';
SQL> show parameter db_create_file_dest
2. 启用Block change tracking
SQL> alter database enable block change tracking;
--可以使用v$block_change_tracking 视图查看tracking 启动情况。
SQL>
col status format a8
col filename format a60
select status, filename from v$block_change_tracking;
STATUS FILENAME
-------- ------------------------------------------------------------
ENABLED /home/oracle/bct/ORCL/changetracking/o1_mf_bjlj999v_.chg
3 禁用Block Change Tracking
SQL> alter database disable block change tracking;
4 改变Block Change Tracking File位置
可以使用alter database rename 语句来修改change tracking file 文件的位置,该命令会更新控制文件里的信息,命令必须在mount 下执行,如果DB 不能shutdown,那么可以先disable,然后指定新的位置在启动,但是这样会丢失以前在tracking file里的数据。
更改change tracking 文件步骤如下:
1. 查看当前文件的位置
SQL> select status, filename from v$block_change_tracking;
2.如果可能,关闭数据库
SQL> shutdown immediate
如果可以关闭数据库,跳过如下的sql 继续操作,如果不能关闭,就执行如下的SQL并忽略第3步以后的步骤。
SQL> alter database disable block changetracking;
SQL> alter database enable block changetracking using file 'new_location';
这里是禁用bct,在启动时更改bct位置,这种情况,会丢失所有的bct 文件的内容。 在下次执行0级增量备份时会扫描整个数据文件。
3.在操作系统级别移动change tracking file文件到新的位置。 这个是在关闭数据库的前提下进行。
[oracle@dave ~]$ mv /u01/app/oracle/oradata/dave/block_change_tracking.f /u01/backup/block_change_tracking.f
4. 启动数据库到mount状态,移动change tracking 文件位置。
SQL> startup mount
SQL> alter database rename file '/u01/app/oracle/oradata/dave/block_change_tracking.f' to '/u01/backup/block_change_tracking.f';
5.打开数据库
SQL> alter database open;
SQL> select status, filename from v$block_change_tracking;