【转】在rman增量备份中,有差别增量和累积增量的概念

   本文转自hougoo的博客 html

一、概念 sql

差别增量:是备份上级及同级备份以来全部变化的数据块,差别增量是默认增量备份方式 数据库

累积增量:是备份上级备份以来全部变化的块 安全

由于累积增量是备份上级备份以来全部变化的数据块,因此累积增量须要更多的备份时间,同时须要较小的恢复时间;而差别增量正好相反,它能够备份同级备份以来变化的数据块。因此会减小备份时间,但须要更多的恢复时间.在oracle 9中增量备份须要经过扫描整个数据库的数据块才能知道哪些数据块发生了变化,这是一个代价很大,时间很长的过程,并且因为增量备份造成多个不一样的备份集,使恢复变得更加不可靠,因此增量备份在版本9中仍然不被推荐使用;在10g中,增量备份做了很大的改进,不须要再扫描全部数据块就能得知哪些数据块发生变化(块跟踪),从而大大提高备份效率。但这些却以牺牲磁盘i/o为代价,因此在oltp事务系统中还得衡量是否愿意以i/o为代价来保证安全及高可用性。10g还支持增量合并,增量备份可支持7级增量。 oracle

开启块跟踪功能 (Database Backup and Recovery Basics 4.4.4 Improving Incremental Backup Performance: Change Tracking) app

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/app/oracle/product/oradata/fatdb/rman_chg.log' reuse; url

Database altered. orm

须要说明的是10g起oracle官方只推荐使用level 0和level 1级备份,10g还能使用level 2。本文只讨论下level 2的含义,并不推荐使用。 htm

首先看下Oracle官方解释 载至在线文档Database Backup and Recovery Basics 4.4节RMAN Incremental Backups: blog

A level 1 incremental backup can be either of the following types:

A differential backup, which backs up all blocks changed after the most recent incremental backup at level 1 or 0

A cumulative backup, which backs up all blocks changed after the most recent incremental backup at level 0

Incremental backups are differential by default.

也就是differential 是上次备份(不管是level 0或者level 1)至今的变化数据,这个是level 1的缺省值。而cumulative 是从上次level 0备份后至今的全部的变化数据,也就是说,若是在level 0 至今,中间若是有若干次增量备份(level  1的differential 或者cumulative ),全部的变化内容都将保存在这个增量集中。

集合下图理解:

增量备份的level 1是从上次0或者1至今的变化,而level 2是从上次备份至今的增量,不管是0或者1或者2;

累积备份的level 1是从上次0至今的累积变化,而level 2是上次level 0或者level 1至今的累积增量(包括期间的level 2增量累计和)

RMAN备份等级详解
RMAN备份等级详解

这里看一个具体例子:若咱们对一个星期作以下备份策略。若是咱们要恢复到星期五那天,那么差别增量只须要使用星期天的0级,星期三的1级,星期4、五的2级就能够恢复;累积增量则须要星期天的0级、星期三的1级,星期五的2级便可进行恢复。

RMAN备份等级详解

从网上载了几个备份脚本

全库备份:

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag 'dbfull' format '/u01/oradata/backup/full%u_%s_%p' database
include current controlfile;
sql 'alter system archive log current';
backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,能够单独按期备份
release channel c1;
release channel c2;
release channel c3;
}

零级备份:

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag 'db0' format '/u01/oradata/backup/db0%u_%s_%p'
database skip readonly;
sql 'alter system archive log current';
backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,能够单独按期备份
release channel c1;
release channel c2;
release channel c3;
}

1级备份:

run{allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;backup incremental level 1 tag 'db1' format '/u01/oradata/backup/db1%u_%s_%p'database skip readonly;sql 'alter system archive log current';backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'archivelog all delete input; #备份归档可选,能够单独按期备份release channel c1;release channel c2;release channel c3;}