Oracle alert与trace日志清理全攻略(附实操命令)

张开发
2026/5/22 4:37:43 15 分钟阅读
Oracle alert与trace日志清理全攻略(附实操命令)
在Oracle数据库运维过程中相信很多DBA和运维同学都会遇到一个共性问题Oracle的诊断日志目录占用大量磁盘空间轻则导致磁盘告警重则影响数据库正常运行。本文针对实际运维中最常出现的4个高占用日志目录详细讲解alert告警日志和trace跟踪日志的清理方法包含ADRCI工具实操、手动清理、自动清理配置以及常见问题排查全程贴合实操场景新手也能快速上手。一、问题定位4个高占用日志目录解析在Oracle 11g及以上版本中诊断日志默认存储在ADR自动诊断信息库中ADR Base默认路径由Oracle环境变量指定本文实操环境的ADR Base为/data/oracle其中以下4个目录是磁盘占用的“重灾区”也是本文重点清理对象/data/oracle/diag/rdbms/orcl/orcl/trace数据库实例orcl的跟踪日志目录存储数据库后台进程、用户会话、SQL执行等产生的trace文件以.trc为后缀当数据库出现异常、开启SQL跟踪时该目录文件会快速激增。/data/oracle/diag/tnslsnr/x3dbyw/listener/trace监听程序listener的跟踪日志目录存储监听连接、会话建立与断开等相关的跟踪信息高并发连接场景下会快速占用空间。/data/oracle/diag/rdbms/orcl/orcl/alert数据库实例的告警日志目录以XML和文本格式存储数据库的关键事件包括实例启动/关闭、参数修改、错误信息如ORA-XXX、死锁等是排查数据库故障的核心日志来源会持续累积且无法自动清理。/data/oracle/diag/tnslsnr/x3dbyw/listener/alert监听程序的告警日志目录存储监听的启动/停止、连接异常等告警信息虽体积增长速度慢于trace目录但长期不清理也会占用大量空间。提示可通过du -sh 目录路径命令快速查看每个目录的实际占用空间例如du -sh /data/oracle/diag/rdbms/orcl/orcl/trace定位空间占用元凶。二、核心清理工具ADRCI工具详解Oracle 11g及以上版本提供了专门的ADRCIAutomatic Diagnostic Repository Command Interpreter工具用于管理ADR中的诊断数据包括日志查看、清理、打包等操作相比手动删除更安全、高效可避免误删正在使用的日志文件是日志清理的首选方式。2.1 ADRCI工具前置准备1. 切换至oracle用户必须使用oracle用户操作否则会提示权限不足[rootx3dbyw ~]# su - oracle2. 启动ADRCI工具无需额外配置确保ORACLE_HOME和PATH环境变量正常即可[oraclex3dbyw ~]$ adrci启动成功后会显示如下信息版本可能因Oracle版本不同略有差异2.2 常见ADRCI核心命令必记show homes查看当前ADR中的所有ADR Home每个ADR Home对应一个数据库实例或监听程序清理日志前必须指定具体的ADR Home这是避免报错的关键。set homepath 路径指定要操作的ADR Home路径路径可通过show homes命令获取例如set homepath diag/rdbms/orcl/orcl指定数据库实例的ADR Home。purge -age 时间清理指定时间之前的所有诊断文件包括alert和trace文件时间单位默认是小时若需指定分钟需结合-type参数下文会讲例如purge -age 720表示清理30天720小时前的日志。purge -age 时间 -type 日志类型针对性清理某类日志日志类型支持ALERT告警日志、TRACE跟踪日志、INCIDENT事件日志等例如purge -age 1440 -type ALERT表示清理24小时1440分钟前的告警日志仅ALERT类型。purge -size 大小按文件大小清理清理后该ADR Home下的诊断文件总大小不超过指定值单位字节例如purge -size 104857600表示清理至总大小不超过100MB适合空间紧张场景。show alert查看告警日志可结合参数过滤例如show alert -tail -f实时跟踪告警日志show alert -p message_text like %ora-600%过滤特定错误日志。quit退出ADRCI工具。三、实操4个目录日志清理步骤全程无坑核心原则先指定ADR Home再执行清理命令避免因未指定ADR Home导致报错如DIA-48448: This command does not support multiple ADR homes以下步骤按目录逐一操作可直接复制命令执行。3.1 清理数据库实例相关日志orcl实例对应目录/data/oracle/diag/rdbms/orcl/orcl/trace和/data/oracle/diag/rdbms/orcl/orcl/alert这两个目录属于同一个ADR Homediag/rdbms/orcl/orcl可统一指定Home后清理。启动ADRCI工具[oraclex3dbyw ~]$ adrci查看ADR Home确认目标Home存在adrci show homes输出结果需包含diag/rdbms/orcl/orcl ADR Homes: diag/rdbms/orcl/orcl diag/clients/user_oracle/host_2242828283_80 diag/clients/user_root/host_2242828283_80 diag/tnslsnr/x3dbyw/listener指定ADR Home为数据库实例的Homeadrci set homepath diag/rdbms/orcl/orcl清理30天前的所有诊断文件含trace和alert推荐日常维护adrci purge -age 720提示720小时30天可根据业务需求调整例如168小时7天、24小时1天。针对性清理alert日志仅保留24小时适合告警日志需频繁排查的场景adrci purge -age 1440 -type ALERT说明此处1440的单位是分钟仅当指定-type ALERT时age可支持分钟单位表示保留最近24小时的告警日志删除更早的日志。清理完成后退出ADRCIadrci quit3.2 清理监听相关日志listener对应目录/data/oracle/diag/tnslsnr/x3dbyw/listener/trace和/data/oracle/diag/tnslsnr/x3dbyw/listener/alert这两个目录属于监听的ADR Homediag/tnslsnr/x3dbyw/listener单独指定Home清理。启动ADRCI工具[oraclex3dbyw ~]$ adrci查看ADR Home确认监听的Home存在adrci show homes输出结果需包含diag/tnslsnr/x3dbyw/listener指定ADR Home为监听的Homeadrci set homepath diag/tnslsnr/x3dbyw/listener清理30天前的监听相关日志含trace和alertadrci purge -age 720若需保留更短时间如7天可调整age值adrci purge -age 168168小时7天清理完成后退出ADRCIadrci quit3.3 验证清理效果清理完成后可通过以下命令查看目录占用空间确认清理生效[oraclex3dbyw ~]$ du -sh /data/oracle/diag/rdbms/orcl/orcl/trace[oraclex3dbyw ~]$ du -sh /data/oracle/diag/tnslsnr/x3dbyw/listener/alert若空间仍占用较大可检查是否有近期生成的大量日志如数据库异常导致的trace文件可适当缩短age值重新清理。四、补充手动清理应急场景当ADRCI工具无法正常使用如工具异常、Oracle版本兼容问题可采用手动清理方式但需谨慎操作避免删除正在使用的日志文件步骤如下4.1 手动清理trace文件推荐按时间过滤删除删除30天前的.trc和.trmtrace文件的元数据文件文件仅保留近期文件[oraclex3dbyw ~]$ find /data/oracle/diag/rdbms/orcl/orcl/trace -name *.trc -mtime 30 -delete[oraclex3dbyw ~]$ find /data/oracle/diag/rdbms/orcl/orcl/trace -name *.trm -mtime 30 -delete[oraclex3dbyw ~]$ find /data/oracle/diag/tnslsnr/x3dbyw/listener/trace -name *.trc -mtime 30 -delete4.2 手动清理alert日志避免直接删除建议清空alert日志是故障排查的重要依据不建议直接删除可清空内容保留文件本身避免Oracle报错[oraclex3dbyw ~]$ /data/oracle/diag/rdbms/orcl/orcl/alert/alert_orcl.log[oraclex3dbyw ~]$ /data/oracle/diag/tnslsnr/x3dbyw/listener/alert/log.xml提示监听日志手动清理前建议先停止监听服务清理完成后重启避免日志文件被占用无法清空[oraclex3dbyw ~]$ lsnrctl stop停止监听[oraclex3dbyw ~]$ /data/oracle/diag/tnslsnr/x3dbyw/listener/trace/listener.log清空监听trace日志[oraclex3dbyw ~]$ lsnrctl start重启监听。五、进阶自动清理解放双手推荐运维配置日常运维中手动清理日志繁琐且易遗漏可通过Linux的crontab定时任务结合ADRCI命令实现自动清理无需人工干预步骤如下5.1 创建自动清理脚本1. 创建脚本文件路径可自定义例如/home/oracle/scripts/clean_oracle_log.sh[oraclex3dbyw ~]$ vi /home/oracle/scripts/clean_oracle_log.sh2. 写入以下内容脚本功能每天凌晨3点清理30天前的所有日志包含数据库和监听#!/bin/bash# 清理数据库实例orcl的日志adrci execset homepath diag/rdbms/orcl/orcl; purge -age 720; quit# 清理监听listener的日志adrci execset homepath diag/tnslsnr/x3dbyw/listener; purge -age 720; quitecho Oracle日志清理完成时间$(date) /home/oracle/scripts/clean_log.log3. 给脚本添加执行权限[oraclex3dbyw ~]$ chmod x /home/oracle/scripts/clean_oracle_log.sh5.2 配置crontab定时任务1. 编辑crontab任务使用oracle用户编辑避免权限问题[oraclex3dbyw ~]$ crontab -e2. 加入以下内容每天凌晨3点执行清理脚本0 3 * * * /home/oracle/scripts/clean_oracle_log.sh3. 查看crontab任务是否生效[oraclex3dbyw ~]$ crontab -l提示脚本中的日志清理时间720小时可根据业务需求调整同时可通过查看/home/oracle/scripts/clean_log.log文件确认定时任务是否正常执行。六、常见问题排查避坑指南6.1 报错DIA-48448: This command does not support multiple ADR homes原因未指定ADR HomeADRCI工具无法确定要操作的日志目录存在多个ADR Home时。 解决方案执行show homes查看所有ADR Home再用set homepath 路径指定具体的Home再执行purge命令。6.2 清理后日志仍快速增长原因数据库存在异常如频繁报错、死锁、开启了SQL跟踪、后台任务频繁执行如统计信息收集或Flink CDC同步等场景导致日志激增。 解决方案 1. 查看alert日志排查数据库异常adrci show alert -p message_text like %ORA-% 2. 检查是否开启了不必要的SQL跟踪关闭无用跟踪 3. 调整Oracle参数max_dump_file_size限制单个trace文件大小默认unlimited可设置为具体值如100M 4. 优化Flink CDC配置若使用过滤无关表或缩短Checkpoint间隔减少日志生成量。6.3 手动删除日志后Oracle报错原因删除了正在被Oracle进程使用的日志文件或误删了Oracle必需的日志文件。 解决方案 1. 避免直接删除日志文件优先使用ADRCI工具清理 2. 手动清理时先通过lsof 日志文件路径查看文件是否被占用若被占用先停止对应进程如监听再清理 3. 若已报错重启Oracle实例或监听服务恢复日志文件生成。七、总结Oracle的alert和trace日志是故障排查的核心依据但长期不清理会导致磁盘空间紧张影响数据库稳定性。本文围绕4个高占用日志目录提供了“ADRCI工具清理首选 手动清理应急 自动清理运维推荐”的全场景方案实操命令可直接复制使用同时补充了常见问题排查适合各类Oracle运维场景。建议日常运维中优先配置自动清理脚本定期检查日志增长情况结合业务需求调整日志保留时间清理前建议备份重要日志尤其是alert日志避免误删导致故障排查无据可依。如果觉得本文对你有帮助欢迎点赞、收藏关注我后续分享更多Oracle运维实操技巧

更多文章