首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

深度解析 Oracle 資料字典架構:從 X$ 表到 V$ 視圖的層層遞進

     編輯:Oracle 資料庫基礎

前言

Oracle 資料字典是資料庫元資料的核心儲存體,理解其內部架構對於效能調校、問題診斷與深度開發至關重要。字典物件主要分為三大層次:X$ 固定表、GV$/V$ 動態效能視圖、以及 GV_$/V_$ 視圖與公用同義詞。本文將層層剖析其建立關係與查詢入口。

第一層:X$ 固定表 — 核心核心

X$ 表在資料庫啟動時由 Oracle 程式動態於記憶體中建立,是資料庫運行的基石。僅限 SYSDBA 存取,任何顯式授權均會報錯 ORA-02030。這些表不佔用實體儲存,直接映射 SGA 共享記憶體結構。

第二層:GV$ 與 V$ 視圖 — 效能監控主力

Oracle 8 引入 GV$(Global V$)滿足 OPS/RAC 環境需求:

  • GV$ 視圖:回傳所有實例資訊,包含 INST_ID 欄位
  • V$ 視圖:基於 GV$ 建立,加上 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 典型值):

  • X$ 物件:394 個
  • GV$ 視圖:259 個
  • V$ 視圖:259 個
  • V$FIXED_TABLE 總計記錄:912 筆

第三層:GV_$、V_$ 視圖與公用同義詞

由 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 範例


-- 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$ 表

資料庫啟動首個動作即建立 BOOTSTRAP$ 表(儲存在 File 1 Block 377),記錄核心物件建立 DDL。此表由 Oracle 二進位程式碼硬編碼建立,類似作業系統引導區,隨後讀取其中 SQL_TEXT 依序建立 SYSTEM 表空間、資料字典基礎表等,完成啟動流程。

實用查詢技巧

  • 查看所有 X$ 物件: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 是打開這扇門的鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved