listener.log 持續增長,超大檔案導致開啟/檢索緩慢。傳統做法停止 Listener → 重命名 → 啟動,會中斷所有新連線。
lsnrctl set log_status off/on動態暫停/恢復 Listener 寫入,檔案句柄釋放,可安全重命名/清空,不影響現有連線,新連線短暫不記錄。
cd %ORACLE_HOME%\network\log
lsnrctl set log_status off
rename listener.log listener_20240115.log
lsnrctl set log_status on
REM 自動建立新 listener.log
cd $ORACLE_HOME/network/log
lsnrctl set log_status off
mv listener.log listener_$(date +%Y%m%d).log
lsnrctl set log_status on
#!/bin/bash
# /home/oracle/scripts/rotate_listener_log.sh
# crontab: 5 0 * * * /home/oracle/scripts/rotate_listener_log.sh >> /home/oracle/logs/rotate_listener.log 2>&1
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=$ORACLE_HOME/network/log
BACKUP_DIR=$ORACLE_BASE/admin/listener_log_backup
mkdir -p $BACKUP_DIR
DATE_TAG=$(date +%Y%m%d)
$ORACLE_HOME/bin/lsnrctl set log_status off
mv $LOG_DIR/listener.log $BACKUP_DIR/listener_$DATE_TAG.log
$ORACLE_HOME/bin/lsnrctl set log_status on
# 可選:壓縮 7 天前備份
find $BACKUP_DIR -name "listener_*.log" -mtime +7 -exec gzip {} \;
lsnrctl status 確認 Logging: ON。$ORACLE_BASE/diag/tnslsnr//listener/trace/ ,操作邏輯相同。log_status off 期間有連線嘗試,不會記錄,但連線本身不受影響。lsnrctl set log_status off/on 是 DBA 必備技能,實現 Listener Log「零停機輪轉」。配合 crontab 自動化,並將舊檔納入安全審計與效能分析流程,最大化日誌價值。