首先,Oracle的字典表和視圖基本上可以分為三個層次。
1.X$表格
這部分表是Oracle數據庫的運行基礎,它是由Oracle應用程序在數據庫啟動時動態創建的。
表的這壹部分對數據庫非常重要,因此Oracle不允許SYSDBA以外的用戶直接訪問它,並且不允許顯示授權。
如果顯示授權,您將收到以下錯誤:
SQL & gt將x$ksppi上的select授權給eygle
將x$ksppi上的select授權給eygle
*
第1行出錯:
ORA-02030:只能從固定表/視圖中選擇
2.GV$和V$視圖
從Oracle8開始,引入了GV$ view,這意味著全局V$。
除了壹些特殊情況,每個V$視圖都有壹個對應的GV$視圖。
GV$ view是為了滿足OPS環境的需求而生成的。在OPS環境中,查詢GV$ view將返回所有實例信息,每個V$ view都基於添加INST ID列後建立的GV$ view,並且只包含當前連接實例信息。
請註意,每個V$視圖都包含類似以下內容的語句:
其中inst _ id = USERENV(‘實例‘)
用於限制當前實例信息的返回。
讓我們從GV$FIXED_TABLE和V$FIXED_TABLE開始。
SQL & gt從v_$fixed_view_definition選擇view_definition
其中view _ name =‘V $ FIXED _ TABLE‘;
視圖_定義
-
從GV$FIXED_TABLE中選擇名稱、對象標識、類型和表格編號
其中inst _ id = USERENV(‘實例‘)
這裏我們看到V$FIXED_TABLE是基於GV$FIXED_TABLE創建的。
SQL & gt從v_$fixed_view_definition選擇view_definition
其中view _ name =‘GV $ FIXED _ TABLE‘;
視圖_定義
-
select inst_id,kqftanam,kqftaobj,TABLE,indx from x$kqfta
聯合所有
select inst_id,kqfvinam,kqfviobj,VIEW,65537 from x$kqfvi
聯合所有
select inst_id,kqfdtnam,kqfdtobj,TABLE,65537 from x$kqfdt
這樣,我們找到了基於X$ table創建的GV$FIXED_TABLE視圖的創建語句。
3.GV_$,V_$視圖和V$,GV$同義詞
這些視圖是通過catalog.ql創建的。
catalog.sql運行時:
將視圖v_$fixed_table創建或替換為select * from v $ fixed _ table
為v_$fixed_table創建或替換公共同義詞v $ fixed _ table
將視圖gv_$fixed_table創建或替換為select * from gv $ fixed _ table
為gv_$fixed_table創建或替換公共同義詞gv $ fixed _ table
我們註意到首先創建了第壹個視圖V_$和GV_$並且創建了兩個視圖V_$和gv_$。
然後創建基於V_$ view的同義詞。
所以,事實上,我們通常訪問的V$視圖實際上是V_$視圖的同義詞。
V_$視圖基於真實的V$視圖(該視圖基於X$表)。
v$fixed_view_definition視圖是我們研究Oracle對象關系的壹個切入點。仔細了解Oracle的數據字典機制有助於我們深入理解和學習Oracle數據庫知識。
更進壹步
1).X$表格
關於X$表,我們也可以從數據字典中壹窺其創建信息。
首先,我們檢查bootstrap$ table,它記錄了數據庫啟動的基本信息和驅動信息。
SQL & gtselect * from bootstrap $;
行# OBJ# SQL_TEXT