这几天一直在测试oracle10g的新功能,其中测试到了rman的增量合并功能时,出现了问题,我的测试结果和oracle官方文档不是很符合,于是百思不得其解,迷茫了2天,后来经过无数遍的测试,思考,发现是oracle官方文档翻译的问题,其实测试结果和oracle中rman增量合并所要达到的结果完全一致,究其原因,是oracle官方翻译的文档害苦了俺,看来看oracle文档,还是看E文的好。
拿一点例子出来:
增量合并
www.ixdba.net
假如您有如下备份计划:
星期天 - 第 0 级(完全),带有标签 level_0
星期一 - 第 1 级(增量),带有标签 level_1_mon
星期二 - 第 1 级(增量),带有标签 level_1_tue
等等。如果数据库在星期天发生故障,在 Oracle 10g 之前的版本中,您将不得不恢复标签 level_0,然后应用所有六个增量。它将持续一段较长的时间,这是许多 DBA 不进行增量备份的另一个原因。
Oracle 数据库 10g RMAN 从根本上改变了此格局。现在,可以用如下增量备份命令:
RMAN> backup incremental level 1 for recover of copy with tag level_0 database;
然后执行:
RMAN>recover copy of database with tag level_0;
这里官方文档是这样写这个命令的,
backup incremental level_1 for recover of copy with tag level_0 database;
很明显的错误。
第一次执行这个命令rman会去寻找level 0的备份,如果没有的话,rman会自动创建level 0备份。
其实以后执行此命令只用执行backup incremental level 1即可,后面的部分其实是没用的,经过测试,即使每次都执行后面的for字句,也不会自动的合并增量到level 0的备份。最后还要执行recover copy of database with tag level_0;才能把每次的增量合并到level 0中。
其实合并增量备份的真正命令是recover copy of database with tag level_0这个子句,这个命令可以在每次执行level 1完成后执行。
由于最后执行的增量level 1都会合并以前的增量level 1数据,所以,执行增量数据合并到level 0 也可以每隔一段时间执行一次,但是不建议这样做。
具体的理解思路是这样的:
1、如果数据库在周二出故障,则恢复应为:
level_0+周二的archive log
2、如果数据库在周六出故障,则恢复应为:
level_0+周六的archive log
3、如果数据库在周日出故障,则恢复应为:
level_0+周日的archive log
这样恢复的时候,只用一个level 0备份加上当天的少量归档日志即可。