Oracle 資料庫提供多種診斷工具,其中「診斷事件」是 DBA 常用且強大的功能,能方便地轉儲資料庫結構、追蹤特定事件發生。本文將系統介紹事件的分類、語法格式與設定方法。
EVENT="<事件名稱> <動作> <追蹤項目> <範圍限定>"
immediate 置於首位表示無條件立即轉儲至追蹤檔。trace name 位於第二或第三位,其餘限定詞多供 Oracle 內部開發使用。level 通常 1-10(10046 可用 12),Level 10 代表完整資訊。例如轉儲控制檔時,Level 1 僅轉儲檔頭,Level 10 則為全內容。user_dump_dest 參數指定目錄。| 類別 | 事件名稱 | 動作 | Name | 追蹤項目 | 範圍限定 |
|---|---|---|---|---|---|
| 轉儲類 | immediate | Trace | "name" | blockdump redohdr file_hdrs controlf systemstate | Level block# Level 10 Level 10 Level 10 Level 10 |
| 捕捉類 | Error number | Trace | "name" | Error stack processstate Heapdump Foreve Off | Level nr |
| 改變路徑類 | Event code | Trace | "name" | Context | Forever or Level 10 |
| 追蹤類 | 10046 | Trace | "name" | Context Forever off | Level n |
語法: EVENT="event 語法,level n:event 語法,level n..."
範例:
event="10231 trace name context forever,level 10" # 多事件 EVENT=" 10231 trace name context forever, level 10: 10232 trace name context forever, level 10"
ALTER SESSION SET EVENTS 'immediate trace name controlf level 10'; ALTER SESSION SET EVENTS 'immediate trace name blockdump level 112511416'; -- Oracle 8i+ 亦可用 ALTER SYSTEM DUMP DATAFILE 13 BLOCK 15;
DBMS_SYSTEM.SET_EV( SI BINARY_INTEGER, -- v$session.sid SE BINARY_INTEGER, -- serial# EV BINARY_INTEGER, -- 事件號 LE BINARY_INTEGER, -- level NM BINARY_INTEGER); -- name 參數
善用診斷事件能大幅提升問題排查效率,建議 DBA 熟記常用事件編號與語法,並在測試環境驗證後再套用至生產系統。