Oracle BCT(Block Change Tracking)与增量备份---发表在数据和云

简介: BCT(Block Change Tracking)是Oracle从10g开始有的特性。BCT的原理是记录数据文件里每个数据块的变化,并把这些变化信息保存在BCT的跟踪文件中。

Oracle BCT的原理

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

Oracle BCT的配置方法

检查BCT的配置:

SQL> COL STATUS   FORMAT A8
COL 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 a60
SQL> 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级备份的信息已经被覆盖了。


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

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

执行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之前增量备份 152.13G 22.99M 4分钟51秒 55.3M/S 4.3K/S

激活bct之后增量备份 152.13G 22.8M 21秒 7.2G/S 57.2K/S

对联机交易性能的影响

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


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

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

disable BCT。

总结

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

相关文章
|
5月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
89 0
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
5月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
3月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
61 0
|
5月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
103 0
|
5月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
67 0
|
5月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。