暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【应知应会】开启块修改跟踪特性提升备份效率

290
本期将为大家分享“开启块修改跟踪特性提升备份效率”运维管理方法。
关键字:块跟踪、块修改跟踪、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后台进程启动,然后可以发起备份验证备份性能和速度是否有提升。

      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 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为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 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。

            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;


            日志输出
            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,磁盘组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后重新配置块跟踪。

                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.


                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/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 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 / 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

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

                    参考资料
                    1、Bug 19168143 - Block change tracking file cannnot be created on 4k sector size diskgroup (Doc ID 19168143.8)
                    2、https://blog.csdn.net/tianlesoftware/article/details/6997647
                    3、、https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmbckba.htm#i1032148

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

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

                    欢迎加我的微信,拉你进数据库微信群。

                    推荐阅读


                    【干货攻略】Oracle报错篇 ORA-01378 磁盘扇区大小不兼容问题

                    【干货攻略】基于NBU备份软件进行Oracle数据库异机恢复

                    文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论