詳解Oracle數據字典

   Oracle經過數據字典來管理和展示數據庫信息,數據字典一般儲存數據庫的元數據,是數據庫的「數據庫」。一般說的數據字典由4部分組成: 內部RDBMS(X$)表、數據字典表、動態性能視圖(V$)和(靜態)數據字典視圖。(兩表兩視圖)
 
1,內部RDBMS(X$)表
     X$表示Oracle數據庫的核心部分,這些表用於 跟蹤數據庫內部信息,維持數據庫的正常運行。X$表是加密命名的,並且Oracle不作文檔說明。X$表是Oracle數據庫的運行基礎,在數據庫啓動時由Oracle應用程序動態建立。好比咱們熟知的X$BH、X$KSMSP等。研究這些表的最好的辦法就是借用Oracle的autotrace功能(set autotrace trace explain)。
 
2,數據字典表
     數據字典表(Data dictionary table)用以存儲表、索引、約束以及其它 數據庫結構的信息,這些對象一般以「$」結尾(例如:TAB$、OBJ$、TS$等),在 建立數據庫的時候經過運行$ORACLE_HOME/rdbms/admin/sql.bsq腳原本建立。sql.bsq是一個很是重要的文件,其中包含了數據字典表的定義及註釋說明,應仔細閱讀研究。
     好比咱們常常使用的V$DBA_OBJECT視圖就是基於V$OBJ建立的;再好比,當用戶建立一張表的時候,Oracle將會在後臺執行一系列的內部操做,好比向objV$表中插入數據、向tab$表中記錄表數據等。Oracle經過將DDL解析成DML操做,而且將這些操做記錄在數據字典表中,那麼咱們固然能夠經過反向解析獲得原始的建立語句,從Oracle 9i 開始,一個新的工具包 DBMS_METADATA 就能夠完成該功能:
 
3,靜態數據字典視圖
     因爲X$表和數據字典表一般不能直接被用戶訪問,Oracle建立了靜態數據字典視圖來 提供用戶對於數據字典信息的訪問,因爲這些信息一般相對穩定,不能直接修改,因此又被稱爲靜態數據字典視圖。靜態數據字典視圖在 建立數據庫時由$ORACLE_HOME/rdbms/admin/catagory.sql腳本建立。
     靜態數據字典視圖按照前綴的不一樣一般分紅三類:
     ● USER_:用戶所擁有的相關對象信息;
     ● ALL_:用於有權限訪問的全部對象的信息;
     ● DBA_:數據庫全部相關對象的信息,用於須要有 select any table 的權限才能訪問。
     經過三類視圖在本質上是爲了實現權限控制。在Oracle數據庫中, 每一個用戶與方案(Schema)是對應的,Schema是用戶所擁有的對象的集合。數據庫經過Schema將不一樣用戶的對象隔離開來,用戶能夠自由的訪問本身的對象,可是要訪問其餘Schema對象就須要相關的受權。
 
4,動態性能視圖
     動態性能視圖記錄了數據庫運行時信息和統計數據,大部分動態性能視圖被實時更新以及反映數據庫當前狀態。在數據庫啓動時,Oracle動態建立X$表,在此基礎上,Oracle建立了GV$和V$視圖,GV$即Global V$,除了一些特例外,每一個V$都對應一個GV$。GV$產生是爲了OPS/RAC環境的須要,每一個V$都是基於GV$的,只是GV$多了INST_ID列來顯示實例ID。
    (1)如何查看一個視圖的底層建立語句?
     Oracle提供了一些特殊的視圖用以記錄其餘視圖的建立方式,v$fixed_view_definition就是其中之一。
     (2)查詢V$視圖時,報的錯倒是V_$視圖不存在,V_$視圖不是基於V$視圖建立的嗎,怎麼反向報錯了?
 
     爲了防止普通用戶的誤操做,Oracle對經過軟件機制對V$視圖的訪問作了限制,它不容許普通用戶直接訪問V$視圖,但咱們平時不是常常訪問嗎?這實際上是Oracle引入了V_$視圖。在創建V$視圖後,Oracle就創建了V_$視圖,隨後爲V_$視圖創建了與V$視圖同名的共用同義詞。這些工做都是經過catalog.sql腳本(該腳本位於$ORACLE_HOME/rdbms/admin/目錄下)實現的。
如:
     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;    --同名同義詞
 
也就是說,大部分用戶訪問的V$對象,並非視圖,而是執行V_$視圖的同義詞;而V_$視圖時基於真正V$視圖建立的。
 
相關文章
相關標籤/搜索