DBA必备工具之Oracle环境中自动删除归档日志

 更新时间:2025年09月18日 09:23:24   作者:认真就输DBA  
在Oracle数据库中删除归档日志是一个重要的维护任务,以确保数据库的性能和存储空间的有效利用,这篇文章主要介绍了DBA必备工具之Oracle环境中自动删除归档日志的相关资料,需要的朋友可以参考下

简介

delete_archive 是一个用于自动化管理 Oracle 数据库归档日志的 Go 语言脚本。

此脚本来源于之前有2个客户的需求:

  • 一是一次迁移几百套数据库,其中要用ADG来迁移,即不能影响到客户当前归档删除策略或者是原来非归档数据库中转为归档模式后磁盘空间的容量,又不能因为过度删除归档日志影响到我们迁移的同步,所以当时就写了shell版本的一键自动删除归档的脚本。
  • 而是一个客户归档日志采用了自动删除策略,但是在还原过程中发现归档日志缺失,最后分析原因是自动删除策略将未备份的归档日志删除了。

脚本的初衷就是尽可能保留旧的归档日志,同时也考虑到空间自定义规则。

获取脚本

公众号回复delete_archive即可获得下载链接

使用方法

语法

Usage: ./delete_archive [options]

参数说明

  • -s <instance> 指定要处理的 Oracle 实例名,0 表示所有实例(默认:htz)
  • -n <num> 归档日志删除的磁盘使用率阈值,达到该百分比时触发删除(默认:90),删除时,自动删除最旧的2个已经成功备份的归档日志。
  • -f <num2> 强制删除的磁盘使用率阈值,达到该百分比时强制删除(默认:98),不会进行是否进行备份的判断。
  • -d 启用脚本调试模式,输出详细调试日志(默认false)
  • -v 显示脚本版本号和联系方式
  • -h, --help 显示帮助信息
[oracle@oracleadg tmp]$ ./deletearchive -help
Usage: ./deletearchive [options]
Options:
  -s <instance>   instance name you will delete archivelog, 0 means all instances (default: htz)
  -n <num>        Threshold (percent) to trigger log deletion (default: 90)
  -f <num2>       Threshold (percent) to trigger forced log deletion (default: 98)
  -d              Enable script debugging
  -v              display script version and contact info
  -h, --help      display this help information

Version: 0.1
Contact: For the latest version, contact phone/WeChat: 18081072613

示例

  • 删除所有实例归档日志,使用默认阈值:
  ./delete_archive -s 0
  [oracle@oracleadg tmp]$ ./deletearchive -s 0
2025-07-02 00:48:03.184868 main.main                : Script started at: 2025-07-02T00:48:03+08:00
2025-07-02 00:48:03.212655 main.getRunningInstances : Running instances: htz191, htz192
2025-07-02 00:48:03.212726 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:03.212754 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:03.238535 main.setOracleSID        : Set ORACLE_SID to: htz191
2025-07-02 00:48:03.314795 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:03.314854 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:03.337470 main.setOracleSID        : Set ORACLE_SID to: htz191
2025-07-02 00:48:03.511368 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:48:03.581760 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:48:03.644475 main.deleteMain          : Current archive used PCT :76
2025-07-02 00:48:03.644534 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:03.644555 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:03.666678 main.setOracleSID        : Set ORACLE_SID to: htz192
2025-07-02 00:48:03.749803 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:03.749859 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:03.772382 main.setOracleSID        : Set ORACLE_SID to: htz192
2025-07-02 00:48:03.923390 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:48:03.998782 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:48:04.078302 main.deleteMain          : Current archive used PCT :76
2025-07-02 00:48:04.078363 main.main                : Script ended at: 2025-07-02T00:48:04+08:00
  • 删除指定实例(如 htz1)归档日志,删除阈值 85%,强制阈值 95%:
  ./delete_archive -s htz1 -n 85 -f 95
  部分日志:
  [oracle@oracleadg tmp]$ ./deletearchive -s $ORACLE_SID -f 75
2025-07-02 00:48:42.010254 main.main                : Script started at: 2025-07-02T00:48:42+08:00
2025-07-02 00:48:42.010318 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:42.010336 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:42.041291 main.setOracleSID        : Set ORACLE_SID to: htz191
2025-07-02 00:48:42.107775 main.setOracleSID        : beging executing modify Oracle sid
2025-07-02 00:48:42.107832 main.checkCkptProcess    : beging executing check ckpt process
2025-07-02 00:48:42.131013 main.setOracleSID        : Set ORACLE_SID to: htz191
2025-07-02 00:48:42.267686 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:48:42.340124 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:48:42.415996 main.deleteMain          : Current archive used PCT :76 and Force delete archive log
2025-07-02 00:48:42.416059 main.deleteArchLog       : Begin delete archive log 
2025-07-02 00:48:50.260200 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:48:50.337404 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:48:50.404294 main.deleteMain          : Current archive used PCT :76 and Force delete archive log
2025-07-02 00:48:50.404363 main.deleteArchLog       : Begin delete archive log 
2025-07-02 00:48:57.816066 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:48:57.895482 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:48:57.975555 main.deleteMain          : Current archive used PCT :76 and Force delete archive log
2025-07-02 00:48:57.975615 main.deleteArchLog       : Begin delete archive log 
2025-07-02 00:49:04.846875 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:49:04.919516 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:49:04.996407 main.deleteMain          : Current archive used PCT :76 and Force delete archive log
2025-07-02 00:49:04.996468 main.deleteArchLog       : Begin delete archive log 
2025-07-02 00:49:12.081336 main.getDiskUsage        : The archive path is configured as a file system
2025-07-02 00:49:12.160922 main.getDiskUsage        : Using FRA to manage archive logs
2025-07-02 00:49:12.245844 main.deleteMain          : Current archive used PCT :76 and Force delete archive log
2025-07-02 00:49:12.245906 main.deleteArchLog       : Begin delete archive log 
2025-07-02 00:49:12.322223 main.deleteArchLog       : Get error archive log info :no rows selected
  • 启用调试模式:
    ./delete_archive -d
    
  • 查看帮助信息:
    ./delete_archive -h
    ./delete_archive --help
    ./delete_archive -help
    
  • 查看版本信息:
    ./delete_archive -v
    

