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

Oracle 日誌檔案管理實務:Alert Log、Listener Log 截斷、歸檔與自動化

     編輯:Oracle 資料庫基礎

Alert Log(alert_.log)

記錄:Redo 切換、啟動/關閉、結構變更、Deadlock、ORA- 錯誤等。
位置:$ORACLE_BASE/diag/rdbms///trace/(11g+ ADR)或 $ORACLE_BASE/admin//bdump/(舊版)。

錯誤快速篩選

grep "ORA-" $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log > /tmp/errors.log

安全截斷(不刪除檔案)

直接 rm 會導致 LGWR 寫入已刪除 inode,佔用磁碟不釋放。正確做法:

# 保留最近 100 行
tail -100 $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log > /tmp/alert_trim.log
cp /tmp/alert_trim.log $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log
rm /tmp/alert_trim.log

Listener Log(listener.log)

記錄:連線請求、協定、IP、Port、Service Name 等。
位置:$ORACLE_HOME/network/log/listener.log 或 ADR $ORACLE_BASE/diag/tnslsnr//listener/trace/。

動態關閉/開啟寫入(無需重啟 Listener)

lsnrctl set log_status off
# 處理檔案:備份、清空
cp $ORACLE_HOME/network/log/listener.log $BACKUP_DIR/listener_$(date +%d).log
cp /dev/null $ORACLE_HOME/network/log/listener.log
lsnrctl set log_status on

自動化腳本:每日分割 auto_listener.sh

#!/bin/bash
# 每日 00:05 執行 (crontab: 5 0 * * * /home/oracle/scripts/auto_listener.sh)
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_BASE=/u01/app/oracle
export BACKUP_DIR=$ORACLE_BASE/backup/listener

rq=$(date +"%d")
cp $ORACLE_HOME/network/log/listener.log $BACKUP_DIR/listener_$rq.log
$ORACLE_HOME/bin/lsnrctl set log_status off
cp /dev/null $ORACLE_HOME/network/log/listener.log
$ORACLE_HOME/bin/lsnrctl set log_status on

最佳實踐總結

  • 監控:結合 Enterprise Manager / Shell 腳本定期掃描 ORA-、TNS- 錯誤並告警。
  • 保留策略:Alert Log 保留 30 天,Listener Log 保留 7 天,壓縮歸檔至備份磁區。
  • ADR 自動清理:11g+ 可設定 DIAG_RETENTION(預設 720 小時)自動清理追蹤檔。
  • 權限:腳本以 oracle 執行,備份目錄需寫入權限。

結語

日誌管理核心在於「不直接刪除、動態截斷、自動化分割、錯誤主動發現」。建立標準化腳本納入排程,可避免磁碟爆滿導致資料庫掛起。

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