Oracle BCT(Block Change Tracking)与增量备份

墨墨导读:摘要:BCT(Block Change Tracking)是Oracle从10g开始有的特性。激活BCT,可以大大提高增量备份的性能。本文介绍了BCT的配置方法和影响。


作者介绍

姚远:鼎甲科技高级技术顾问,墨天轮MVP。Oracle ACE,华为云MVP,专注于 Oracle、MySQL 数据库多年,拥有 Oracle 10g、12c OCM, MySQL 5.6、5.7、8.0 OCP,并在:EMC、IBM p、RedHat、Cisco、SQL Server、DB2 等领域拥有 20 + 技术认证。两次获得国家部级科技进步奖,发明过两项计算机相关专利。现在广州鼎甲任高级技术顾问,向同事和客户提供Oracle 和 MySQL方面的培训和技术咨询。

内容列表

  • Oracle BCT的原理

  • Oracle BCT的配置方法

  • BCT跟踪文件的大小

  • BCT跟踪文件通常只记录8次增量备份块的变化

  • 对增量备份性能的影响

  • 对联机交易性能的影响

  • 总结

Oracle BCT的原理

BCT(Block Change Tracking)是Oracle从10g开始有的特性。BCT的原理是记录数据文件里每个数据块的变化,并把这些变化信息保存在BCT的跟踪文件中。启动BCT后,RMAN或者XTTS进行增量备份时使用BCT跟踪文件里的信息,只读取改化的数据块,而不用再对全部数据文件进行扫描,从而提高了RMAN或者XTTS增量备份的性能。

Oracle BCT的配置方法

检查BCT的配置:

SQL> COL STATUS   FORMAT A8COL FILENAME FORMAT A60 SQL> SELECT STATUS, FILENAME FROM   V$BLOCK_CHANGE_TRACKING;
STATUS   FILENAME-------- ------------------------------------------------------------DISABLED

BCT跟踪文件默认位于系统参数DB_CREATE_FILE_DEST指定的目录下,使用下面的命令可以激活BCT:

SQL> SHOW PARAMETER DB_CREATE_FILE_DEST
NAME             TYPE        VALUE------------------------------------ ---------------------- ------------------------------db_create_file_dest         string        +DATA3

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
Database altered.
SQL> col filename form a60SQL> select filename, status, bytes from   v$block_change_tracking;
FILENAME                 STATUS           BYTES------------------------------------------------------------ -------------------- ----------+DATA3/ORCL/CHANGETRACKING/ctf.287.1062173021         ENABLED        11599872


用户也可以指定跟踪文件的位置,但注意在RAC环境中,跟踪文件要能被所有的节点都访问到:

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING   USING FILE '/u01/app/oracle/oradata/orcl/rman_change_track.f' REUSE;  2  
Database altered.
SQL> SELECT STATUS, FILENAME FROM   V$BLOCK_CHANGE_TRACKING;  
STATUS   FILENAME-------- ------------------------------------------------------------ENABLED  /u01/app/oracle/oradata/orcl/rman_change_track.f


注意:BCT的实施要在全量备份之前,否则增量备份时不会起作用,很多人误以为在增量备份之前即可。
取消BCT的命令如下:

ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;


BCT跟踪文件的大小

BCT跟踪文件采用位图记录对应块的变化,一位(bit)对应32K的数据,BCT跟踪文件会保存8个备份集的块变化,再加上当前状态,因此BCT跟踪文件大小大约是数据库大小的3000分之一,一个1T的数据库对应的BCT跟踪文件的大小是30M,对应RAC环境,BCT跟踪文件大小还要乘以节点数,因此计算公式是:BCT跟踪文件大小=节点数*(数据库大小/30000)。

BCT跟踪文件通常只记录8次增量备份块的变化

在启用了块更改跟踪的数据库上,如果执行了8个以上的RMAN增量备份而没有将它们合并为完整备份,BCT跟踪文件可能无法使用。这个限制由隐含参数 “_bct_bitmaps_per_file"参数决定。这个参数设置每个数据文件要存储的位图数,其默认值为8。为了避免此问题,可以运行不超过8个增量备份就进行一次全量备份,也可以增加”_bct_bitmaps_per_file"参数。
下面这个例子在最后一步执行增量备份的时候将无法使用BCT跟踪文件,因为最初的0级备份的信息已经被覆盖了。

  1. 执行全量备份 rman> BACKUP INCREMENTAL LEVEL 0 DATABASE;

  2. 执行7次 differential增量备份 rman> BACKUP INCREMENTAL LEVEL 1 DATABASE;

  3. 执行cumulative增量备份 rman> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;

对增量备份性能的影响

