Oracle备份恢复之block change tracking

这个功能的作用是干嘛的呢?

Oracle的block change tracking用于记录上次备份以来改变过的block信息,因此打开block change tracking可以大大加快增量备份的速度。

Block Change Tracking(块跟踪)主要用于RMAN备份的增量备份,将自从上一次备份以来数据块的变化记录到block change tracking文件中,相关后台进程CTWR(Change Tracking Writer), 主要目的是改善增量备份性能,RMAN可以不再扫描整个文件以查找变更数据。第一个0级的增量备份扫描整个datafile。 随后的增量备份使用block changetracking file的信息,只扫描自上次备份以来被标记为change 的block,RMAN 不会对该文件进行备份。。从10g开始提供此功能。

Block change tracking 默认是禁用的,如果备份策略中使用incrementalbackup,那么建议开启block change tracking。 启用后,不需要其他的维护操作。

在备份期间,change tracking会维护已经标记为change 的block 的bitmap 信息。

trace 记录保留

Oracle 会自动管理change tracking file的大小,只保留最近最近8次blockchange 的信息。 超过8次, 那么最前面的block bitmap 信息会被current change 覆盖。要考虑change tracking file 的8次限制与备份策略的关系。 如果我们在0级备份之后又进行了7次不同的增量备份,那么这时block change tracking 就包含了8个bitmaps信息。 如果我们在进行1级的增量备份,那么此时的增量就不是最优的, 还会扫描整个data file。 因为我们之前0级的bitmap信息被我们当前的bitmap 信息覆盖掉了,这样就没有了参考的依据。所以,两次全量备份的时间间隔要控制在8天以内(包含)。

trace 文件存放

oracle 不建议使用RAWdevice来存放block tracking.

如果是RAC一定要放到共享存储上。

trace 文件重置

  • change tracking file 变为无效。
  • RMAN 进行恢复时。

 文件大小

  • 与数据库中的数据文件总大小相关,与数据量无关。每次递增10M,初始化文件时,300G 数据文件会配置10M ,600G 数据文件会配置20m .1T 及以上数据文件以32M 为标准。
  • 每个datafile,在tracking file里最少需要分配320k的空间,所以如果有大量的小data file, change tracking file 也会相对较大。
  1. Enable block change tracking

1.1 检查数据库是否已经开启了block change tracking

DISABLED表示没有启用

1.2 开启block change tracking

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';

Database altered.

1.3 确认block change tracking已开启

测试block tracking可以存放到普通盘上,但是有rac的环境一定要放到共享存储上。

备注:启动block change tracking时,oracle会启动一个CTWR的后台进程,这个进程的作用就是把信息写入block change tracking文件。如果是RAC系统,oracle会在每个实例上都启动这个后台进程。启动CTWR进程的信息记录在alert文件中。

2.Disable block change tracking

2.1 关闭block change tracking

SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

Database altered.

2.2确认block change tracking已关闭

备注:关闭block change tracking时,oracle会停止后台进程CTWR,停止CTWR进程的信息记录在alert文件中。另外需要注意一下,关闭block change tracking时,block change tracking文件是否也同时被删除了。如果没有被删除,可能需要执行手工删除。

删除block change tracking文件(ASM)

$> export ORACLE_SID=+ASM1

$> sqlplus "/as sysdba"

SQL> alter diskgroup DATA drop file '+DATA/CHANGETRACKING/block_change_tracking.log';

Diskgroup altered.

如果没删除block change tracking文件,下次开启block change tracking又使用的是同一文件,会报错显示文件已被使用。