日志说明

  • 日志文件默认保存在脚本同级目录下的 log/ 目录中。
  • 主要日志文件:
    • delete_archiveerrors.txt 错误日志
    • delete_archivedebug.txt 调试日志
  • 日志内容包括操作时间、函数名、日志级别和详细信息。

版本信息

  • 当前版本:0.1
  • 联系方式:如有问题或建议,请联系 18081072613(电话/微信同号)

获取脚本

公众号回复delete_archive即可,目前脚本只编译了Linux版本。

注意事项

  • 需以有权限的 Oracle 用户运行,确保能访问数据库和相关归档目录。
  • 需在 Oracle 数据库服务器上运行,且环境变量 ORACLE_SID 可被正确设置。
  • 脚本会自动检测并切换 ORACLE_SID,无需手动干预。
  • 强制删除模式下,归档日志即使未备份也会被删除,请谨慎设置阈值。
  • 如遇脚本报错或异常退出,请检查日志文件获取详细信息。

功能说明

  • 自动检测 Oracle 实例归档日志的存储使用率。
  • 支持文件系统和 ASM 磁盘组归档路径的检测与处理。
  • 支持 FRA(闪回恢复区)和手动归档管理模式。
  • 根据设定的阈值自动删除最老的归档日志,优先删除已备份的归档。
  • 支持强制删除(无备份也可删除),防止磁盘空间耗尽。
  • 支持多实例批量处理。
  • 详细日志输出,便于问题追踪。

总结

到此这篇关于DBA必备工具之Oracle环境中自动删除归档日志的文章就介绍到这了,更多相关Oracle自动删除归档日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle导入导出dmp文件具体示例

    Oracle导入导出dmp文件具体示例

    这篇文章主要给大家介绍了关于Oracle导入导出dmp文件的相关资料,dmp文件为oracle数据库的数据备份文件,执行oracle数据库导出dmp文件,相当于执行数据库备份;执行导入dmp文件,相当于数据库还原,需要的朋友可以参考下
    2023-11-11
  • Oracle中rank,over partition函数的使用方法

    Oracle中rank,over partition函数的使用方法

    本文主要介绍Oracle中rank,over partition函数的用法,希望对大家有所帮助。
    2016-05-05
  • Oracle CBO几种基本的查询转换详解

    Oracle CBO几种基本的查询转换详解

    这篇文章主要介绍了Oracle CBO几种基本的查询转换详解,包含视图合并、子查询解嵌套、谓语前推、物化视图查询重写等内容,需要的朋友可以参考下
    2014-07-07
  • oracle丢失temp表空间的处理方法

    oracle丢失temp表空间的处理方法

    之前有做临时表空间的切换,切换后没drop tablespace就删除了temp01.dbf结果排序跟查dba_temp_files报错
    2023-05-05
  • Oracle数据库ORA 54013错误的解决办法

    Oracle数据库ORA 54013错误的解决办法

    ORA 54013 不允许对虚拟列执行INSERT 操作,这是Oracle 11 的新特性。接下来通过本文给大家介绍oracle数据库ORA 54013错误的解决办法,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • Oracle 的入门心得 强烈推荐

    Oracle 的入门心得 强烈推荐

    oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。
    2009-05-05
  • oracle复习笔记之PL/SQL程序所要了解的知识点

    oracle复习笔记之PL/SQL程序所要了解的知识点

    本文主要是前篇文章的续篇,主要来复习PL/SQL的基本语法、记录类型、流程控制、游标的使用、异常处理机制、存储函数/存储过程、触发器。好记性不如烂笔头,古人诚不欺我~
    2014-08-08
  • Oracle RAC环境下的阻塞(blocking blocked)介绍和实例演示

    Oracle RAC环境下的阻塞(blocking blocked)介绍和实例演示

    这篇文章主要介绍了Oracle RAC环境下的阻塞(blocking blocked)介绍和实例演示本文提供了2个查询脚本,并给出实例演示那些session为阻塞者,哪些为被阻塞者,需要的朋友可以参考下
    2014-09-09
  • Oracle索引(B*tree与Bitmap)的学习总结

    Oracle索引(B*tree与Bitmap)的学习总结

    本篇文章是对Oracle索引(B*tree与Bitmap)进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • oracle关联查询报invalid number错误的解决方法

    oracle关联查询报invalid number错误的解决方法

    这篇文章主要介绍了oracle关联查询报invalid number错误的解决方法,文中通过代码示例和图文结合的方式讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-09-09

最新评论