1. 程式人生 > >詳解Oracle資料字典

詳解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$檢視建立的。