首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Listener Log 線上切割:無需重啟監聽器的動態重命名技巧

     編輯:Oracle 資料庫基礎

痛點

listener.log 持續增長,超大檔案導致開啟/檢索緩慢。傳統做法停止 Listener → 重命名 → 啟動,會中斷所有新連線。

解決方案:lsnrctl set log_status off/on

動態暫停/恢復 Listener 寫入,檔案句柄釋放,可安全重命名/清空,不影響現有連線,新連線短暫不記錄。

Windows 操作步驟

cd %ORACLE_HOME%\network\log
lsnrctl set log_status off
rename listener.log listener_20240115.log
lsnrctl set log_status on
REM 自動建立新 listener.log

Linux/Unix 操作步驟

cd $ORACLE_HOME/network/log
lsnrctl set log_status off
mv listener.log listener_$(date +%Y%m%d).log
lsnrctl set log_status on

自動化腳本範例(Linux 每日輪轉)

#!/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。
  • 舊檔可離線分析攻擊特徵(暴力破解、掃描)、效能基線。
  • 11g+ ADR 架構下路徑為 $ORACLE_BASE/diag/tnslsnr//listener/trace/,操作邏輯相同。
  • 若 log_status off 期間有連線嘗試,不會記錄,但連線本身不受影響。

結語

lsnrctl set log_status off/on 是 DBA 必備技能,實現 Listener Log「零停機輪轉」。配合 crontab 自動化,並將舊檔納入安全審計與效能分析流程,最大化日誌價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved