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

本文讨论了在Oracle数据库使用RMAN进行归档日志备份时遇到的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。

Oracle数据库中使用RMAN(Recovery Manager)进行备份时,如果出现误 `RMAN-03002`、`RMAN-06059` 和 `ORA-19625`,这些误通常与归档日志文件丢失或路径不一致有关。以下是针对这些问题的解决方案: ### 误分析与解决方法 1. **RMAN-03002: failure of backup command** -误表示RMAN的备份命令执行失败。它通常作为其他误(如`RMAN-06059`)的包装误,指示具体的失败原因。 - 这个误本身不会提供详细的失败原因,因此需要查看堆栈中的其他误信息以确定根本原因。 2. **RMAN-06059: expected archived log not found, loss of archived log compromises recoverability** -误表明RMAN期望找到某个归档日志文件,但未找到。这通常是因为归档日志文件已被手动删除或路径不一致导致的。 - 这会直接影响数据库的可恢复性,因为RMAN无法找到必要的归档日志文件来完成备份或恢复操作。 3. **ORA-19625: error identifying file** -误进一步说明了文件路径问题,例如归档日志文件不存在或路径误。 - 在Linux系统上,误 `ORA-27037: unable to obtain file status` 和 `Linux-x86_64 Error: 2: No such file or directory` 表明RMAN无法访问指定的归档日志文件路径。 ### 解决方案 1. **验证归档日志文件路径** - 检查归档日志文件的实际存储路径是否与RMAN目录中记录的路径一致。 - 如果归档日志文件已被手动删除,可以使用以下命令从RMAN目录中清除无效的归档日志信息: ```sql RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; ``` 这些命令会标记无效的归档日志条目,并从RMAN目录中删除它们[^2]。 2. **更新归档日志路径** - 如果归档日志文件被移动到新的路径,需要更新RMAN目录中的路径信息。可以使用以下命令注册新的归档日志文件: ```sql RMAN> catalog start with '/new/archivelog/path/'; ``` 这将重新注册指定路径下的所有归档日志文件。 3. **避免手动删除归档日志文件** - 手动删除归档日志文件可能导致RMAN目录与实际文件状态不一致。建议通过RMAN命令删除归档日志文件,以确保目录信息同步: ```sql RMAN> delete archivelog until time 'sysdate-7'; ``` 这将删除7天前的归档日志文件,并更新RMAN目录。 4. **检查归档日志路径权限** - 确保Oracle数据库实例具有对归档日志文件路径的读写权限。权限不足可能导致RMAN无法访问或写入归档日志文件。 5. **配置归档日志删除策略** - 为了避免归档日志文件占用过多磁盘空间,可以配置RMAN归档日志删除策略: ```sql RMAN> configure archivelog deletion policy to applied on standby; ``` 这将确保归档日志文件在备用数据库上应用后自动删除。 ### 示例:清理无效归档日志条目 ```sql RMAN> run { crosscheck archivelog all; delete expired archivelog all; } ``` 此脚本会检查所有归档日志文件的状态,并删除RMAN目录中无效的条目。 ### 示例:重新注册归档日志文件 ```sql RMAN> catalog start with '/new/archivelog/path/'; ``` 此命令会重新注册指定路径下的所有归档日志文件。 ### 示例:配置归档日志删除策略 ```sql RMAN> configure archivelog deletion policy to applied on standby; ``` 此命令配置归档日志删除策略,确保归档日志文件在备用数据库上应用后自动删除
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值