RMAN无法删除归档日志或只删除部分归档日志的问题


一位网友遇到一个问题,他在生产系统执行RMAN命令删除归档日志时发现归档日志并未被删除。但在测试环境中这个命令却没有问题。

删除的命令是:delete archivelog all completed before 'xxxxx';

执行后检查ASM发现有很多归档日志并未被删除。

实际上并不是RMAN命令本身有问题。RMAN删除归档日志的依据是controlfile中记录的归档日志,而不是ASM中实际存在的归档日志。controlfile中有一部分内容是可以循环使用的,其中归档日志信息和备份信息就使用的是这部分空间。Oracle用参数control_file_record_keep_time来设置控制文件中可重用的记录在多久以后可以被重用。通常这个参数的缺省值是7。这就意味着7天前的归档日志和备份信息可能在控制文件中已经不存在了。而RMAN命令只能删除控制文件中记录的归档日志,对于那些很早以前的归档日志,它们在控制文件中的信息已经不存在了,RMAN就无法删除了。对于这部分归档日志,只能其它命令从ASM或文件系统上删除。

另外需要说明的是,用RMAN删除归档日志时,并不会删除控制文件中对应的归档日志信息,而只是在控制文件中设置delete状态,即v$archived_log的deleted列。

删除归档日志时,建议使用RMAN命令来删除。如果不使用RMAN命令而用操作系统命令或ASM命令删除日志后,最好更新一下控制文件信息,方法是:

RMAN> crosscheck archivelog all;
RMAN> delete expried archivelog all;

如果是RAC环境且archivelog存储在各节点的本地盘而未使用NFS,直接执行以上命令会导致其它节点上的所有archivelog都被标识为无效而被删除。这是因为归档日志不是共享的,执行命令的节点无法访问到其它节点上的归档日志。对于这种情况需要为每个节点分配一个metainance channel来解决。

RMAN > allocate channel for maintenance device type disk connect'sys/systemaudit@ora91';
RMAN > allocate channel for maintenance device type disk connect
'sys/systemaudit@ora92';
RMAN > crosscheck archivelog all;

RMAN> delete expried archivelog all;

优质内容筛选与推荐>>
1、http权威指南读书笔记(三)——http报文
2、msp430入门学习05
3、大数据第七天
4、wFuzz使用帮助
5、设计模式之美—单例模式


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号