增量备份的过程由两部分组成,扫描在全量备份后变化的块和将变化的块写入备份集。激活BCT对增量备份的性能提高和变化的块成正比,最极端的情况是全量备份后没有任何数据块发生变化,激活BCT可以把增量备份的时间降低到几乎为零。一般推荐数据库的块变化小于20%时应该激活BCT。v$backup_datafile视图中包含一个名为used_change_tracking的列,对于增量备份级别>0,此列的值为YES表示RMAN使用了BCT跟踪文件以加速增量备份,这时读取的块和数据文件的总块数之比反应了激活BCT后效率的提升,可以使用下面的SQL查询增量备份中每个数据文件的效率的提升:

SQL>  select file#,            avg(datafile_blocks),            avg(blocks_read),            avg(blocks_read/datafile_blocks) * 100 as "% read for backup"       from v$backup_datafile      where incremental_level > 0        and used_change_tracking = 'YES'      group by file#      order by file#;  2    3    4    5    6    7    8    9  
     FILE# AVG(DATAFILE_BLOCKS) AVG(BLOCKS_READ) % read for backup---------- -------------------- ---------------- -----------------   1     120320        109  .090591755   3     204800        191  .093261719   4      43520        209  .480238971   7        640          1      .15625   9      37120         17  .045797414  10      60160          1  .001662234  11     776320         13  .001674567  12        640          1      .15625  20    9650176          1  .000010363  21    9043968          1  .000011057
10 rows selected.


这里有一个激活bct之前和之后增量备份对比的例子:

对联机交易性能的影响

目前业界的情况是:激活BCT对绝大多数数据库的性能影响几乎为零,但对数据仓库类型的数据库在大量数据导入时会有影响,例如使用ETL工具向数据仓库中大量插入数据时。这要从BCT的原理说起,激活BCT后,Oracle会增加一个进程,进程名类似ora_ctwr_orcl。这个进程跟踪变化的块,并将变化的块记录到内存的一个称之为“CTWR buffer”的私有区域,这个区域的记录会刷新到BCT跟踪文件中。当在短期内有大量的变化数据块,造成CTWR buffer中的记录不能及时刷新到BCT跟踪文件中时,会产生一个等待事件“block change tracking buffer space”,如果监控到这个等待事件在DB time里的占比较高,则说明激活BCT对数据库的性能产生了影响,这时通常有以下3种解决方案:

  1. 将BCT跟踪文件放入更快的硬盘中;

  2. 增加CTWR buffer, Oracle通常是不允许用户调整CTWR buffer的大小,但Oracle内部有个隐含参数“_bct_public_dba_buffer_size”可以调整CTWR buffer的大小,和这个参数相关的另外一个隐含参数“_bct_public_dba_buffer_allocation_max”要一起调整才会起作用。注意调整隐含参数是有较大风险的变更,Oracle是不支持的。

  3. disable BCT。

总结

对大型的生产数据库通常应激活BCT,对联机交易几乎没有影响,同时可以大大提高增量备份的性能。

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

推荐阅读:267页!2020年度数据库技术年刊
推荐下载:2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“2020DTC”获得!

视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Block Change TrackingBCT)是 Oracle 数据库中一种技术,用于跟踪在备份之间更改的数据块,以加速增量备份和恢复。如果你想从 BCT 中获取变数据块,可以按照以下步骤进行: 1. 首先,你需要确认 BCT 已经启用。你可以使用以下命令来检查: ``` SELECT status FROM v$block_change_tracking; ``` 如果返回的状态为 ENABLED,则表示 BCT 已经启用。如果状态为 DISABLED,则需要通过以下命令启用 BCT: ``` ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; ``` 2. 接下来,你需要创建一个包含变数据块的文件。你可以使用以下命令来创建该文件: ``` ALTER DATABASE CREATE BLOCK CHANGE TRACKING FILE '/path/to/bct/file'; ``` 其中 '/path/to/bct/file' 是你想要创建的 BCT 文件的路径。请确保该路径对于数据库服务器上的 Oracle 进程是可读写的。 3. 等待一段时间后,BCT 文件将包含所有在最后一次备份之后更改的数据块。你可以使用以下命令来获取变数据块: ``` SELECT file#, block# FROM v$backup_block_change_tracking WHERE status = 'YES'; ``` 该命令将返回一个包含文件号和块号的结果集,表示包含变数据块的数据文件和该文件中的变数据块的块号。 请注意,BCT 文件只包含最后一次备份之后更改的数据块,因此如果你想获取之前的变数据块,需要使用相应的增量备份文件。同时,BCT 文件也需要定期清理或重新创建,以确保其有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值