Oracle19c磁盘告急adrci一键清理日志文件实战指南凌晨三点数据库告警短信突然响起——/oracle目录剩余空间不足10%。这种场景对DBA来说再熟悉不过。Oracle数据库运行过程中产生的诊断日志、跟踪文件、事件包等数据往往会以惊人的速度吞噬磁盘空间。本文将深入解析如何利用Oracle自带的adrci工具在不同环境下一键清理各类日志文件同时分享几个关键场景下的实战技巧。1. 认识Oracle诊断文件体系Oracle数据库生成的主要诊断文件类型包括Alert日志记录数据库运行状态和关键事件的第一手资料Trace文件SQL跟踪、错误堆栈等详细诊断信息Incident文件针对严重错误自动生成的诊断包监听日志记录客户端连接活动的关键信息这些文件默认存储在自动诊断仓库(ADR)中路径遵循$ORACLE_BASE/diag的统一结构。一个典型的Oracle19c环境可能在短短一个月内产生数十GB的诊断数据。重要提示清理前务必确认文件类型和时效性某些合规场景需要保留特定时长的日志2. adrci工具核心操作指南2.1 环境准备与基础命令adrci位于$ORACLE_HOME/bin目录无需额外安装。使用时需注意执行身份# 单机环境使用oracle用户 su - oracle adrci # RAC集群使用grid用户 su - grid adrci基础操作流程示例adrci show home # 查看可用诊断目录 ADR Homes: diag/rdbms/prod_db/prod_db diag/rdbms/test_db/test_db adrci set homepath diag/rdbms/prod_db/prod_db # 设置工作目录 adrci show alert # 查看警报日志概要2.2 按类型清理诊断数据adrci支持按时间阈值清理特定类型的诊断文件文件类型参数值典型保留策略示例命令警报日志ALERT保留30天purge -age 720 -type alert跟踪文件TRACE保留90天purge -age 2160 -type trace事件包INCIDENT保留60天purge -age 1440 -type incident监听日志ALERT保留180天purge -age 4320 -type alert时间参数单位为小时计算示例30天 30×24 720小时90天 90×24 2160小时3. 集群与单机环境差异处理3.1 执行身份差异在RAC环境中需要特别注意Grid组件日志必须使用grid用户清理su - grid adrci purge -age 720 -type alert数据库实例日志可以使用oracle用户清理su - oracle adrci purge -age 2160 -type trace3.2 多节点环境处理对于RAC集群需要在每个节点执行清理操作。可以编写统一脚本#!/bin/bash # rac_cleanup.sh for node in node1 node2 node3; do ssh $node su - grid -c adrci purge -age 720 -type alert ssh $node su - oracle -c adrci purge -age 2160 -type trace done4. 高级清理策略与技巧4.1 空间占用分析命令在决定清理策略前建议先分析空间占用情况# 查看各诊断目录大小 du -sh $ORACLE_BASE/diag/*/*/* | sort -rh # 统计trace文件数量 find $ORACLE_BASE/diag/rdbms -name *.trc | wc -l # 按时间列出大文件 find $ORACLE_BASE/diag -type f -size 100M -exec ls -lh {} | awk {print $5,$9} | sort -rh4.2 自动化清理方案对于长期运行的系统建议配置定期清理任务创建清理脚本/usr/local/bin/oracle_cleanup.sh#!/bin/bash # Cleanup alert logs older than 30 days su - oracle -c adrci purge -age 720 -type alert # Cleanup trace files older than 90 days su - oracle -c adrci purge -age 2160 -type trace # Cleanup incidents older than 60 days su - oracle -c adrci purge -age 1440 -type incident添加cron任务每月1日执行0 0 1 * * /usr/local/bin/oracle_cleanup.sh /var/log/oracle_cleanup.log 214.3 关键注意事项清理监听日志不需要停止监听服务但建议先备份cp $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener/trace/listener.log /backup/空间紧急释放当空间严重不足时可临时调整保留策略# 保留最近7天数据 adrci purge -age 168 -type all多数据库实例需要为每个实例单独设置homepathadrci set homepath diag/rdbms/db1/db1 adrci purge -age 720 -type alert adrci set homepath diag/rdbms/db2/db2 adrci purge -age 720 -type alert5. 问题排查与验证清理完成后建议进行以下验证检查剩余空间df -h /oracle确认文件确实被清理find $ORACLE_BASE/diag -type f -name *.trc -mtime 90 | wc -l检查数据库运行状态SELECT status, instance_name FROM v$instance;遇到问题时可检查adrci操作日志cat $ORACLE_BASE/diag/rdbms/*/*/metadata/purge*.log在最近一次生产环境维护中通过组合使用adrci和find命令我们成功将诊断目录从85%使用率降至32%而整个过程仅耗时7分钟。关键在于准确评估各类日志的实际价值制定差异化的保留策略。