ORACLE数据库备份入门:第二部分:3-全量与增量备份
1. 全量与增量的配合
全量与增量的区别,这很容量理解。全量(level 0)就是备份所有数据,增量(level 1)就是仅仅对变化的数据进行备份。前者的好处是数据的完整性,后者的好处是备份速度快。经典的备份方案将两种方式进行组合,即每周一次全量备份,每日一次增量备份。当需要恢复时,首先进行全量恢复,再逐一进行增量恢复。例如,每个周日进行一次全量备份,周一到周六,每日一次增量备份。当周四发现设置故障后,需要将数据进行恢复,那么我们必须要先恢复周日的全量备份,再分别依次恢复周一、周二、周三的增量备份。显然,恢复过程耗时会较长,这还不是最坏的情况。非常有可能会出现一次全量恢复加上6次增量恢复的场景。每周一个备份周期,这并不一定的恒定的,很多管理员根据自己的业务实际情况制定了三天周期,即执行一次全量备份后,在后续的两天分别执行增量备份。这样一来,最耗时的恢复过程也只是一次全量加上两次进增量。还有一些环境中,管理员权衡利弊,制定了每日一次全量备份的策略,从不进行增量备份。这也常见的策略,只是不适用于体量较大的数据库。下面,我们讨论一下增量备份的操作过程。
2.差异与积累
首先,增量有两种,即差异增量和积累增量。举例说明区别:
差异增量(incremental),检查上一次备份以后所有的数据变化,将变化的数据进行备份。上一次备份可能是level 1也可以是level 0。
周日全量备份,周一仅备份周日备份结束后数据发生变化的部分,周二仅备份周一备份结束后数据发生变化的部分,以此类推。
积累增量(cumulative),检查上一次全量备份以后所有的数据变化,将变化的数据进行备份。
周日全量备份,周一仅备份周日备份结束后数据发生变化的部分,周二同样仅备份周日备份结束后数据发生变化的部分,以此类推。
| 时间 | 数据内容 | 差异增量备份内容 | 积累增量备份内容 |
|---|---|---|---|
| 第一天全量 | 1,2,3,4 | 1,2,3,4 | 1,2,3,4 |
| 第二天增量 | 1,2,3,4,5 | 5 | 5 |
| 第三天增量 | 1,2,3,4,5,6 | 6 | 5,6 |
| 第四天增量 | 1,2,3,4,5,6,7 | 7 | 5,6,7 |
| 第五天增量 | 1,2,3,4,5,6,7,8 | 8 | 5,6,7,8 |
| 第六天增量 | 1,2,3,4,5,6,7,8,9 | 9 | 5,6,7,8,9 |
| 第七天增量 | 1,2,3,4,5,6,7,8,9.10 | 10 | 5,6,7,8,9,10 |
明显可以看出,差异增量每日的备份数据量要小于积累增量,但是积累增量备份方式在恢复时有更大的优势。无论要恢复到哪一天的数据,积累增量备份策略下,只需要一个全量恢复+一个增量恢复即可完成。但是如果使用了差异增量,则要使用一个全量恢复+一个或多个增量恢复,时间上明显要更长。总结一下两种增量的优点和缺点,差异备份快,但是恢复慢;积累备份慢,但是恢复快。
了解了全量备份和增量备份的原理后,我们看看在RMAN中是如何操作的。
1) 全量备份
RMAN> backup incremental level 0 database;
这似乎与文章开头的全量backup database有所不同,区别在于,如果没有incremental level 0的关键字,这个全量备份就不能作为增量备份的基础数据。
2) 差异增量
RMAN> backup incremental level 1 database;
查找最近一次的incremental level 1备份作为基础进行比对。如果没有发现level 1,就去查找incremental level 0作为基础进行比如。如果还是没有发现level 0的备份,该命令自动转换成level 0全量备份,如第一条全量语法相同。
3) 积累增量
RMAN> backup incremental level 1 cumulative database;
查找最近一次的incremental level 0备份作为基础进行比对。如果没有发现level 0的备份,该命令自动转换成level 0全量备份,如第一条全量语法相同。增量的备份内容仅包括上一次备份完成后变化的数据,上一次备份,可能是全量,也可以增量,是系统自动判断的。
有些场景下,我们可能要在一个数据库中维护两套备份机制。场景:多个应用在同一个数据库中,使用不同的Schema。不同的应用希望管理自己的一套备份机制,它们具有不同的时间点、频率周期等特性,我们应该如何配置呢?例如,

A应用需要周六进行一次全量备份,后续每日增量。B应用,周日进行一次全量备份,后续仅在周三做一次增量备份。如左图所示。
如果我们按照RMAN默认的方式执行全量和增量策略,在周一时A增量备份就会以周日的B全量备份为基础,而周三的B增量备份也会以周三的A增量备份为基础。最终的结果是A每周六进行了全量备份,并且一周仅做一了一次备份;而B周日全量,后续每日增量(周三做两次),周六空闲。如右图所示。这显然不满足业务要求。因此,我们重新考虑备份策略的配置问题,来避免以上问题的出现。
RMAN提供了TAG参数,为每次备份打标签,用于区别不同的备份集。例如:
A的全量备份,标签为’full-01’,
RMAN> backup incremental level 0 tag 'full-01' database;
B的全量备份,标签为’full-02’,
RMAN> backup incremental level 0 tag 'full-02' database;
A的增量备份,增量基础数据为上一次标签为’full-01’的备份,并且本次备份的标签同样被记录为’full-01’,
RMAN> backup incremental level 1 for recover of copy with tag 'full-01' database;
B的增量备份,增量基础数据为上一次标签为’full-02’的备份,并且本次备份的标签同样被记录为’full-02’,
RMAN> backup incremental level 1 for recover of copy with tag 'full-02' database;
查看备份结果,
3. 增量算法优化
增量的算法是以上一次的备份为基础,扫描变化的数据进行备份。如果数据库体量巨大,扫描的耗时也会很长。Oracle提供了BCT技术(block change tracking),在日志中记录哪些数据块发生了变化。每次增量备份从BCT中读取备份的数据块范围,不需要扫描,加快备份速度。打开BCT功能(数据库企业版):
SQL> alter database enable block change tracking using file '/u01/app/oracle/oradata/bctlog\bct.log';
开启BCT功能后,每一次备份的数据块位图信息都会记录下来。还有一个需要注意的地方,BCT日志最多记录8次备份的信息。第1次全量备份被记录在BCT中,之后连续进行7次增量备份。当第9次进行备份时,BCT中的第1次备份信息会被覆盖掉。如果第9次备份是增量,那么它将无法找到之前的全量位图信息,意味着要重新进行全库扫描。因此,全量和增量的整个周期不能超过8次。通常,管理员会以7天为一周期,因此不会超出这个范围。
4.归档的增量
每一次备份都备份全部的归档,这将是非常费时的,也会占用大量的备份存储资源。归档备份有全量和增量的策略吗?答案是肯定的,只是概念上不这样称呼,实际上是有等效操作的:
仅备份那些没有备份过的归档,
RMAN> backup archivelog all not backed up;
因为归档数据的重要性,为了避免遗漏,管理员希望每个归档能备份2次。因此语法修改为仅备份那些没有备份过2次的,这包括没有备份过的和备份过1次的,
RMAN> backup archivelog all not backed up 2 times;
还有一个DBA比较关注的问题,不是备份的范畴,但是通过备份可以解决。在交易量比较繁重的场景中,归档日志的生成量非常大,尽管归档本身就是压缩格式的(再次压缩的意义不大),但是依然后占用大量的数据库存储空间。当归档日志空间占满时,数据库在安全机制的触发下会自动停止服务。在真实的用户案例中,大交易量的数据库,每小时会产生几百GB的归档,DBA必须定期对存储空间进行清理,而在清理前要100%确认归档日志已经被备份了。删除归档的命令:
删除全部归档,
RMAN> delete archivelog all;
删除序号20之前的全部归档,不包括20,
RMAN> delete archivelog until sequence 20;
查找归档日志名称中带有”test“字段,并且进行删除,
RMAN> delete archivelog like '%test%';
删除完成过一次备份的归档,
RMAN> delete archivelog all backed up 1 times to disk;
手动删除归档有一定的局限性,需要DBA时刻关注资源使用情况和备份完成情况,降低运维效率。可以实现自动化方式,通过优化备份语句,在完成归档备份后进行自动进行清除:
备份结束后,本次备份的归档日志将被删除,
RMAN> backup archivelog all delete input;
还记得我们刚刚提到的归档日志需要多次备份的问题吗?每个归档日志需要备份2次,那第一次备份后就删除了归档,就不能备份第二次了。为了解决这个问题,需要修改数据的归档删除策略:
备份过两次日志才允许被删除,
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;
当归档不满足2次备份的要求时,删除归档会失败,抛出RMAN-08138错误代码:

https://edu.csdn.net/course/detail/40454
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)