理论背景:
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;

Block Change Tracking (块改变跟踪)的更多相关文章

  1. Oracle 块修改跟踪 (Block Change Tracking) 说明

    Block ChangeTracking 是Oracle 10g里推出的特性.官网对Block change tracking 的定义如下: Adatabase option that causes ...

  2. Oracle 10g Block Change Tracking特性

    Using Block Change Tracking to Improve Incremental Backup Performance 使用块改变跟踪改善增量备份的性能 The block cha ...

  3. Oracle Block Change Tracking功能(转)

    from:http://space.itpub.net/?uid-25744374-action-viewspace-itemid-732091 通过使用block change tracking功能 ...

  4. enable or disable Oracle block change tracking

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

  5. SQL Server审计功能入门:更改跟踪(Change Tracking)

    原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...

  6. Oracle块修改跟踪功能

    块修改跟踪功能是指使用二进制文件记录数据库中数据库更改的过程. 其目的是提高增量备份操作的性能,因为RMAN可以使用快修改跟踪文件找到上次执行备份操作后被修改的数据块.这可以节省大量时间,因为如果不这 ...

  7. 如何使用块更改跟踪文件估算RMAN增量备份大小 (Doc ID 1938079.1)

    How to estimate RMAN incremental backup size using block change tracking file (Doc ID 1938079.1) APP ...

  8. Dynamics 365 Customer Enagement中的更改跟踪(change tracking)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT

    目录 目录 前文列表 数据块修改跟踪技术 CBT 为虚拟机开启 CBT CBT 修改数据块偏移量获取函数 QueryChangedDiskAreas changeId 一个 QueryChangedD ...

随机推荐

  1. HDFS源码分析心跳汇报之数据结构初始化

    在<HDFS源码分析心跳汇报之整体结构>一文中,我们详细了解了HDFS中关于心跳的整体结构,知道了BlockPoolManager.BPOfferService和BPServiceActo ...

  2. 字符串查找strpos()函数用法

    #如果id=3 在字符串中查找出3是否存在.$str="2,12,33,22,55"; if(strpos(','.$id.',',','.$str.',')!==FALSE){ ...

  3. python 基础 7.2 时间格式的相互转换

    #/usr/bin/python #coding=utf-8 #@Time   :2017/11/9 8:55 #@Auther :liuzhenchuan #@File   :时间格式的相互转换.p ...

  4. LoadRunner性能测试过程/流程

    用LoadRunner进行负载测试的流程通常由五个阶段组成:计划.脚本创建.场景定义.场景执行和结果分析.(1)计划负载测试:定义性能测试要求,例如并发用户的数量.典型业务流程和所需响应时间.(2)创 ...

  5. EasyDSS RTMP流媒体解决方案之Windows服务安装方案

    Windows服务安装 EasyDSS_Solution流媒体解决方案,可以通过start一键启动.在实际应用中,我们希望可以设置成系统服务,那么下面我将会介绍,如何在windows中将流媒体解决方案 ...

  6. java基本类型和包装类的区别(转)

    int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数 ...

  7. SSL:Ubuntu证书配置

    CA证书的配置 Ubuntu上CA证书的配置可以通过工具ca-certificates来方便的进行.该工具默认是随Ubuntu安装的,如果没有可以通过下面的命令来安装: sudo apt-get in ...

  8. python cookbook第三版学习笔记五:datetime

    Python中表示时间的模块是datetime,引入下面的模块 from datetime import datetime,timedelta print datetime.today()  #打印出 ...

  9. import org.marker.weixin.DefaultSession; import org.marker.weixin.HandleMessageAdapter; import org.marker.weixin.MySecurity; import org.marker.weixin.msg.*;

    需要以下微信包可以添加我的微信公众号 回复“微信api”即可得到jar链接,以及maven添加本地jar方法,以及更改后的源代码 import org.marker.weixin.DefaultSes ...

  10. 为什么说Python是一门动态语言--Python的魅力

    动态语言的定义:动态编程语言是高级程序设计语言的一个类别.在计算机科学领域已被广泛应用.它是一类在执行时能够改变其结构的语言:比如新的函数.对象.甚至代码能够被引进.已有的函数能够被删除或是其它结构上 ...