浅谈Blocking Changing Tracking文件

2021-08-17 13:58:34 浏览数 (1)

Oracle备份还原(Backup & Recovery)是作为数据库管理DBA最重要的工作之一,也是基本功之一。Oracle作为一款目前最成功的商用数据库软件系统,为使用者提供了多种类型的数据备份还原解决方案,以适应不同的场景需求。

简单的说,Oracle备份还原方案主要包括两个大类型:用户管理(User-Managed)和系统管理(System-Managed)。我们配合不同的归档模式,可以实现完全备份还原和非完全备份还原。

在备份还原问题上,没有一个统一要做到什么的标准。我们在确定一个系统的备份策略时,主要是依据三个标准:

代码语言:javascript复制
1、最大容忍数据损失。系统用户能够最大容忍多长时间的数据丢失;
2、最大数据保存时间。系统用户要求恢复最远的数据版本,也就是备份保存多长时间;
3、备份时是否允许停机。在目前7×24广泛的情况下,是否允许冷备是一个重要的需求方面;

对数据进行备份的时候,我们通常会采用增量Incremental的备份策略。在Oracle中,增量备份是依据Level进行配置的。Level 0实际上就是表示进行全库备份,而Level 1就是表示增量备份,与上次的备份版本进行对比,将变化的数据块进行备份。

 Level 1备份又分为cumulative和differential两种类型。两者的差别在于寻找对比基线的不同策略。Cumulative方式是寻找距上次全库备份的block change差异,而Differential是寻找上次备份(可能是Incremental)的差异。

 在本篇中,笔者主要介绍一下Oracle 进行差异备份时候的优化策略。

1、10g优化策略——Blocking Changing Tracking

 我们从微观角度看问题,Incremental Backup是存在一些思考的问题的。当我们进行了一次全库备份(例如 Incremental Level 0),再次进行incremental level 1增量备份的时候,Oracle需要获取到距离上次备份的所有数据表变化块。

 在Blocking Changing Tracking特性之前,Oracle是通过检索所有数据文件数据块的方法来进行变化数据块的定位。具体来说,就是通过三个SCN来进行定位,分别为Checkpoint SCN、Incremental start SCN和Block SCN。

 当我们的数据库容量很大的时候,检查数据文件变化数据块是一个任务很重的工作。出于性能优化的考虑,Oracle 10g引入了Blocking Changing Tracking机制。

 Blocking Changing Tracking机制是Oracle为了Incremental Backup而引入的一种记录策略。当数据库启用了Blocking Changing Tracking启用之后,Oracle会在指定的目录上生成一个文件,以Bit Map位图方式记录数据块的变化。当进行Incremental Backup的时候,Oracle就直接访问这个文件,获取变化数据块的信息。这样,就可以直接访问到数据块进行收集。

 默认情况下,Blocking Changing Tracking特性是不会启用的。下面,我们演示一下如何启用和配置Blocking Changing Tracking特性。

2、Blocking Changing Tracking配置

 我们选择Oracle 11g进行实验。

代码语言:javascript复制
 SQL> conn / as sysdba

Connected.

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

默认情况下,Blocking Changing Tracking会生成对应的Tracking File文件。在10g之后,Tracking File的保存是可以使用OMF(Oracle-Managed File)特性的,也就是说,我们可以不设置Tracking文件的目录名称信息。

当然,使用OMF的前提是进行db_create_file_dest的参数配置。

代码语言:javascript复制
 SQL> show parameter db_create;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_create_file_dest                  string      /u01/app/oradata

db_create_online_log_dest_1          string

db_create_online_log_dest_2          string

(篇幅原因,省略部分内容……)

如果我们不指定文件名(也是Oracle推荐的方式),就会在db_create_file_dest目录下进行数据文件自动创建。

代码语言:javascript复制
SQL> alter database enable block change tracking;

Database altered.

此时,我们在文件系统上可以看到对应的内容。 

代码语言:javascript复制
[oracle@bsplinux ~]$ cd /u01/app/oradata/
[oracle@bsplinux oradata]$ ls -l
total 8
drwxr-x--- 6 oracle oinstall 4096 Jul 17 23:36 ORA11G
[oracle@bsplinux oradata]$ cd ORA11G/
[oracle@bsplinux ORA11G]$ ls -l
total 28
drwxr-x--- 2 oracle oinstall 4096 Jul 17 23:36 changetracking
drwxr-x--- 2 oracle oinstall 4096 May 22 19:41 controlfile
drwxr-x--- 2 oracle oinstall 4096 Jul  3 03:34 datafile
drwxr-x--- 2 oracle oinstall 4096 May 22 19:42 onlinelog
[oracle@bsplinux ORA11G]$ cd changetracking/
[oracle@bsplinux changetracking]$ ls -l
total 11348
-rw-r----- 1 oracle oinstall 11600384 Jul 17 23:38 o1_mf_80c1nvn8_.chg

在数据库层面上,我们可以通过视图v$block_change_tracking来检查。 

代码语言:javascript复制
SQL> select status, filename from v$block_change_tracking;

STATUS     FILENAME
---------- --------------------------------------------------------------------------------
ENABLED    /u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg

此时,我们就开启了block changing tracking组件方法。关闭该特性,也有相应的方法。

代码语言:javascript复制
SQL> alter database disable block change tracking;
Database altered.

SQL> select status, filename from v$block_change_tracking;
STATUS     FILENAME
---------- --------------------------------------------------------------------------------
DISABLED   

3、命名block changing tracking文件

除了使用OMF,我们也是可以命名使用Tracking文件的。下面我们开启该功能。

代码语言:javascript复制
SQL> alter database enable block change tracking using file '/u01/app/oradata/ORA11G/test.chg' reuse;

Database altered.

SQL> select status, filename from v$block_change_tracking;
STATUS     FILENAME
---------- --------------------------------------------------------------------------------
ENABLED    /u01/app/oradata/ORA11G/test.chg

我们也可以进行重命名文件,不过这个操作是要进行重启数据库进入mount状态。

代码语言:javascript复制
SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.
Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             356518272 bytes
Database Buffers           58720256 bytes
Redo Buffers                6094848 bytes
Database mounted.

SQL> alter database rename file '/u01/app/oradata/ORA11G/test.chg' to '/u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg';

Database altered.

此时,我们可以启动系统。

代码语言:javascript复制
SQL> alter database open;

Database altered.

SQL> select status, filename from v$block_change_tracking;

STATUS     FILENAME
---------- --------------------------------------------------------------------------------
ENABLED    /u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg

4、block changing tracking文件大小

 最后我们一起讨论一下Tracking文件的大小问题。我们在开启Tracking功能的时候,是不能够指定Tracking文件的大小的。该文件的大小是由数据库体积大小来决定的。随着Oracle数据库体积的增加、减少,该文件也会自动的进行变化。

在Oracle中,我们可以从v$block_change_tracking中查看到该文件的大小信息。在MOS上,我们查到了对应的计算公式:

代码语言:javascript复制
= <# of redo threads> * (# of old backups   2) * (size of db/250000)

一般情况下,我们有一个经验对应比例1/30000。也就是1TB的数据,对应Tracking File为30MB左右。

5、结论

Oracle备份还原是我们研究的一个重要方面。正式生产环境下,备份还原策略都是一个综合性多种策略共同使用的过程。Incremental Backup在应对海量数据备份场景,有着很强的优势。Block Changing Tracking是Oracle 10g的一个重要优化策略,值得我们研究学习。 

0 人点赞