跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何配置Oracle的监听日志自动清理_ADRCI命令行工具使用

adrci不清理监听日志是因为监听器默认未启用ADR;需在listener.ora中配置ADR_BASE并重启监听器,使日志迁入ADR路径后,adrci才能通过purge -age n -type TRACE/ALERT清理。 监听日志不自动清理,
adrci
为什么没反应? 因为
adrci
默认不管理监听器(
lsnrctl
)的日志归档路径——它只管 oracle 数据库实例的 adr(automatic diagnostic repository),而监听器日志默认不在 adr 下,除非你手动把监听器注册进 adr。 常见错误现象:
adrci
执行
show homes
列不出
diag/tnslsnr
路径;用
purge
命令清不到监听日志;
lsnrctl status
显示日志路径是
$ORACLE_HOME/network/log/listener.log
,但这个位置根本不受
adrci
控制。 确认监听器是否启用 ADR:检查
$ORACLE_HOME/network/admin/listener.ora
,必须有
ADR_BASE = /path/to/your/adr/base
配置项 监听器需重启才生效:改完
listener.ora
后,执行
lsnrctl reload
或
lsnrctl stop && lsnrctl start
ADR 启用后,监听日志会迁移到
$ADR_BASE/diag/tnslsnr///trace/
,原
listener.log
不再写入
adrci
清理监听日志的正确流程 只有监听器进了 ADR,
adrci
才能操作它的 trace 和 alert 日志。关键不是“怎么清”,而是“清谁”和“按什么条件清”。 使用场景:磁盘告警、日志占满
/u01
、巡检发现
trace
目录下几百 MB 的
listener.log
文件。 先定位监听器 ADR home:
adrci
→
show homes
→ 找到类似
diag/tnslsnr/myhost/listener
的路径 进入该 home:
set homepath diag/tnslsnr/myhost/listener
查日志大小和时间:
show alert -tail 10
或
show tracefile
确认文件生成时间 按天数清理(推荐):
purge -age 7 -type ALERT
(清 7 天前的 alert 日志)或
purge -age 7 -type TRACE
(清 trace 文件)
-type
只支持
ALERT
、
TRACE
、
INCIDENT
,不支持
listener.log
这种旧式命名
adrci purge
常见失效原因 命令返回成功,但磁盘空间没释放?大概率是没清对目标,或者日志还在被进程占用。 性能与兼容性影响:Oracle 11gR2+ 支持
adrci purge
,但 11gR1 不支持
-type
参数;RAC 环境中每个节点要单独执行。 误清了数据库 home:
show homes
输出多行时,
set homepath
忘了切换,结果清的是
diag/rdbms/...
未指定
-type
:
purge -age 7
默认只清
INCIDENT
,监听日志属于
TRACE
或
ALERT
,必须显式声明 日志文件被
lsnrctl
持有句柄:即使清了,空间也不会立刻释放,需
lsnrctl reload
或重启监听器 权限问题:
adrci
必须由运行监听器的操作系统用户执行(通常是
oracle
),否则看不到文件或无权删除 比
adrci
更直接的监听日志控制方式 如果只是想防止日志爆炸,
adrci
是事后补救;更稳的做法是在监听器层面限流 + 轮转。 使用场景:无法停监听、不允许 ADR 改动、或环境是老版本 Oracle(如 10g)。 在
listener.ora
中加:
LOG_DIRECTORY_LISTENER = /u01/app/oracle/product/12.1.0/dbhome_1/network/log
(确保路径可写) 启用日志轮转:
LOG_FILE_LISTENER = listener.log
+
LOGGING_LISTENER = ON
配合 OS 级 logrotate:写一个配置,按大小(如 10M)或天数切割,保留最多 5 个归档,比
adrci
更可控 注意:
logrotate
不能直接
rm
正在写的
listener.log
,要用
copytruncate
或发
SIGUSR1
(部分监听器版本支持) 真正容易被忽略的是:监听器日志路径有两个源头——
listener.ora
配置的
LOG_FILE_LISTENER
和 ADR 自动接管后的
trace/
目录,两者互斥。改之前务必确认当前生效的是哪一套,否则清理动作全打在空处。

相关文章