开启块修改跟踪特性提升备份效率

        欢迎关注“数据库运维之道”公众号,一起学习数据库技术!

        本期将为大家分享“开启块修改跟踪特性提升备份效率”运维管理方法。

        关键字:块跟踪、块修改跟踪、Block Change Tracking (BCT)、增量备份、ORA-19751、ORA-19761

块跟踪介绍

        随着数据库业务量的增长,数据库备份压力及存储的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 1000
col filename for a100
select status,filename from v$block_change_tracking;

        2、启用块跟踪功能,并创建修改块跟踪文件。从日志可以看到CTWR后台进程启动,然后可以发起备份验证备份性能和速度是否有提升。

alter database enable block change tracking using file '+磁盘组/数据库名_block_track.bct';
alter database enable block change tracking using file '/u01/app/oracle/oradata/数据库名_block_track.bct';

Fri Jun 25 19:18:01 2021
alter database enable block change tracking using file '+YWZD/YWZD_block_track.bct'
Fri Jun 25 19:18:01 2021
Block change tracking file is current.
Fri Jun 25 19:18:02 2021
Starting background process CTWR
Fri Jun 25 19:18:02 2021
CTWR started with pid=168, OS id=263989 
Fri Jun 25 19:18:02 2021
Block 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值为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 file
ORA-19750: change tracking file: '+YWZD/YWZD_BLOCK_TRACK.bct'
ORA-17502: ksfdcre:4 Failed to create file +YWZD/YWZD_BLOCK_TRACK.bct
ORA-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。

Sun Mar 10 00:43:50 2024
 ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+YWZD/YWZD_BLOCK_TRACK.BCT'
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Sun Mar 10 00:43:54 2024
NOTE: ASM instance returned error dumped to trace file /u01/app/oracle/diag/rdbms/YWZD/YWZD_2/trace/YWZD_2_ora_31452.trc
Sun Mar 10 00:43:54 2024
Errors in file /u01/app/oracle/diag/rdbms/YWZD/YWZD_2/trace/YWZD_2_ora_31452.trc:
ORA-00600: internal error code, arguments: [ORA_NPI_ERROR], [600], [ORA-00600: internal error code, arguments: [kfdAuAlloc2], [kfCheckDG], [YWZD], [3560], [31457280], [], [], [], [], [], [], []
], [], [], [], [], [], [], [], [], []
ORA-19751 signalled during:  ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+YWZD/YWZD_BLOCK_TRACK.BCT'...
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+ARCHDG/YWZD_BLOCK_TRACK.BCT'
Sun Mar 10 00:45:36 2024
Block change tracking file is current.
Sun Mar 10 00:45:36 2024
Starting background process CTWR
Sun Mar 10 00:45:36 2024
CTWR started with pid=159, OS id=33705
Sun Mar 10 00:45:36 2024
Block change tracking service is active.
Completed: ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+ARCHDG/YWZD_BLOCK_TRACK.BCT'

        场景二:操作系统Linux7,数据库版本12.1,ASM磁盘组sector_size值为4096。

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 file
ORA-19750: change tracking file: '+YWZD/YWZD_block_track.BCT'

        解决办法:(1)检查ASM磁盘及磁盘组的sector_size值;(2)数据库12.1版本遇到bug问题;(3)修复bug后重新配置块跟踪。

set linesize 1000
col path for a80
select name,label,path,sector_size from v$asm_disk;
select name,sector_size,block_size,compatibility,database_compatibility from v$asm_diskgroup;


Bug 19168143 - Block change tracking file cannnot be created on 4k sector size diskgroup (Doc ID 19168143.8)    

oerr ora 19761
Database: 12c Release 1
Error code: ORA-19761
19761, 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.

批量更新脚本

        1、如果数据库集群上运行多个实例,可以通过脚本实现批量维护。首先,批量生成每个实例的配置脚本,然后再运行相应的脚本。

批量生成修改脚本gen_enable_bct.sh
#!/bin/bash
ps -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 $var
do
len=${#sid}
vchar=`echo $sid|cut -c $[ len - 1 ]-`
dbname=`echo $sid|awk -F'_' '{print$3}'`
if [ $vchar = '_1' ] ;then
echo 'export ORACLE_SID='$dbname'_1'
echo 'sqlplus -s / as sysdba  <<-EOF'
echo "alter database enable block change tracking using file '+"$dbname"/"$dbname"_block_track.bct';"|tr a-z A-Z
echo "EOF"
echo ""
else
echo 'export ORACLE_SID='$dbname
echo 'sqlplus -s / as sysdba <<-EOF'
echo "alter database enable block change tracking using file '+"${dbname%?}"/"${dbname%?}"_block_track.bct';"|tr a-z A-Z 
echo "EOF"
echo ""
fi
done

        2、批量检查块跟踪是否启用。

批量检查脚本check_bct.sh
#!/bin/bash
ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
sqlplus=$ORACLE_HOME/bin/sqlplus
export ORACLE_HOME
ps -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"`
do
echo "export ORACLE_SID=$inst_id"
export ORACLE_SID=$inst_id
$sqlplus -s / as sysdba <<-EOF
set linesize 1000
col filename for a100
select status,filename from v\$block_change_tracking;
EOF
done


set linesize 1000
col filename for a100
col hostname for a30
col instance_name for a30
select (select host_name from v$instance) hostname,
       (select instance_name from v$instance) instance_name,
       status,
       filename
  from v$block_change_tracking;

        在使用RMAN 增量备份的情况下,启动block change tracking,在做增量备份时会缩短RMAN 备份的时间, 因为不用扫描整个data file。 但是block tracking 也会带来其他的一些开销。 所以要根据实际情况决定是否启用block change tracking。

参考资料

        以上就是本期关于“开启块修改跟踪特性提升备份效率”运维管理方法。希望能给大家带来帮助。

        欢迎关注“数据库运维之道”公众号,一起学习数据库技术!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值