• 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;

  • 相关阅读:
    【Objective-C 篇】 ☞ 9. 协议
    【Objective-C 篇】 ☞ 8. block
    【Objective-C 篇】 ☞ 7. Category、Extension
    【Objective-C 篇】 ☞ 6. 封装、继承、组合与聚合、多态
    【Objective-C 篇】 ☞ 5. MRC、ARC
    【Objective-C 篇】 ☞ 4. 内存管理
    【Objective-C 篇】 ☞ 3. self、数据类型、编码规范
    【Objective-C 篇】 ☞ 2. 属性、方法
    【Objective-C 篇】 ☞ 1. 基础、语法
    【Objective-C 篇】 ☞ 学前准备
  • 原文地址:https://www.cnblogs.com/cqubityj/p/2263634.html
Copyright © 2020-2023  润新知