张伟垚 数据和云


墨墨导读:本文来自墨天轮读者投稿,如需投稿可在本篇文章下方留言即可。最近使用 XTTS,里面涉及到增量备份的步骤需要开启BCT,并且RMAN的增量备份也会涉及到BCT,本文列出工作中 BCT 需要知道的相关内容,希望对大家有帮助。


BCT的意义


Block Change Tracking 是在Oracle 10g里推出的新特性。BCT的原理是记录数据文件里每个数据块修改之后信息,这些修改之后的tracking信息保存在设置的tracking文件里。启动BCT后,RMAN或者XTTS使用tracking file里的信息,只需要读取改变的数据块信息,而不用再对全部数据文件进行扫描,从而提高了RMAN或者XTTS增量备份的性能。


BCT的使用


数据库默认情况下的BCT是禁用的,可以通过v$block_change_tracking视图进行查询。


关于BCT,你需要知道的是..._Java


在启动BCT时,如果有设置oracle的OMF(oracle manage file),那么不指定路径的情况下,会自动设置在这里。


关于BCT,你需要知道的是..._Java_02
关于BCT,你需要知道的是..._Java_03


那么如果想指定路径的话只需要加一个using file 后面接一个路径名即可
首先先禁用,再重新开启。


关于BCT,你需要知道的是..._Java_04


这里发现禁用后,bct file会随着禁用而自动被删除清理。


关于BCT,你需要知道的是..._Java_05
关于BCT,你需要知道的是..._Java_06

如果在RAC的场景下,bct file是必须放在ASM共享存储里面。


BCT的相关问题


预估开启后BCT所占空间


关于BCT,你需要知道的是..._Java_07
关于BCT,你需要知道的是..._Java_08
理解为:
以500GB大小的数据库为例,并且这个数据库只有一个线程,RMAN存有8个备份集,经过计算得知:
1*(8+2)(500GB/250000)=20.48MB左右。
以200GB大小的两节点RAC为例,并且这个数据库RMAN存有8个备份集,经过计算得知:
2
(8+2)*(200GB/250000)=16.384MB左右。


BCT FILE大小因素是由以下因素决定:
1、 数据库数据量大小
2、 启用线程的数量
3、 数据库备份集的数量


理解隐含参数的意义


bct_bitmaps_per_file默认为8,我理解为保留最近8次block change的信息。


在备份期间,change tracking会维护已经被标记为change的block的bitmap信息。Oracle 会自动管理change tracking file的大小,只保留最近8次block change 的信息。如果超过8次,那么最前面的block bitmap信息会被最近一次的change所覆盖。


关于BCT,你需要知道的是..._Java_09


基于这个覆盖,官方文档也给出一个情景的考虑,在进行0级增量备份以及7次差异增量备份之后,8次block bitmap已经填满bct file(默认_bct_bitmaps_per_file=8的情况下),那么这时候再进行一次1级的累积增量备份,就会进行全datafile扫描,因为累积增量备份是比较0级备份以后的变化情况,而0级备份会被覆盖,所以这个隐含参数的设定值也会影响不同增量备份的方式的效果。


PS: 以上均为个人学习之后的理解,如有错误,恳请指正。


学习来源:官方文档、RMAN 10g : How To Size the Block Change Tracking File (Doc ID 306112.1)等。


墨天轮原文链接:https://www.modb.pro/db/27453(复制到浏览器中打开或者点击“阅读原文”)