Oracle 資料字典是資料庫元資料的核心儲存體,理解其內部架構對於效能調校、問題診斷與深度開發至關重要。字典物件主要分為三大層次:X$ 固定表、GV$/V$ 動態效能視圖、以及 GV_$/V_$ 視圖與公用同義詞。本文將層層剖析其建立關係與查詢入口。
X$ 表在資料庫啟動時由 Oracle 程式動態於記憶體中建立,是資料庫運行的基石。僅限 SYSDBA 存取,任何顯式授權均會報錯 ORA-02030。這些表不佔用實體儲存,直接映射 SGA 共享記憶體結構。
Oracle 8 引入 GV$(Global V$)滿足 OPS/RAC 環境需求:
INST_ID 欄位WHERE INST_ID = USERENV('Instance') 過濾,僅顯示當前連線實例資訊以 V$FIXED_TABLE 為例追蹤建立鏈結:
-- V$FIXED_TABLE 定義
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='V$FIXED_TABLE';
-- 結果:SELECT NAME, OBJECT_ID, TYPE, TABLE_NUM FROM GV$FIXED_TABLE WHERE INST_ID = USERENV('Instance')
-- GV$FIXED_TABLE 定義
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='GV$FIXED_TABLE';
-- 結果:SELECT INST_ID, KQFTANAM, KQFTAOBJ, 'TABLE', INDX FROM X$KQFTA
-- UNION ALL SELECT INST_ID, KQFVINAM, KQFVIOBJ, 'VIEW', 65537 FROM X$KQFVI
-- UNION ALL SELECT INST_ID, KQFDTNAM, KQFDTOBJ, 'TABLE', 65537 FROM X$KQFDT
清晰可見:GV$ 視圖直接建立在 X$ 表之上,V$ 再由 GV$ 衍生。
統計數字(9i 典型值):
由 catalog.sql 執行建立:
CREATE OR REPLACE VIEW V_$FIXED_TABLE AS SELECT * FROM V$FIXED_TABLE;
CREATE OR REPLACE PUBLIC SYNONYM V$FIXED_TABLE FOR V_$FIXED_TABLE;
CREATE OR REPLACE VIEW GV_$FIXED_TABLE AS SELECT * FROM GV$FIXED_TABLE;
CREATE OR REPLACE PUBLIC SYNONYM GV$FIXED_TABLE FOR GV_$FIXED_TABLE;
實際存取路徑:V$ 公用同義詞 → V_$ 視圖 → V$ 視圖 → GV$ 視圖 → X$ 表。
V$FIXED_VIEW_DEFINITION 是研究字典物件關係的關鍵入口,記錄所有固定視圖的定義 SQL。
-- V$PARAMETER 來源
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='V$PARAMETER';
-- 來源:GV$PARAMETER WHERE INST_ID = USERENV('Instance')
-- GV$PARAMETER 來源
SELECT view_definition FROM v$fixed_view_definition WHERE view_name='GV$PARAMETER';
-- 來源:X$KSIPPI x, X$KSPPCV y WHERE x.INDX = y.INDX ...
X$KSIPPI、X$KSPPCV 儲存所有可調參數(含隱含參數)。V$PARAMETER 透過 TRANSLATE(KSPPINM,'_','#') NOT LIKE '#%' 過濾掉底線開頭的隱含參數。
資料庫啟動首個動作即建立 BOOTSTRAP$ 表(儲存在 File 1 Block 377),記錄核心物件建立 DDL。此表由 Oracle 二進位程式碼硬編碼建立,類似作業系統引導區,隨後讀取其中 SQL_TEXT 依序建立 SYSTEM 表空間、資料字典基礎表等,完成啟動流程。
SELECT * FROM V$FIXED_TABLE WHERE NAME LIKE 'X$%'SELECT VIEW_DEFINITION FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_NAME='GV$PARAMETER'SELECT * FROM X$KSIPPI WHERE KSPPINM LIKE '_%'(需 SYSDBA)掌握 X$ → GV$ → V$ → V_$ → 公用同義詞 的四層架構,能讓 DBA 從根源理解動態效能視圖的資料來源,避免盲目查詢,並在需要深度診斷時直接切入 X$ 層獲取最原始資訊。V$FIXED_VIEW_DEFINITION 是打開這扇門的鑰匙。