首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

使用 10046 事件追蹤 Oracle 數據庫啟動全過程

     編輯:Oracle 資料庫相關知識

操作步驟

sqlplus / as sysdba
STARTUP MOUNT
ORADEBUG SETMYPID
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
ALTER DATABASE OPEN;
ORADEBUG TRACEFILE_NAME
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

Trace 關鍵片段解讀

1. Bootstrap$ 表加載

PARSING IN CURSOR #... sqlid='32r4f1brckzq1'
CREATE TABLE "SYS"."BOOTSTRAP$" ( "LINE#" NUMBER, "OBJ#" NUMBER, "SQL_TEXT" VARCHAR2(4000) )
END OF STMT

數據庫打開階段首要動作是讀取 BOOTSTRAP$ (OBJECT_ID=59),該表存儲核心元數據的 DDL 文本,供字典緩存初始化使用。

2. 等待事件分析

WAIT #...: nam='db file sequential read' ela=460 file#=1 block#=520 obj#=-1
WAIT #...: nam='db file sequential read' ela=24 file#=1 block#=520 obj#=59
  • obj#=-1:讀取文件頭/控制塊,非段對象。
  • obj#=59:確認為 BOOTSTRAP$ 表的數據塊讀取。

3. 綁定變量與執行計劃

BINDS #... Bind#0 value=59
STAT #... id=1 op='SORT AGGREGATE'
STAT #... id=2 op='INDEX FULL SCAN PK_EMP'

可見字典查詢走主鍵索引全掃描,行源統計 (STAT) 完整記錄了執行計劃樹。

驗證 Bootstrap$ 結構

SELECT dbms_metadata.get_ddl('TABLE','BOOTSTRAP$','SYS') FROM dual;
SELECT owner, object_id FROM dba_objects WHERE object_name='BOOTSTRAP$';

輸出確認:SYS.BOOTSTRAP$ 位於 SYSTEM 表空間,OBJECT_ID=59。

實戰價值

  1. 啟動緩慢診斷: 定位是否卡在特定字典表加載、磁盘 I/O 等待、鎖競爭。
  2. 升級/遷移驗證: 對比新舊版本啟動 Trace,發現字典結構變化。
  3. Core 文件分析前奏: 結合 oradebug dump systemstate 266 獲取完整系統狀態。

注意事項

  • Trace 文件可能很大 (GB 級),建議啟用前設置 max_dump_file_size 或使用 ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 8' (不含 BINDS) 減小體積。
  • 僅在維護窗口或測試環境操作,生產啟動階段追蹤會增加開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved