Oracle增量备份的一个注意点



看过《Backup and Recovery User’s Guide》的人都应该很清楚Oracle的增量备份,增量备份指的是Oracle可以做到只备份上次备份完成之后数据库发生变更的数据块,当然在这里的“上次备份”到底值得是那次却是很值得考究的。

Oracle中,增量备份时分等级的,级别从0开始,一级一级递增,不过实际上用的最多的也就是0级和1级了,0级增量备份是后面级别的增量备份的基础,0级备份实际上就是一个完全备份,与普通的完全备份唯一的不同点是0级备份可以作为其他级别增量备份的基础,而普通的完全备份是不能的。

从级别1开始,Oracle的增量备份分为差异增量备份和积累增量备份两种,其中差异增量备份备份的是自上一次同级别的差异备份或者是上一次更高级别的备份完成之后的数据库发生改变的数据块;而积累增量备份则是备份的自上一次上一级增量备份完成以来数据库发生改变的数据块。在《Backup and Recovery User’s Guide》“增量备份”一节中有两幅图很形象的描述了这两个增量备份之间的异同,这里链接如下:

差异增量备份图示,来自Oracle文档
差异增量备份图示,来自Oracle文档
积累增量备份图示,来自Oracle文档
积累增量备份图示,来自Oracle文档

有了图的帮助我们是很容易就能理解这两个不同的增量备份的概念的,但是问题就在于如果没有做0级备份的时候,这个时候做1级或者更低级别的增量备份会怎么样呢?对此,《Backup and Recovery User’s Guide》一书中也是有说明(Oracle版本11gR2版本)的:

If no level 0 backup is available in either the current or parent incarnation, then the behavior varies with the compatibility mode setting. If compatibility is >=10.0.0, RMAN copies all blocks that have been changed since the file was created. Otherwise, RMAN behaves as it did in previous releases, by generating a level 0 backup.

然后经过进一步查看却发现个很有意思的地方,上面的文章中只说了当兼容性设置大于等于10.0.0时,RMAN会备份所有的数据块,其实就是相当于一个完全备份,否则就会生成一个0级的备份,在这里没有说明当兼容性设置大于等于10.0.0是产生的完全备份可以用来做什么,能否当成一个0级备份使用。

于是又回头查了查10gR2和9iR2两份备份文档中的说明,这里先给出10gR2的说明

If no level 0 backup is available, then the behavior depends upon the compatibility mode setting. If compatibility is >=10.0.0, RMAN copies all blocks changed since the file was created, and stores the results as a level 1 backup. In other words, the SCN at the time the incremental backup is taken is the file creation SCN. If compatibility <10.0.0, RMAN generates a level 0 backup of the file contents at the time of the backup, to be consistent with the behavior in previous releases.

这里说的很明确了,当兼容性大于等于10时,产生的备份虽然相当于完全备份,但是却是标记为1级的。

再看看9iR2的文档说明

If no level 0 backup exists when you run a level 1 or higher backup, RMAN makes a level 0 backup automatically to serve as the base.

和上面两份文档没有其别,确定9i及之前的版本当做1级备份之前不存在0级备份时会产生一个0级的备份。

现在,最要紧的一点就是要确定当数据库兼容性设置大于等于10.0.0的时候,在没有进行0级备份的情况下实施1级备份,这时候产生的标记为1级备份的完全备份是否能够作为后续增量备份的基础备份呢?下面就是通过实验来验证一下,考虑到差异增量备份的追溯上次备份可以是同级的,无法验证1级全备是否可以用作基础备份,在这里备份都是使用的积累增量备份。

实验之前先说明下实验的环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- Oracle database
SQL> SELECT * FROM V$VERSION;
 
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE    11.1.0.7.0      Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
 
-- RMAN Version
$rman target /
 
Recovery Manager: Release 11.1.0.7.0 - Production on Mon Apr 12 03:31:43 2010
 
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
 
connected to target database : ORCL (DBID=961654692)
 
RMAN>

首先进行一个1级的积累增量备份,在这之前没有进行过0级的增量备份(为方便起见,所有的备份都只备份一个数据文件):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
RMAN> backup as compressed backupset
2> incremental level 1 cumulative datafile 1
3> format '/data/backup/system-%d-%s-%t.bkp' ;
 
Starting backup at 12-APR-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name =databases/orcl/system-01.dbf
channel ORA_DISK_1: starting piece 1 at 12-APR-10
channel ORA_DISK_1: finished piece 1 at 12-APR-10
piece handle=/data/backup/system-ORCL-203-716096188.bkp tag=TAG20100412T033628 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time : 00:00:15
channel ORA_DISK_1: starting compressed incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 12-APR-10
channel ORA_DISK_1: finished piece 1 at 12-APR-10
piece handle=/data/backup/system-ORCL-204-716096204.bkp tag=TAG20100412T033628 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time : 00:00:01
Finished backup at 12-APR-10

备份结果如下,这里产生的备份是1级备份,但是看文件大小可以看出来备份的整个数据文件:

1
2
3
4
5
6
7
8
9
10
11
12
RMAN> list backupset 166;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
166     Incr 1  37.59M     DISK        00:00:12     12-APR-10
         BP Key : 167   Status: AVAILABLE  Compressed: YES  Tag: TAG20100412T033628
         Piece Name : /data/backup/system-ORCL-203-716096188.bkp
   List of Datafiles in backup set 166
   File LV Type Ckp SCN    Ckp Time  Name
   ---- -- ---- ---------- --------- ----
   1    1  Incr 4011928    12-APR-10 databases/orcl/system-01.dbf

在磁盘上面的文件:

1
2
3
4
$ ls -lth
total 39M
-rw-r----- 1 oracle dba 1.2M Apr 12 03:36 system-ORCL-204-716096204.bkp
-rw-r----- 1 oracle dba  38M Apr 12 03:36 system-ORCL-203-716096188.bkp

让后同样命令再跑一次,等到的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
RMAN> list backupset 168;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
168     Incr 1  37.59M     DISK        00:00:12     12-APR-10
         BP Key : 169   Status: AVAILABLE  Compressed: YES  Tag: TAG20100412T034101
         Piece Name : /data/backup/system-ORCL-205-716096461.bkp
   List of Datafiles in backup set 168
   File LV Type Ckp SCN    Ckp Time  Name
   ---- -- ---- ---------- --------- ----
   1    1  Incr 4012076    12-APR-10 databases/orcl/system-01.dbf

很明显的看到备份结果的大小是没有变化的,因为在两次备份之间数据库的system数据文件基本就没有变化,如果上次的1级的完全备份可以当成0级使用的话这次备份的数据文件应该是非常的小才对。同样的备份结果的大小也可以通过ls命令看到:

1
2
3
4
5
6
$ ls -lth
total 78M
-rw-r----- 1 oracle dba 1.2M Apr 12 03:41 system-ORCL-206-716096476.bkp
-rw-r----- 1 oracle dba  38M Apr 12 03:41 system-ORCL-205-716096461.bkp
-rw-r----- 1 oracle dba 1.2M Apr 12 03:36 system-ORCL-204-716096204.bkp
-rw-r----- 1 oracle dba  38M Apr 12 03:36 system-ORCL-203-716096188.bkp

当然这个时候不能满足于这个结论,我们还需要进一步的验证这里的1级的全备就是1级,为此我们做一个2级的积累差异备份看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
RMAN> backup as compressed backupset
2> incremental level 2 cumulative datafile 1
3> format '/data/backup/system-%d-%s-%t.bkp' ;
 
Starting backup at 12-APR-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed incremental level 2 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name =databases/orcl/system-01.dbf
channel ORA_DISK_1: starting piece 1 at 12-APR-10
channel ORA_DISK_1: finished piece 1 at 12-APR-10
piece handle=/data/backup/system-ORCL-207-716096761.bkp tag=TAG20100412T034601 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time : 00:00:01
channel ORA_DISK_1: starting compressed incremental level 2 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 12-APR-10
channel ORA_DISK_1: finished piece 1 at 12-APR-10
piece handle=/data/backup/system-ORCL-208-716096763.bkp tag=TAG20100412T034601 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time : 00:00:01
Finished backup at 12-APR-10

再看看备份结果:

1
2
3
4
5
6
7
8
9
10
11
12
RMAN> list backupset 170;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
170     Incr 2  40.00K     DISK        00:00:01     12-APR-10
         BP Key : 171   Status: AVAILABLE  Compressed: YES  Tag: TAG20100412T034601
         Piece Name : /data/backup/system-ORCL-207-716096761.bkp
   List of Datafiles in backup set 170
   File LV Type Ckp SCN    Ckp Time  Name
   ---- -- ---- ---------- --------- ----
   1    2  Incr 4012219    12-APR-10 databases/orcl/system-01.dbf

再看看实际生成的文件:

1
2
3
4
5
6
7
8
$ ls -lth
total 79M
-rw-r----- 1 oracle dba 1.2M Apr 12 03:46 system-ORCL-208-716096763.bkp
-rw-r----- 1 oracle dba  48K Apr 12 03:46 system-ORCL-207-716096761.bkp
-rw-r----- 1 oracle dba 1.2M Apr 12 03:41 system-ORCL-206-716096476.bkp
-rw-r----- 1 oracle dba  38M Apr 12 03:41 system-ORCL-205-716096461.bkp
-rw-r----- 1 oracle dba 1.2M Apr 12 03:36 system-ORCL-204-716096204.bkp
-rw-r----- 1 oracle dba  38M Apr 12 03:36 system-ORCL-203-716096188.bkp

的确很小了,是有48k,这才是真正的增量备份了。

因此在这里我们可以得出结论当数据库兼容性设置为大于等于10.0.0时,尽管在没有0级备份情况做1级的增量备份实际上是一个全备,但是这个全备也是1级的,不能用作1级积累增量备份的基础备份,这个是在设计备份策略的时候要注意的问题,这也是和9i及之前版本不同的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值