客户反映NBU备份任务失败,检查RMAN备份脚本的日志输出发现是由于ORA-19588导致备份任务终止,具体报错如下:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ch00 channel at 07/15/2015 11:51:47
ORA-19588: archived log recid 125609 stamp 884484359 is no longer valid
错误的是由于备份期间某一个归档文件在控制文件中没有找到导致备份失败,可能导致这个错误的原因主要有3个:
1、控制文件信息与归档文件信息不一致,可以使用如下命令更新控制文件信息;
2、RMAN备份任务被启动了两次;
3、错误的备份脚本语法。
对于第1种错误,可以使用下面的命令对控制文件进行更新:
RMAN> crosscheck archivelog all;
对于第二种错误,需要检查备份任务的启动情况,不要让RMAN备份任务重复启动,对于第三种错误,通常是在备份脚本中出现了如下的写法:
backup archivelog all archivelog until time 'sysdate -7' delete input ;
上面的脚本在RMAN中的执行过程是先备份所有的归档,然后删除归档,接着再执行备份直到sysdate-7的归档,所以执行第二步备份时会发现归档已经被删除了,就会出现ORA-19588错误。
检查备份脚本发现,crosscheck archivelog all已经写入到备份脚本中,所以排除第一种错误,在备份脚本中也没有发现第三种情况中的错误写法。所以怀疑NBU启动了两次备份任务,但是检查NBU日志发现,备份任务只启动了一次,但是有个奇怪的现象是针对这个系统有两个不同的备份任务,接下来检查两个备份任务的脚本,其中一个是对数据库进行全备,同时备份所有的归档文件和控制文件,另外一个备份脚本是备份所有的归档,并删除3天前的归档。两个备份脚本都涉及到对归档的操作,接下来检查两个任务的执行时间:
SQL> select START_TIME,END_TIME,STATUS,ELAPSED_SECONDS from V$RMAN_BACKUP_JOB_DETAILS order by START_TIME;
START_TIME END_TIME STATUS ELAPSED_SECONDS
------------------- ------------------- ----------------------- ---------------
2015-07-14 05:00:04 2015-07-14 07:20:31 COMPLETED 8427
2015-07-14 11:23:57 2015-07-14 11:25:27 FAILED 90
2015-07-14 11:33:34 2015-07-15 00:28:41 COMPLETED 46507
2015-07-14 16:59:36 2015-07-15 10:22:13 FAILED 62557
2015-07-15 00:31:01 2015-07-15 11:51:47 FAILED 40846
从上面的备份任务的起止时间分析,两个备份任务出现交叉,而且都涉及到对归档的操作,因此导致了ORA-19588。需要将两个备份任务的时间窗口进行重新分布,避免同一时间有两个备份任务执行。
--------------------------------------推荐阅读 --------------------------------------
RMAN备份时遭遇ORA-19571
RMAN 配置归档日志删除策略
Oracle基础教程之通过RMAN复制数据库
RMAN备份策略制定参考内容
RMAN备份学习笔记
Oracle数据库备份加密 RMAN加密
--------------------------------------分割线 --------------------------------------
: