Oracle备份还原(Backup & Recovery)是作为数据库管理DBA最重要的工作之一,也是基本功之一。Oracle作为一款目前最成功的商用数据库软件系统,为使用者提供了多种类型的数据备份还原解决方案,以适应不同的场景需求。
简单的说,Oracle备份还原方案主要包括两个大类型:用户管理(User-Managed)和系统管理(System-Managed)。我们配合不同的归档模式,可以实现完全备份还原和非完全备份还原。
在备份还原问题上,没有一个统一要做到什么的标准。我们在确定一个系统的备份策略时,主要是依据三个标准:
ü 最大容忍数据损失。系统用户能够最大容忍多长时间的数据丢失;
ü 最大数据保存时间。系统用户要求恢复最远的数据版本,也就是备份保存多长时间;
ü 备份时是否允许停机。在目前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进行实验。
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的参数配置。
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目录下进行数据文件自动创建。
SQL> alter database enable block change tracking;
Database altered.
此时,我们在文件系统上可以看到对应的内容。
[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来检查。
SQL> select status, filename from v$block_change_tracking;
STATUS FILENAME
---------- --------------------------------------------------------------------------------
ENABLED /u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg
此时,我们就开启了block changing tracking组件方法。关闭该特性,也有相应的方法。
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文件的。下面我们开启该功能。
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状态。
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.
此时,我们可以启动系统。
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上,我们查到了对应的计算公式:
= * (# of old backups + 2) * (size of db/250000)
一般情况下,我们有一个经验对应比例1/30000。也就是1TB的数据,对应Tracking File为30MB左右。
5、结论
Oracle备份还原是我们研究的一个重要方面。正式生产环境下,备份还原策略都是一个综合性多种策略共同使用的过程。Incremental Backup在应对海量数据备份场景,有着很强的优势。Block Changing Tracking是Oracle 10g的一个重要优化策略,值得我们研究学习。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-735880/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-735880/