事件語法標準格式
EVENT = "<事件名稱> <動作> <跟蹤項目> <範圍限定>"
IMMEDIATE 置首 = 無條件立即轉儲。
TRACE NAME "name" 固定第二/三位,其餘限定詞供內部開發用。
LEVEL 1-10 (10046 可用 12),10 代表全量資訊。
- 輸出 Trace 檔位置:
USER_DUMP_DEST 參數目錄。
四大事件分類
| 分類 | 用途 | 典型事件 |
| 轉儲類 | 輸出記憶體/磁碟結構快照 | Control File, Datafile Header, System State |
| 捕捉類 | 攔截特定錯誤發生時的上下文 | ORA-04031, ORA-00600 |
| 改變執行路徑 | 修改內核邏輯行為 (通常用於 Rule-based 修正) | 10269 (停用 SMON 空間合併) |
| 跟蹤類 | SQL 執行詳細跟蹤 (效能調優核心) | 10046 (SQL Trace) |
常用事件代碼速查表
| 分類 | 事件名稱/代碼 | 動作 | 跟蹤項目 | 範圍/Level |
| 轉儲類 | IMMEDIATE | TRACE | BLOCKDUMP | LEVEL 區塊號 |
| IMMEDIATE | TRACE | REDOHDR | LEVEL 10 |
| IMMEDIATE | TRACE | FILE_HDRS | LEVEL 10 |
| IMMEDIATE | TRACE | CONTROLF | LEVEL 10 (全量) / 1 (僅頭部) |
| IMMEDIATE | TRACE | SYSTEMSTATE | LEVEL 10 |
| 捕捉類 | 錯誤號 (如 4031) | TRACE | ERRORSTACK | LEVEL nr / FOREVER / OFF |
| 錯誤號 | TRACE | PROCESSSTATE | LEVEL nr |
| 錯誤號 | TRACE | HEAPDUMP | LEVEL nr |
| 改變路徑 | 事件代碼 (如 10269) | TRACE | CONTEXT | FOREVER / LEVEL 10 |
| 跟蹤類 | 10046 | TRACE | CONTEXT | FOREVER / LEVEL n / OFF |
實戰場景範例
1. 即時轉儲控制檔完整內容
ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 10';
2. 捕捉 ORA-04031 發生時的錯誤堆疊與進程狀態
ALTER SYSTEM SET EVENTS '4031 TRACE NAME ERRORSTACK LEVEL 3, FOREVER';
ALTER SYSTEM SET EVENTS '4031 TRACE NAME PROCESSSTATE LEVEL 10, FOREVER';
3. 10046 SQL Trace 等級說明
- Level 1:標準 SQL Trace (含等待事件)。
- Level 4:+ Bind 變數值。
- Level 8:+ Wait 事件詳細參數。
- Level 12:Level 4 + 8 (最全)。
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
4. 關閉事件
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
ALTER SYSTEM SET EVENTS '4031 TRACE NAME ERRORSTACK OFF';
設定層級與持久化
- Session 級:
ALTER SESSION SET EVENTS ... (斷線失效)。
- Instance 級:
ALTER SYSTEM SET EVENTS ... (立即生效,重啟失效)。
- 永久生效:在
init.ora / spfile 加入 EVENT = "...",重啟生效。
注意事項
- 事件機制屬內部診斷介面,**非文檔化功能**,生產環境謹慎使用,建議 SR 確認後再開啟。
- 大量 Trace 會消耗 I/O 與磁碟空間,設定
MAX_DUMP_FILE_SIZE 限制單檔大小。
- 11g+ 建議改用
DBMS_MONITOR / DBMS_SQLDIAG 等官方 API 替代手工事件。