RMAN不但能进行数据库、数据文件等全量备份,而且还能做增量备份。增量备份有两大优点:

  • 减少数据库恢复的时间。

    数据库恢复是利用归档日志,不断的应用归档日志,将数据库恢复到最新(或者指定状态)。但是增量备份只备份被修改了的数据块,在执行恢复时,直接用备份出来的数据块去覆盖数据文件中被更改的数据块。

  • 减少备份时间

    增量备份只需备份被修改过的数据块,备份时间和备份存储空间都有相应的减少。

做增量备份的前提,是需要一个基准备份,所有的增量都是针对这个基准来说的。要不然,增量备份无从谈起。

增量备份使用INCREMENTAL LEVEL=integer 关键字指定。integer可以是0到4之间的任意整数。

必须将0 级备份作为增量策略的基础备份。0 级增量备份在内容上与完全备份相同,但与完全备份不同的是,0 级备份被看作是增量策略的一部分。如果在运行1 级或更高级别的备份时,0 级备份不存在,RMAN 会自动制作0 级备份。

增量备份的方式分两种:

  • 差异增量备份

n 级备份,备份自最近n 级或更低级别备份以来更改过的所有块。

  • 累计增量备份

n 级备份,它包含自上次n-1 级或更低级别备份以来更改过的所有块。

累计增量备份使用cumulative关键字,如:

BACKUP INCREMENTAL level 2 cumulative DATABASE;

下面我们演示一下增量备份

RMAN> backup incremental level =0 database;Starting backup at 2015/07/08 15:16:44
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 0 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/devdb/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/devdb/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/devdb/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/devdb/undotbs01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/devdb/idx01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/devdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/08 15:16:44
channel ORA_DISK_1: finished piece 1 at 2015/07/08 15:17:59
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_08/o1_mf_nnnd0_TAG20150708T151644_bssmlwog_.bkp tag=TAG20150708T151644 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
Finished backup at 2015/07/08 15:17:59Starting Control File and SPFILE Autobackup at 2015/07/08 15:17:59
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/autobackup/2015_07_08/o1_mf_s_884531879_bssmo893_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015/07/08 15:18:00

下面我们对库做一些更改

SQL> insert into emp_new select * from emp_new;14 rows created.SQL> /28 rows created.SQL> /56 rows created.SQL> /112 rows created.SQL> /224 rows created.SQL> /448 rows created.

再执行一个全库的1级备份

RMAN> backup incremental level=1 database;Starting backup at 2015/07/08 15:24:38
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/devdb/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/devdb/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/devdb/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/devdb/undotbs01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/devdb/idx01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/devdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/08 15:24:39
channel ORA_DISK_1: finished piece 1 at 2015/07/08 15:25:34
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_08/o1_mf_nnnd1_TAG20150708T152439_bssn1qjd_.bkp tag=TAG20150708T152439 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
Finished backup at 2015/07/08 15:25:34Starting Control File and SPFILE Autobackup at 2015/07/08 15:25:34
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/autobackup/2015_07_08/o1_mf_s_884532334_bssn3h9x_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015/07/08 15:25:35

我们查看一下增量备份集文件的大小

11gdg-> ll -h
total 1.1G
-rw-r----- 1 oracle asmadmin 1.1G Jul  8 15:17 o1_mf_nnnd0_TAG20150708T151644_bssmlwog_.bkp
-rw-r----- 1 oracle asmadmin 488K Jul  8 15:25 o1_mf_nnnd1_TAG20150708T152439_bssn1qjd_.bkp

讲完了增量备份的概念,你可能会有一个疑问。RMAN是怎么知道自上次备份后,哪些块被修改了呢?数据文件中的每个数据块中都记录了SCN号,在增量备份期间,RMAN读取数据文件中的每个块的SCN,和父级增量备份集的CHECKPOINT SCN比较。如果块的SCN大于CHECKPOINT SCN,那么此块即可认定被修改过。

这样实现增量备份有什么缺点呢?虽说是增量备份、可是备份时还是需要扫描数据库的所有块。也就是说增量备份所花费的时间并不比全量备份少。只是生成的备份集比较小而已。

在10g中rman做增量备份不再需要扫描整个数据文件了,10g引入的新特性 block change tracking。Block change tracking进程记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN可以不再扫描整个文件以查找变更数据。

block change tracking实现了如下功能:

  • 维护了一个record,记录了自上次备份以来的被修改的数据块。

  • 当redo生成的时候,将这个record写到文件中。

  • 当执行增量备份时,会自动访问这个文件,以加快备份速度。

开启block change tracking

SQL> alter database enable block change tracking using file '/u01/app/oracle/fast_recovery_area/tracking.log';Database altered.

我们修改一下数据。

SQL> insert into emp_new select * from emp_new;896 rows created.SQL> commit;

查看一下tracking文件

[root@11gdg fast_recovery_area]# ll -h tracking.log
-rw-r----- 1 oracle asmadmin 12M Jul  8 17:24 tracking.log

按照道理来说,emp_new中896条数据,不应该有那么大的tracking文件。我们再往表里添加一些数据,看看tracking文件是否有变化。

SQL>  insert into emp_new select * from emp_new;1792 rows created.SQL> /3584 rows created.SQL> /7168 rows created.SQL> /14336 rows created.SQL> /28672 rows created.SQL> /57344 rows created.SQL> commit;Commit complete.

再次查看tracking.log文件大小。

[root@11gdg fast_recovery_area]# ll -h tracking.log
-rw-r----- 1 oracle asmadmin 12M Jul  8 17:27 tracking.log

大小没有变化。

通过视图v$block_change_tracking,可以查看tracking文件的详细情况

SQL> col filename for a50
SQL> set linesize 200 pagesize 800
SQL> select * from v$block_change_tracking;STATUS       FILENAME                        BYTES
---------- -------------------------------------------------- ----------
ENABLED    /u01/app/oracle/fast_recovery_area/tracking.log  11599872SQL>

我们再做一次level 1的备份看看

RMAN> backup incremental level=1 database;Starting backup at 2015/07/08 17:39:38
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/devdb/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/devdb/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/devdb/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/devdb/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/devdb/users01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/devdb/idx01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/08 17:39:38
channel ORA_DISK_1: finished piece 1 at 2015/07/08 17:41:33
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_08/o1_mf_nnnd1_TAG20150708T173938_bssvytyy_.bkp tag=TAG20150708T173938 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:55
Finished backup at 2015/07/08 17:41:33Starting Control File and SPFILE Autobackup at 2015/07/08 17:41:34
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/autobackup/2015_07_08/o1_mf_s_884540494_bssw2gsv_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015/07/08 17:41:35

这个备份,并没有用到block change tracking 。因为上一次level 1 的备份是我们启动tracking功能之前做的。Oracle无法确定备份到启动tracking之间是否有块被修改了。

我们做些数据修改

SQL> conn scott/tiger
Connected.
SQL>  insert into emp_new select * from emp_new;114688 rows created.SQL> commit;Commit complete.

我们再做一次备份

RMAN> backup incremental level=1 database;Starting backup at 2015/07/08 17:45:08
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/devdb/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/devdb/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/devdb/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/devdb/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/devdb/users01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/devdb/idx01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/08 17:45:09
channel ORA_DISK_1: finished piece 1 at 2015/07/08 17:45:16
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_08/o1_mf_nnnd1_TAG20150708T174508_bssw99qw_.bkp tag=TAG20150708T174508 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
Finished backup at 2015/07/08 17:45:16Starting Control File and SPFILE Autobackup at 2015/07/08 17:45:16
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/autobackup/2015_07_08/o1_mf_s_884540716_bssw9dhq_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015/07/08 17:45:17

此次备份全库耗时仅有7秒,先前大概都在1分钟左右。可见使用block change tracking技术可以大大的加快增量备份的速度。

转载于:https://blog.51cto.com/lqding/1680253

Oracle 学习之RMAN(四)增量备份相关推荐

  1. Oracle的Rman差异增量备份

    所谓增量备份,顾名思义即是每次备份操作那些发生了"变化"的数据块.在RMAN增量备份中有两种:Differential(差异备份)和Cumulative(增量备份)方式.由于需求这 ...

  2. 【RMAN】增量备份学习与实践

    一.基础知识 大家对RMAN我想都有不少的了解,此处只想对增量备份进行一下学习与实践,也是因为工作中确实有这样的需求存在.增量备份分为两种:Differential 差异,Cumulative 累积. ...

  3. oracle的scn增量备份,Oracle技术之利用scn增量备份实现数据库增量恢复

    数据库版本 SQL> select * from v$version; BANNER ------------------------------------------------------ ...

  4. oracle的scn增量备份,【Oracle】基于SCN的增量备份修复DataGuard GAP

    1. 首先来模拟 Gap 的产生 1.1. 备库关闭: SYS@dgtest_sshutdown immediate; 1.2. 主库切换日志 SYS@dgtestselect SEQUENCE#,A ...

  5. Oracle 知识篇+RMAN带库备份恢复/带库全备恢复/带库0级备份恢复操作概要

    说明:本文为Oracle RMAN带库备份恢复/带库全备恢复/带库0级备份恢复操作概要 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化 ①带库备份 rman targ ...

  6. oracle 登录rman,Oracle 学习之RMAN(二)由此开始

    Recovery Manager(RMAN)是Oracle提供的一个实用工具,使用RMAN可以对Oracle数据库进行备份.还原.恢复等.RMAN还可以自动管理Oracle的备份策略.RMAN提供了命 ...

  7. oracle的catalog,oracle学习笔记 RMAN catalog的创建和使用

    一般用rman target/登录后执行的备份在使用list backup都会提示:using target database control file instead of recovery cat ...

  8. oracle学习笔记(四)-- 数学函数

    一.数学函数 名称 格式 功能 实例 abs abs( number ) 取绝对值 abs(-23) return 23 abs(-23.6) return 23.6 acos acos( numbe ...

  9. Oracle学习(十四)分表分区

    本文借鉴:Oracle亿级数据查询处理.Oracle 分区表使用和查询.垂直分区+水平分区(特此感谢!) 一.前言 大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机,在尝试添加索引及查询 ...

  10. Oracle 学习笔记(四) Oracle表空间和数据文件

    tablespace是oracle的逻辑结构,datafile是oracle的物理结构. tablespace由datafile组成. tablespace 分为: permanent tablesp ...

最新文章

  1. 深入了解jquery中的键盘事件
  2. Ubuntu18.04安装Intel® oneAPI Toolkit
  3. Thinkphp学习笔记-编辑工具Sublime license
  4. 云计算,从“资源时代”迈入“功能时代”
  5. 将完整的XP(非PE)安装到U盘
  6. 【算法】159题 Longest Substring with at Most Two Distinct Characters 最大的子串
  7. [Hive] Hive表压缩
  8. [文艺节目/礼仪大赛策划方案]图:选手出场时?如何用Flash透明渲染PPT?展示排行榜时如何使用PPT及Flash渲染?
  9. 计算机课程哪个网校比较好,计算机软考在线学习哪个好
  10. latex 输入下划线_
  11. Word中把竖排文字里的数字变横向
  12. syntaxerror:_解决SyntaxError:解析时出现意外的EOF
  13. 网页访问localhost出现用户名和密码登录弹窗
  14. 局域网共享文件夹/共享文件夹无法访问解决办法
  15. 电脑win7蓝屏没有修复计算机,手把手教你win7蓝屏如何修复
  16. linux图形界面bind dns,在linux上使用BIND建立DNS服务器
  17. 内存屏障 Memory Barriers
  18. java随堂练习09-面对对象,创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
  19. 【GoCN酷Go推荐】快且灵活的JSON解析器-Jsoniter
  20. Tikz作图教程:如何画流程图?——从一个简单的例子谈起

热门文章

  1. 【VS2010学习笔记】【编程实例】 (含有类的动态链接库的封装和调用)
  2. 【LeetCode】【字符串】题号:*551. 学生出勤记录 I
  3. 从零基础入门Tensorflow2.0 ----六、28 深度可分离卷积神经网络
  4. curl的get请求设置参数实例
  5. Android ListView观察者模式的应用
  6. 几种主流热修复方案分析
  7. OpenGL ES总结(五)OpenGL 中pipeline机制
  8. java集合框架中迭代器的作用_JAVA集合框架:Iterator迭代器
  9. solaris系统安装oracle数据库,solaris10下安装oracle11gr2详解!
  10. 华为鸿蒙重磅更新,华为重磅官宣!鸿蒙系统升级机型遭曝光:多达55款产品支持升级...