Oracle 診斷事件 (Diagnostic Events) 可透過 ALTER SESSION/SYSTEM SET EVENTS 觸發各類記憶體、檔案、系統狀態的 Trace Dump,是效能調校、死鎖分析、損壞修復的核心工具。本文整理常用事件分類、層級參數與實戰指令。
ALTER SESSION SET EVENTS 'immediate trace name global_area level n';
-- Level: 1=PGA, 2=SGA, 4=UGA, 8=Indirect Memory (可組合加總)
ALTER SESSION SET EVENTS 'immediate trace name library_cache level n';
-- 1=統計, 2=Hash Histogram, 3=Object Handle, 4=Heap 0 結構
ALTER SESSION SET EVENTS 'immediate trace name row_cache level n';
-- 1=統計, 2=Hash Histogram, 8=Object 結構
ALTER SESSION SET EVENTS 'immediate trace name buffers level n';
-- 1=Buffer Header, 2=+Block Header, 3=+Block Contents,
-- 4=+Hash Chain, 8=+Users/Waiters (累加)
ALTER SESSION SET EVENTS 'immediate trace name buffer level ';
-- RDBA: 該 Block 的 Relative DBA
ALTER SESSION SET EVENTS 'immediate trace name heapdump level ';
-- 摘要: 1=PGA, 2=SGA, 4=UGA, 8=Call (CGA), 16=User Call, 32=Large Call
-- 內容: 摘要值 + 1024 (如 1025=PGA 內容, 2050=SGA 內容...)
-- 9.0.1 前
ALTER SESSION SET EVENTS 'immediate trace name heapdump_addr level ';
-- addr+1 輸出內容
-- 9.2.0 後
ALTER SESSION SET EVENTS 'immediate trace name heapdump_addr level , addr ';
-- level: 1=摘要, 2=內容
ALTER SESSION SET EVENTS 'immediate trace name processstate level n';
ALTER SESSION SET EVENTS 'immediate trace name systemstate level n';
-- Level: 10=完整系統狀態 (含所有 Process、Enqueue、Latch、Buffer 等)
ALTER SESSION SET EVENTS 'immediate trace name errorstack level n';
-- 0=Error Stack, 1=+Call Stack, 2=+Process State, 3=+Context Area
ALTER SESSION SET EVENTS 'immediate trace name hanganalyze level n';
-- Level 3/4 可輸出等待鏈圖,分析 Hang 根因
ALTER SESSION SET EVENTS 'immediate trace name workareatab_dump level n'; -- 1=SGA, 2=摘要, 3=詳細
ALTER SESSION SET EVENTS 'immediate trace name latches level n'; -- 1=Latch 資訊, 2=統計
ALTER SESSION SET EVENTS 'immediate trace name events level n'; -- 1=Session, 2=Process, 3=System
ALTER SESSION SET EVENTS 'immediate trace name locks level n';
ALTER SESSION SET EVENTS 'immediate trace name shared_server_state level n'; -- n=1~14
ALTER SESSION SET EVENTS 'immediate trace name bg_messages level ';
-- 8i 以前
ALTER SESSION SET EVENTS 'immediate trace name blockdump level ';
-- 8i 後 (需 SYSDBA)
ALTER SYSTEM DUMP DATAFILE BLOCK ;
ALTER SYSTEM DUMP DATAFILE BLOCK MIN BLOCK MAX ;
ALTER SESSION SET EVENTS 'immediate trace name treedump level ';
-- 分析 B-tree 結構、葉塊分佈
ALTER SYSTEM DUMP UNDO HEADER '';
ALTER SYSTEM DUMP UNDO BLOCK '' XID ;
ALTER SESSION SET EVENTS 'immediate trace name file_hdrs level n';
-- 1=Controlfile 中檔頭, 2=+檔頭, 3=+Datafile 檔頭, 10=Level 3
ALTER SESSION SET EVENTS 'immediate trace name controlf level n';
-- 1=檔頭, 2=+DB/Checkpoint, 3=+Reuse Section, 10=Level 3
ALTER SESSION SET EVENTS 'immediate trace name redohdr level n';
-- 1=Controlfile 中 Redo 資訊, 2=+檔頭, 3=+Logfile 檔頭, 10=Level 3
ALTER SYSTEM DUMP LOGFILE '';
-- 可加過濾條件:
SCN MIN SCN MAX
TIME MIN
ALTER SESSION SET EVENTS 'immediate trace name loghist level n';
-- 1=最早/最晚項目, 2^n=倒數 2^n 個項目
USER_DUMP_DEST (預設 $ORACLE_BASE/diag/rdbms///trace ),檔名 _ora_.trc BACKGROUND_DUMP_DEST,檔名 __.trc ulimit -c unlimited)ALTER SESSION SET EVENTS '... off';)熟練掌握診斷事件指令,能在關鍵時刻快速取得 Oracle 內部狀態證據,將疑難雜症排查時間從小時縮短至分鐘。