Oracle/ODA RAC /u01 空间告警处理指南:grid 用户监听日志清理_2026-06-15

一、适用场景

本操作手册适用于 Oracle ODA RAC 环境中,发现 /u01 文件系统使用率偏高,需要排查是否由 Grid Infrastructure 监听日志长期累积导致的场景。

本 SOP 主要处理以下类型日志:

复制代码
/u01/app/grid/diag/tnslsnr/<hostname>/listener
/u01/app/grid/diag/tnslsnr/<hostname>/listener_scan1
/u01/app/grid/diag/tnslsnr/<hostname>/asmnet1lsnr_asm

其中重点关注:

复制代码
alert/log_数字.xml
trace/listener_数字.log
trace/listener_scan1_数字.log

二、用户和日志归属说明

在 Oracle RAC / ODA 环境中,oracle 用户和 grid 用户管理的日志不同。

oracle 用户主要管理数据库实例相关日志,例如数据库 alert 日志、trace 文件、CDB/PDB 诊断日志等,常见路径为:

复制代码
/u01/app/oracle/diag/rdbms/...

grid 用户主要管理 Grid Infrastructure 相关组件,包括 ASM、Clusterware、LISTENER、SCAN Listener 等。监听日志通常位于:

复制代码
/u01/app/grid/diag/tnslsnr/<hostname>/

因此,如果排查的是 RAC / ODA 监听日志,应在 grid 用户下执行清理操作。


三、处理流程总览

遇到 /u01 使用率高时,按以下顺序处理:

复制代码
1. root 用户查看 /u01 使用率
2. 判断 /u01 空间主要占用来源
3. 确认是否为 grid 用户监听日志占用
4. 切换 grid 用户
5. 清理 listener / listener_scan1 的历史 alert 日志
6. 清理 listener / listener_scan1 的历史 trace 分段日志
7. 验证 /u01 空间、监听状态、集群资源状态

四、第一步:查看 /u01 空间

使用 root 用户执行:

复制代码
df -h /u01

如果 /u01 使用率偏高,继续查看一级目录占用:

复制代码
du -sh /u01/*
du -sh /u01/app/*

如果发现 /u01/app/grid/u01/app/grid/diag 占用较大,继续按本 SOP 排查监听日志。

如果空间主要来自其他目录,例如 odaorahomeodaorabase、备份目录或其他业务目录,则需要按对应专项处理,不应直接套用本 SOP 清理。


五、第二步:确认监听进程归属

查看监听进程:

复制代码
ps -ef | grep tnslsnr | grep -v grep

如果看到类似以下进程,并且属主为 grid

复制代码
tnslsnr LISTENER
tnslsnr LISTENER_SCAN1
tnslsnr ASMNET1LSNR_ASM

说明监听由 grid 用户管理,后续清理应切换到 grid 用户执行。

切换用户:

复制代码
su - grid

确认当前环境:

复制代码
hostname -s
echo $ORACLE_BASE

正常情况下:

复制代码
ORACLE_BASE=/u01/app/grid

监听日志路径规则为:

复制代码
$ORACLE_BASE/diag/tnslsnr/<hostname>/

例如节点 teimes1

复制代码
/u01/app/grid/diag/tnslsnr/teimes1

节点 teimes2

复制代码
/u01/app/grid/diag/tnslsnr/teimes2

六、第三步:定位监听日志占用

grid 用户下执行:

复制代码
HOST=$(hostname -s)

du -sh $ORACLE_BASE/diag/tnslsnr/$HOST 2>/dev/null
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/* 2>/dev/null

重点查看:

复制代码
listener
listener_scan1
asmnet1lsnr_asm

继续查看明细:

复制代码
for d in listener listener_scan1 asmnet1lsnr_asm
do
  echo "===== $d ====="
  du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/$d 2>/dev/null
  du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/$d/alert 2>/dev/null
  du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/$d/trace 2>/dev/null
done

一般重点清理:

复制代码
listener/alert
listener/trace
listener_scan1/alert
listener_scan1/trace

asmnet1lsnr_asm 如果占用较小,可以暂不处理。


七、第四步:清理 alert 历史日志

alert 目录主要是 ADR XML 日志,例如:

复制代码
log.xml
log_数字.xml

其中:

复制代码
log.xml 是当前日志
log_数字.xml 是历史分段日志

alert 日志优先使用 ADRCI 清理。

进入 ADRCI:

复制代码
adrci

查看 ADR home:

复制代码
show homes

清理当前节点 listener 的 7 天前 alert 日志:

复制代码
set homepath diag/tnslsnr/<hostname>/listener
purge -age 10080 -type ALERT

清理当前节点 listener_scan1 的 7 天前 alert 日志:

复制代码
set homepath diag/tnslsnr/<hostname>/listener_scan1
purge -age 10080 -type ALERT

退出:

复制代码
exit

说明:

复制代码
purge -age 的单位是分钟
10080 = 7 天 × 24 小时 × 60 分钟

验证 alert 清理结果:

复制代码
find $ORACLE_BASE/diag/tnslsnr/$HOST/listener/alert -maxdepth 1 -type f -name "log_[0-9]*.xml" -mtime +7 -exec ls -lh {} \;

find $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1/alert -maxdepth 1 -type f -name "log_[0-9]*.xml" -mtime +7 -exec ls -lh {} \;

如果没有输出,说明 7 天前 alert 历史分段已清理完成。


八、第五步:清理 trace 历史分段日志

trace 目录主要是监听访问日志,例如:

复制代码
listener.log
listener_数字.log
listener_scan1.log
listener_scan1_数字.log

其中:

复制代码
listener.log、listener_scan1.log 是当前日志
listener_数字.log、listener_scan1_数字.log 是历史分段日志

本环境中,ADRCI 对 alert 日志清理有效,但对 trace 下的监听历史分段日志未完全清理,因此 trace 历史分段采用受控 find 清理。

1. 清理 listener trace

进入 listener 目录:

复制代码
cd $ORACLE_BASE/diag/tnslsnr/$HOST/listener

统计 7 天前历史分段数量:

复制代码
find trace -maxdepth 1 -type f -name "listener_[0-9]*.log" -mtime +7 | wc -l

查看可释放空间:

复制代码
find trace -maxdepth 1 -type f -name "listener_[0-9]*.log" -mtime +7 -exec du -ch {} + | tail -1

保存清理前清单:

复制代码
find trace -maxdepth 1 -type f -name "listener_[0-9]*.log" -mtime +7 -exec ls -lh {} \; > /tmp/${HOST}_listener_trace_before7_$(date +%Y%m%d_%H%M%S).list

执行清理:

复制代码
find trace -maxdepth 1 -type f -name "listener_[0-9]*.log" -mtime +7 -exec rm -f {} \;

验证:

复制代码
du -sh trace
find trace -maxdepth 1 -type f -name "listener_[0-9]*.log" -mtime +7 -exec ls -lh {} \;
ls -lh trace/listener.log

如果 find 无输出,且 listener.log 仍存在,说明清理正常。

2. 清理 listener_scan1 trace

进入 listener_scan1 目录:

复制代码
cd $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1

统计 7 天前历史分段数量:

复制代码
find trace -maxdepth 1 -type f -name "listener_scan1_[0-9]*.log" -mtime +7 | wc -l

查看可释放空间:

复制代码
find trace -maxdepth 1 -type f -name "listener_scan1_[0-9]*.log" -mtime +7 -exec du -ch {} + | tail -1

保存清理前清单:

复制代码
find trace -maxdepth 1 -type f -name "listener_scan1_[0-9]*.log" -mtime +7 -exec ls -lh {} \; > /tmp/${HOST}_listener_scan1_trace_before7_$(date +%Y%m%d_%H%M%S).list

执行清理:

复制代码
find trace -maxdepth 1 -type f -name "listener_scan1_[0-9]*.log" -mtime +7 -exec rm -f {} \;

验证:

复制代码
du -sh trace
find trace -maxdepth 1 -type f -name "listener_scan1_[0-9]*.log" -mtime +7 -exec ls -lh {} \;
ls -lh trace/listener_scan1.log 2>/dev/null

该命令只匹配 listener_scan1_数字.log,不会匹配当前日志 listener_scan1.log


九、第六步:清理后空间验证

清理完成后执行:

复制代码
df -h /u01

查看监听日志目录大小:

复制代码
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener/alert
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener/trace
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1/alert
du -sh $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1/trace

确认当前日志存在:

复制代码
ls -lh $ORACLE_BASE/diag/tnslsnr/$HOST/listener/trace/listener.log
ls -lh $ORACLE_BASE/diag/tnslsnr/$HOST/listener_scan1/trace/listener_scan1.log 2>/dev/null

十、第七步:监听和集群状态验证

检查监听状态:

复制代码
srvctl status listener
srvctl status scan_listener

检查监听进程:

复制代码
ps -ef | grep tnslsnr | grep -v grep

检查 RAC 节点状态:

复制代码
olsnodes -n -s

检查集群资源:

复制代码
crsctl status res -t

重点确认:

复制代码
两节点为 Active
LISTENER 为 ONLINE
SCAN Listener 为 ONLINE
ASM Listener 为 ONLINE
ASM、磁盘组、ACFS、VIP、SCAN VIP 为 ONLINE/STABLE
数据库资源为 ONLINE/STABLE

十一、是否影响数据库和后续切换

本 SOP 只清理历史日志分段,不修改数据库和集群配置。

清理对象是:

复制代码
log_数字.xml
listener_数字.log
listener_scan1_数字.log

保留对象是:

复制代码
log.xml
listener.log
listener_scan1.log

历史日志编号不连续不会影响后续日志分段。监听后续会继续写当前日志,达到分段条件后继续生成新的分段文件。

本操作不涉及:

复制代码
listener.ora
CRS/GI 配置
VIP / SCAN VIP 配置
ASM 磁盘组
OCR / Voting Disk
数据库数据文件
控制文件
redo 日志
数据库参数

因此不会影响数据库稳定运行,也不会影响 RAC 节点切换、SCAN Listener 漂移或数据库资源切换。


十二、关于 ADRCI show control

在部分 listener ADR home 中执行:

复制代码
show control

可能返回:

复制代码
0 rows fetched

这表示当前 listener ADR home 没有可显示的 ADR control 策略记录。它不代表路径错误,也不代表没有日志。

本环境实际验证:

复制代码
purge -age 10080 -type ALERT 可以清理 alert/log_数字.xml
但 trace/listener_数字.log 未完全依赖 ADRCI 清理

因此建议:

复制代码
alert/log_数字.xml:使用 ADRCI purge 定期清理
trace/listener_数字.log:使用受控 find 定期清理
trace/listener_scan1_数字.log:使用受控 find 定期清理

十三、本次实际处理结果参考

teimes2 节点

复制代码
/u01 使用率:68% → 25%
主要清理对象:listener、listener_scan1 历史 alert/trace 日志
清理后 LISTENER、SCAN Listener 状态正常

teimes1 节点

复制代码
/u01 使用率:42% → 27%
tnslsnr 目录:18G → 2.7G
listener:3.0G → 745M
listener_scan1:14G → 1.6G
清理后 LISTENER、SCAN Listener、ASM Listener 状态正常

集群验证结果:

复制代码
teimes1 Active
teimes2 Active
LISTENER ONLINE
SCAN Listener ONLINE
ASM、数据库、ACFS、VIP、SCAN VIP 均为 ONLINE/STABLE

十四、日常巡检建议

建议日常巡检关注:

复制代码
df -h /u01
du -sh /u01/app/grid/diag/tnslsnr/$(hostname -s) 2>/dev/null

如果监听日志目录持续增长,可按本 SOP 清理 7 天前历史日志。

后续如需从源头控制 trace 日志增长,可单独评估 listener 日志滚动参数,例如:

复制代码
LOG_FILE_SIZE_LISTENER
LOG_FILE_NUM_LISTENER
LOG_FILE_SIZE_LISTENER_SCAN1
LOG_FILE_NUM_LISTENER_SCAN1

该类参数属于监听配置调整,应单独评估,不建议在空间应急清理过程中同步修改。


十五、总结

当 Oracle ODA RAC 节点 /u01 使用率升高时,应先定位空间来源。如果确认是 grid 用户下监听 ADR 日志长期累积导致,可按照本 SOP 进行在线清理。

处理原则:

复制代码
root 用户查看空间
grid 用户执行监听日志清理
alert 历史日志使用 ADRCI purge
trace 历史分段使用受控 find
当前日志不删除
清理后验证监听和集群资源状态

本次两节点实践验证,在线清理历史监听日志可以有效释放 /u01 空间,且不影响数据库运行、监听服务和 RAC 集群稳定性。

相关推荐
零陵上将军_xdr1 小时前
为什么DCL单例要加volatile?——CPU乱序执行与内存屏障
java·linux
IT新视界1 小时前
从多平台割裂到湖仓集一体,星环科技ArgoDB助力金融机构迈向实时智能
数据库·科技
master3361 小时前
达梦数据库常用语句示例
数据库·达梦
Elastic 中国社区官方博客1 小时前
Elasticsearch:使用向量搜索构建现代应用的最佳实践
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Volunteer Technology1 小时前
Flink状态管理与容错(一)
大数据·数据库·flink
CIO_Alliance2 小时前
(企业AI化转型)选对iPaaS系统集成厂家是制造业数字化转型的生死线
大数据·数据库·人工智能·企业数字化转型·ipaas·系统集成
赋缘汇(fableshare)-黄从庆2 小时前
Ubuntu重启后进入initramfs导致无法开机
linux·运维·ubuntu
南部余额2 小时前
Canal解决MySQL与Redis数据一致性问题
数据库·redis·mysql·canal·数据·数据同步
1024+2 小时前
在 ‌Ubuntu 24.04‌ 上安装 ‌Python 3.8‌
linux·python·ubuntu