随着数据库业务量的增长,数据库备份压力及存储的IO负载越来越大,存在备份失败、备份超时等情况。增量备份会扫描数据库文件,查找变化的数据块,产生大量的IO流量,导致备份时间变长。采用数据库块跟踪技术,在提高备份效率的同时降低存储系统的IO负载。
Block Change Tracking(块跟踪)主要用于RMAN备份的增量备份,将自从上一次备份以来数据块的变化记录到block change tracking文件中,相关后台进程CTWR(Change Tracking Writer), 主要目的是改善增量备份性能,RMAN可以不再扫描整个文件以查找变更数据。第一个0级的增量备份扫描整个datafile。随后的增量备份使用block change tracking file的信息,只扫描自上次备份以来被标记为change的block,RMAN不会对该文件进行备份。从10g开始提供此功能。
Block change tracking 默认是禁用的,如果备份策略中使用incremental backup,那么建议开启block change tracking。启用后,不需要其他的维护操作。在备份期间,change tracking会维护已经标记为change 的block 的bitmap 信息。Oracle 会自动管理change tracking file的大小,只保留最近最近8次block change 的信息。超过8次,那么最前面的block bitmap 信息会被current change 覆盖。
1、检查数据库的块跟踪特性是否开启,默认为DISABLED。
set linesize 1000col filename for a100select status,filename from v$block_change_tracking;
2、启用块跟踪功能,并创建修改块跟踪文件。从日志可以看到CTWR后台进程启动,然后可以发起备份验证备份性能和速度是否有提升。
RAC集群设置在ASM磁盘组alter database enable block change tracking using file '+磁盘组/数据库名_block_track.bct';非RAC集群设置在本地磁盘alter database enable block change tracking using file '/u01/app/oracle/oradata/数据库名_block_track.bct';Fri Jun 25 19:18:01 2021alter database enable block change tracking using file '+YWZD/YWZD_block_track.bct'Fri Jun 25 19:18:01 2021Block change tracking file is current.Fri Jun 25 19:18:02 2021Starting background process CTWRFri Jun 25 19:18:02 2021CTWR started with pid=168, OS id=263989Fri Jun 25 19:18:02 2021Block change tracking service is active.Completed: alter database enable block change tracking using file '+YWZD/YWZD_block_track.bct'
3、回退步骤:关闭块跟踪功能,该命令会导致块跟踪文件的清除。
alter database disable block change tracking;
4、修改块修改跟踪文件路径
修改块跟踪文件可以通过alter database rename file命令,但是只能在mount状态下操作。
1、场景一:操作系统Linux6,数据库版本12.1,ASM磁盘的sector_size为512,磁盘组sector_size值为4096。
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+YWZD/YWZD_BLOCK_TRACK.bct'*ERROR at line 1:ORA-19751: could not create the change tracking fileORA-19750: change tracking file: '+YWZD/YWZD_BLOCK_TRACK.bct'ORA-17502: ksfdcre:4 Failed to create file +YWZD/YWZD_BLOCK_TRACK.bctORA-00600: internal error code, arguments: [ORA_NPI_ERROR], [600], [ORA-00600: internal error code, arguments: [kfdAuAlloc2], [kfCheckDG], [YWZD], [3560], [31457280], [], [], [], [], [], [], []], [], [], [], [], [], [], [], [], []
解决办法:1、检查ASM磁盘及磁盘组的sector_size值;2、创建单独的磁盘组,设置sector_size为512。
set linesize 1000col path for a80select name,label,path,sector_size from v$asm_disk;select name,sector_size,block_size,compatibility,database_compatibility from v$asm_diskgroup;日志输出ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+ARCHDG/YWZD_BLOCK_TRACK.BCT'Sun Mar 10 00:45:36 2024Block change tracking file is current.Sun Mar 10 00:45:36 2024Starting background process CTWRSun Mar 10 00:45:36 2024CTWR started with pid=159, OS id=33705Sun Mar 10 00:45:36 2024Block change tracking service is active.Completed: ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+ARCHDG/YWZD_BLOCK_TRACK.BCT'
SYS@YWZD2 > ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+YWZD/YWZD_BLOCK_TRACK.BCT';ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+YWZD/YWZD_BLOCK_TRACK.BCT'*ERROR at line 1:ORA-19761: block size 0 is not valid for change tracking fileORA-19750: change tracking file: '+YWZD/YWZD_block_track.BCT'
解决办法:1、检查ASM磁盘及磁盘组的sector_size值;2、数据库12.1版本遇到bug问题;3、修复bug后重新配置块跟踪。
oerr ora 19761Database: 12c Release 1Error code: ORA-1976119761, 00000, "block size %s is not valid for change tracking file"// *Cause: While opening the specified change tracking file, it was found that// the file header did not contain a valid logical block size. This// probably means that the file is corrupt.// *Action: If the file can be repaired, do so, otherwise disable and re-enable// change tracking to re-initialize the file.Bug 19168143 - Block change tracking file cannnot be created on 4k sector size diskgroup (Doc ID 19168143.8)
Bug 19168143 - Block change tracking file cannnot be created on 4k sector size diskgroup (Doc ID 19168143.8)

1、如果数据库集群上运行多个实例,可以通过脚本实现批量维护。首先,批量生成每个实例的配置脚本,然后再运行相应的脚本。
批量生成修改脚本gen_enable_bct.sh#!/bin/bashps -ef|grep pmon|grep ora|grep -v grep|awk '{print$8}'var=`ps -ef|grep pmon|grep ora|grep -v grep|awk '{print$8}'`for sid in $vardolen=${#sid}vchar=`echo $sid|cut -c $[ len - 1 ]-`dbname=`echo $sid|awk -F'_' '{print$3}'`if [ $vchar = '_1' ] ;thenecho 'export ORACLE_SID='$dbname'_1'echo 'sqlplus as sysdba <<-EOF'echo "alter database enable block change tracking using file '+"$dbname"/"$dbname"_block_track.bct';"|tr a-z A-Zecho "EOF"echo ""elseecho 'export ORACLE_SID='$dbnameecho 'sqlplus / as sysdba <<-EOF'echo "alter database enable block change tracking using file '+"${dbname%?}"/"${dbname%?}"_block_track.bct';"|tr a-z A-Zecho "EOF"echo ""fidone
2、批量检查块跟踪是否启用。
批量检查脚本check_bct.sh#!/bin/bashORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1sqlplus=$ORACLE_HOME/bin/sqlplusexport ORACLE_HOMEps -ef|grep ora_|grep pmon|awk '{print$8}'for inst_id in `ps -ef|grep ora_|grep pmon|awk '{print$8}'|sed -e 's/ora_pmon_//'|grep -v "sed"`doecho "export ORACLE_SID=$inst_id"export ORACLE_SID=$inst_id$sqlplus -s / as sysdba <<-EOFset linesize 1000col filename for a100select status,filename from v\$block_change_tracking;EOFdone
在使用RMAN 增量备份的情况下,启动block change tracking,在做增量备份时会缩短RMAN 备份的时间,因为不用扫描整个data file。但是block tracking 也会带来其他的一些开销。所以要根据实际情况决定是否启用block change tracking。
以上就是本期关于“开启块修改跟踪特性提升备份效率”运维管理方法。希望能给大家带来帮助。
欢迎关注“数据库运维之道”公众号,一起学习数据库技术。

推荐阅读




