日期:2014-05-16  浏览次数:20729 次

归档不能删除报RMAN-8137错解决过程

在使用RMAN备份数据库归档日志时,出现这样的错误,"RMAN-8137: WARNING: archived log not deleted as it is still needed"。
这是备份归档日志后跟着删除已备份的归档文件操作时失败的提示。

RMAN备份删除归档日志文件的脚本如下所示:
backup archivelog all format '/rman_bak/archivelog_%U.%T'? delete all input;

?

这里数据库系统为oracle 10.2.0.3,配置了两个standby库,组成一对二的data guard环境。

?

(miki西游 @mikixiyou 文档,原文链接: http://mikixiyou.iteye.com/blog/1553055 )

分析问题

这种RMAN-8137错误是指归档日志在RMAN试图删除它们时,提示该归档日志文件在standby库还没有应用,所以不能删除。这是保护data guard的机制。

使用下列SQL检查归档日志文件是否应用。

select thread#, sequence#, completion_time,APPLIED
? from v$archived_log
?where dest_id = 2
?? and applied = 'NO'
?? and completion_time>sysdate-2??
?ORDER BY THREAD#,SEQUENCE#, COMPLETION_TIME;

结果显示,最近两天确实有很多归档日志没有应用。

在检查v$archive_gap时,没有发现任何记录。

检查data guard的配置环境时,没有发现什么错误。在该环境最初运行时,也出现过该错误,那是由于standby的初始化参数配置不正确导致。
在 Oracle Data Guard 10g 简要配置? http://mikixiyou.iteye.com/blog/1489087 一文中,我描述了该错误信息。




Oracle的metalink提示,这可能是一种bug,参见文档Archive Log not Getting Deleted Using Rman With Rman-08137 [ID 964522.1]???
给出了解决方法,强制删除已经备份过的归档日志文件。

delete force archivelog until time 'trunc(sysdate-4)' backed up 1 times to device type disk;

但我又发现一个现象,使用这个SQL查询归档日志的应用情况时,
select thread#, sequence#, completion_time,APPLIED
? from v$archived_log
?where dest_id = 2
?--? and applied = 'NO'
?? and completion_time>sysdate-2??
?ORDER BY THREAD#,SEQUENCE#, COMPLETION_TIME;


?? ??? THREAD#??? SEQUENCE#??? COMPLETION_TIME??? APPLIED
1??? 1??? 81516??? 2012-6-4 11:17:11??? NO
2??? 1??? 81517??? 2012-6-4 11:18:12??? YES
3??? 1??? 81518??? 2012-6-4 11:19:15??? YES

4??? 1??? 81519??? 2012-6-4 11:20:15??? NO

--------------------
6??? 1??? 81521??? 2012-6-4 11:22:21??? YES

--------------------
8??? 1??? 81523??? 2012-6-4 11:24:25??? YES
9??? 1??? 81524??? 2012-6-4 11:25:25??? NO
--------------------
19??? 1??? 81534??? 2012-6-4 11:35:44??? YES


结果显示,有的日志文件的applied是YES,有的是NO。
这下无解了。有成功也有失败的apply。