当前位置: 首页 > 工具 > 正文

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

简介

delete_archive.go 是一个用于自动化管理 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(闪回恢复区)和手动归档管理模式。
  • 根据设定的阈值自动删除最老的归档日志,优先删除已备份的归档。
  • 支持强制删除(无备份也可删除),防止磁盘空间耗尽。
  • 支持多实例批量处理。
  • 详细日志输出,便于问题追踪。

联系方式

如有问题或建议,请联系:18081072613(电话/微信同号)

——————作者介绍———————–
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)


DBA必备工具:Oracle环境中自动删除归档日志:等您坐沙发呢!

发表评论

gravatar

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen

快捷键:Ctrl+Enter