Oracle數據庫的日志文件集中存儲在**Automatic Diagnostic Repository (ADR)**目錄下,Ubuntu系統中的默認路徑為:
$ORACLE_BASE/diag/rdbms/{數據庫名}/{實例名}/trace/(單實例)或$ORACLE_BASE/diag/rdbms/{數據庫名}/{實例名}/trace/(RAC集群)。
其中關鍵日志文件包括:
alert_{實例名}.log(記錄數據庫運行中的重要事件、錯誤和警告,是日常監控的核心日志);ora_{進程ID}.trc(記錄數據庫進程的詳細跟蹤信息,用于診斷具體問題,如死鎖、性能瓶頸);archivelog/目錄下(記錄重做日志的歸檔版本,用于數據恢復,需開啟歸檔模式)。使用tail -f命令實時監控Alert日志的最新內容,快速定位當前問題:
tail -f $ORACLE_BASE/diag/rdbms/{數據庫名}/{實例名}/trace/alert_{實例名}.log
例如,查看orcl實例的Alert日志:tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log。
使用grep命令過濾日志中的錯誤代碼(以ORA-開頭),快速定位異常:
grep "ORA-" $ORACLE_BASE/diag/rdbms/{數據庫名}/{實例名}/trace/alert_{實例名}.log
例如,查找所有ORA-01555(快照過舊)錯誤:grep "ORA-01555" /path/to/alert_orcl.log。
結合awk、sort、uniq -c命令統計錯誤代碼的出現次數,識別高頻問題:
grep "ORA-" /path/to/alert_orcl.log | awk '{print $NF}' | sort | uniq -c | sort -nr
該命令會輸出每個錯誤代碼及其出現次數(按頻率降序排列),幫助優先處理高頻錯誤。
LogMiner是Oracle提供的命令行工具,用于解析重做日志(redo log)和歸檔日志(archived log),提取SQL操作、數據變更等詳細信息,適用于性能分析、數據恢復或安全審計。
使用步驟:
① 開啟數據庫的追加日志功能(若未開啟):
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
② 創建數據字典文件(用于解析日志中的對象信息):
BEGIN
DBMS_LOGMNR_D.BUILD(
OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS
);
END;
/
③ 添加要分析的日志文件:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/u01/app/oracle/archivelog/1_12345.arc', -- 替換為實際歸檔日志路徑
OPTIONS => DBMS_LOGMNR.NEW
);
④ 啟動LogMiner并指定選項(如使用數據字典文件):
EXECUTE DBMS_LOGMNR.START_LOGMNR(
DictFileName => '/u01/app/oracle/diag/rdbms/orcl/orcl/trace/dict.ora', -- 數據字典文件路徑
Options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE
);
⑤ 查詢V$LOGMNR_CONTENTS視圖獲取分析結果(如SQL語句、執行用戶、時間戳):
SELECT SQL_REDO, USERNAME, TIMESTAMP
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'SCOTT' -- 篩選特定用戶的操作
ORDER BY TIMESTAMP;
⑥ 結束LogMiner會話:
EXECUTE DBMS_LOGMNR.END_LOGMNR;
AWR(Automatic Workload Repository)是Oracle的性能分析工具,通過收集數據庫的歷史性能數據,生成詳細的報告(如SQL執行計劃、等待事件、系統負載),幫助識別性能瓶頸。
生成AWR報告步驟:
① 登錄SQL*Plus(以SYSDBA身份):
sqlplus / as sysdba
② 創建AWR快照(若未自動創建):
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
END;
/
③ 執行AWR報告腳本(位于$ORACLE_HOME/rdbms/admin/目錄下):
@?/rdbms/admin/awrrpt.sql
④ 按照提示選擇快照范圍(如最近1小時、1天),生成HTML格式的報告,通過瀏覽器打開查看。
Ubuntu自帶的logrotate工具可自動輪換、壓縮、刪除舊的Oracle日志文件,防止日志占用過多磁盤空間。
配置示例:
編輯/etc/logrotate.d/oracle文件(若不存在則創建),添加以下內容:
$ORACLE_BASE/diag/rdbms/*/trace/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
參數說明:
daily:每天輪換一次;rotate 7:保留最近7個日志文件;compress:壓縮舊日志(節省空間);copytruncate:復制日志文件后清空原文件(不影響Oracle寫入)。adrci是Oracle提供的ADR命令行接口,可用于查看、導出和管理診斷信息(包括Alert日志、Trace文件)。
常用命令:
① 查看Alert日志:
adrci show alert -tail -f(實時查看Alert日志);
② 導出特定Trace文件:
adrci set home diag/rdbms/orcl/orcl(切換到目標實例的ADR目錄);
adrci export trace /tmp/ora_1234.trc(導出ora_1234.trc文件到/tmp目錄)。
對于需要圖形化界面或高級功能的場景,可集成第三方日志分析工具(如Splunk、ELK Stack、Toad),實現日志的可視化、告警自動化和趨勢分析。這些工具支持Oracle日志的解析、過濾和自定義報表,提升分析效率。
通過以上方法,可在Ubuntu系統上高效地管理和分析Oracle數據庫日志,快速定位問題、優化性能并保障數據庫安全。