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

Oracle 追蹤事件完整指南:三類追蹤文件與 EVENT 參數配置語法詳解

     編輯:Oracle 資料庫基礎

一、三類追蹤文件

類型生成主體觸發條件存放目錄參數文件命名
後台報警日志後台進程啟動/關閉/結構變更/錯誤/日志切換BACKGROUND_DUMP_DESTSIDALRT.LOG
後台追蹤文件DBWR/LGWR/SMON 等進程異常/內部錯誤/特定事件BACKGROUND_DUMP_DESTsid_dbwr.trc, sid_smon.trc
用戶追蹤文件服務器進程 (專用/共享)會話報錯 / 手動設置 EVENTUSER_DUMP_DESTora_.trc

故障排查首選:Alert Log(報警日志),但信息與具體錯誤無必然對應,需結合追蹤文件分析。

二、設置追蹤事件兩種方式

1. 參數文件靜態設置(影響所有會話,需重啟)

# init.ora / spfile
EVENT = "10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 : 10235 TRACE NAME CONTEXT FOREVER, LEVEL 1"
-- 多事件用冒號分隔,或寫多行 EVENT = "..."

2. 會話級動態設置(即時生效,僅當前會話)

ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 或立即轉儲
ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME ERRORSTACK LEVEL 3';

三、語法要素詳細解析

[event_number | IMMEDIATE] TRACE NAME event_name [FOREVER] [, LEVEL level_number] : ...
元素說明
event_number觸發轉儲的事件號:Oracle 錯誤號(如 10046、10235)或內部事件號(10000~10999)。不可與 IMMEDIATE 同用。
IMMEDIATE立即轉儲關鍵字,僅用於 ALTER SESSION,不可與 event_number、FOREVER 同用。
TRACE NAME固定關鍵字。
event_name要轉儲的結構名:CONTEXT(按內部事件號)、ERRORSTACK(錯誤堆疊)、SYSTEMSTATE(系統狀態)、CALLSTACK(調用棧)、FILE_HDRS(文件頭) 等。
FOREVER持久化標記:實例/會話生命週期內持續有效。不可與 IMMEDIATE 同用。
LEVEL level_number轉儲詳細度:1~10(1=僅頭部,10=全量)。ERRORSTACK 無 LEVEL。

四、常用事件速查

事件號用途典型 LEVEL
10046SQL 追蹤 (等同 SQL_TRACE=TRUE)1=基本, 4=綁定變量, 8=等待事件, 12=4+8
10053CBO 優化器決策追蹤1~2
10235內存管理器追蹤1
10210/10211/10212Heap/Process/Call 堆疊轉儲1
IMMEDIATE立即轉儲 ERRORSTACK/SYSTEMSTATELEVEL 1~3 (ERRORSTACK)

五、實戰案例

  1. 會話級 10046 追蹤:
    ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
    -- 執行目標 SQL
    ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
    用 tkprof 格式化輸出分析。
  2. 捕獲間歇性 ORA-04031:
    -- spfile
    EVENT = "4031 TRACE NAME ERRORSTACK FOREVER, LEVEL 3"
    -- 重啟後,每次 ORA-4031 自動在 USER_DUMP_DEST 生成錯誤堆疊
  3. 立即獲取系統狀態(掛起分析):
    ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';

六、注意事項

  • 追蹤文件佔用磁盤空間大,開啟後必須設置提醒關閉或限制大小(MAX_DUMP_FILE_SIZE)。
  • 11g+ 推薦使用 DBMS_MONITOR.SESSION_TRACE_ENABLE 替代 EVENT 10046。
  • 生產環境慎用 LEVEL 10 或 SYSTEMSTATE,可能加劇性能抖動。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved