前言
Oracle 通過跟蹤文件記錄運行狀態、錯誤、內部結構轉儲。理解三大類型文件分工、位置、命名規則,並掌握跟蹤事件語法,是故障診斷、性能分析的核心技能。本文系統梳理文件體系與事件設置方法。
三大跟蹤文件類型
| 類型 | 生成來源 | 目錄參數 | 命名格式 | 典型內容 |
| Alert Log (報警日志) | 後台進程 (PMON/SMON/DBWn/LGWR...) | BACKGROUND_DUMP_DEST | alert_.log (10g+), ALRT.LOG (9i-) | 啟動/關閉、表空間/回滾段創建、ALTER 命令、日志切換、ORA- 錯誤、死鎖、ORA-600/7445 |
| Background Trace (後台跟蹤) | 後台進程異常/主動轉儲 | BACKGROUND_DUMP_DEST | _<進程名>_.trc (如 orcl_dbw0_1234.trc) | 進程啟動參數、內存結構轉儲、錯誤堆棧、死鎖跟蹤 |
| User Trace (用戶跟蹤) | 用戶會話 (Server Process) 錯誤/事件觸發 | USER_DUMP_DEST | ora_.trc (專用服務器), ora__.trc (共享服務器) | 會話級錯誤 (ORA-01000 等)、SQL 跟蹤 (10046)、轉儲調用堆棧、優化器跟蹤 |
跟蹤事件設置語法
1. 實例級 (init.ora / SPFILE) — 影響所有會話,需重啟
EVENT = "event_number TRACE NAME event_name [FOREVER] [, LEVEL level_number] : ..."
# 多事件用冒號分隔
EVENT = "10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 : 10210 TRACE NAME CONTEXT FOREVER, LEVEL 10"
2. 會話級 (ALTER SESSION) — 僅影響當前會話,即時生效
ALTER SESSION SET EVENTS '[event_number | IMMEDIATE] TRACE NAME event_name [FOREVER] [, LEVEL level_number] : ...';
# 示例:立即轉儲系統狀態
ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';
# 示例:SQL 追蹤 (10046)
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
# 示例:調整 SCN (10015)
ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
關鍵字詳解
| 關鍵字 | 含義 | 限制 |
event_number | 觸發事件號:Oracle 錯誤號 (如 600、1000) 或內部事件號 (10000-10999) | 不可與 IMMEDIATE 同用 |
IMMEDIATE | 立即執行轉儲,不等待觸發條件 | 僅會話級,不可與 event_number/FOREVER 同用 |
TRACE NAME | 固定關鍵字 | - |
event_name | 要轉儲的結構名:ERRORSTACK、SYSTEMSTATE、CALLSTACK、FILE_HDRS、CONTEXT (配合內部事件號) 等 | - |
FOREVER | 事件持續有效直到實例/會話結束 | 不可與 IMMEDIATE 同用 |
LEVEL level_number | 事件級別 1-10+,控制轉儲詳盡度 (1=頭部, 10=全量) | ERRORSTACK 無級別 |
常用診斷事件速查
| 事件號/名 | 用途 | 典型 LEVEL |
| 10046 / SQL_TRACE | SQL 執行跟蹤 (綁定變量、等待、統計) | 1/4/8/12 (12=綁定+等待+統計) |
| 10053 | 優化器決策跟蹤 (CBO 選擇計劃過程) | 1/2/4/8 |
| 10210 / 10211 | 直方圖/統計信息轉儲 | 10 |
| 10015 | 調整 SCN (極慎用) | 1 |
| IMMEDIATE TRACE NAME SYSTEMSTATE | 全實例狀態轉儲 (死鎖、掛起分析) | 10/256 |
| IMMEDIATE TRACE NAME ERRORSTACK | 當前會話錯誤堆棧 | 1/2/3 |
| IMMEDIATE TRACE NAME FILE_HDRS LEVEL 3 | 所有數據文件頭轉儲 (驗證 DBID/SCN) | 3 |
| ORA-600/7445 參數解讀 | 參考 MOS Note 153788.1 / 工具 oradebug | - |
oradebug 實用命令
SQL> ORADEBUG SETMYPID -- 綁定當前會話
SQL> ORADEBUG SETOSPID -- 綁定指定 OS 進程
SQL> ORADEBUG TRACEFILE_NAME -- 顯示跟蹤文件路徑
SQL> ORADEBUG DUMP SYSTEMSTATE 10 -- 觸發系統狀態轉儲
SQL> ORADEBUG DUMP ERRORSTACK 3 -- 觸發錯誤堆棧
SQL> ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12 -- 設置事件
SQL> ORADEBUG CLOSE_TRACE -- 關閉跟蹤
總結
「Alert Log 看大事、Background Trace 看後台、User Trace 看會話」。掌握 ALTER SESSION SET EVENTS 會話級即時診斷、oradebug 精準定位進程、常用事件號/名/級別組合,能將故障排查時間從小時級壓縮到分鐘級。生產環境嚴禁長期開啟高級別跟蹤 (如 10046 level 12),用畢即關。