【oracle11g,8】數據字典 和字符集

一.數據字典:
oracle的數據字典記錄了數據庫管理的元數據,他對於數據庫來說是生死攸關的核心檔案。
1.數據字典放在system表空間,用戶是sys。
2.描述數據庫和對象的定義,
3..數據字典是隻讀的。
4.是server維護的,只能查詢。
5.大部分由catalog.sql創建的。

通常所說的數據字典由四部分組成:內部 RDBMS(X$)表、數據字典表、動態性能(V$)視圖和數據字典視圖。


二. 數據字典組成:

1. 內部 RDBMS(X$)表 

X$表是 Oracle 數據庫的核心部分,這些表用於跟蹤內部數據庫信息,維持數據庫的正常運行。X$表是加密命名的,而且 Oracle 不作文檔說明,這部分知識是 Oracle 公司的技術機密,Oracle 通過這些 X$建立起其他大量視圖ᨀ供用戶查詢管理數據庫之用。但是由於 X$表記錄了大量有用的信息,所以也不停的被全球 DBA 不懈的探索着,最爲人所熟知的有:X$BH,X$KSMSP 等。

2. 數據字典表
數據字典表(Data dictionary table)用以存儲表、索引、約束以及其他數據庫結構的信息。這些對象通常以“$”結尾(例如 TAB$、OBJ$、TS$等),在創建數據庫的時候通過運行 sql.bsq腳本來創建。


3.靜態數據字典視圖 
由於 X$表和數據字典表通常不能直接訪問,Oracle 創建了靜態數據字典視圖來ᨀ供用戶對於數據字典信息的訪問,由於這些信息通常相對穩定、不能直接修改,所以又被稱爲靜態數據字典視圖。數據字典視圖在創建數據庫時由 catalog.sql 腳本(該腳本位於$ORACLE_HOME/rdbms/admin/目錄下)創建。

①.靜態數據字典視圖按照前綴的不同通常被分爲三類: 
a.USER_  類視圖包含了用戶所擁有的相關對象信息,用戶可以通過這個視圖查詢自己擁有的對象信息。 
b.ALL_  類視圖包含了用戶有權限訪問的所有對象的信息。 
c.DBA_  類視圖包含了數據庫所有相關對象的信息,用戶需要 SELECT ANY TABLE 權限才能訪問。 

②.常用數據字典視圖舉例 
a.DICT / DICTIONARY 
爲了方便檢索, Oracle ᨀ供一個名爲字典(DICTIONARY)的 視 圖 ,基 於 這 個 視 圖 , Oracle又創建了兩個名爲 DICT 和 DICTIONARY 的同義詞:

b.  DICT_COLUMNS 
同 DICT 類似,DICT_COLUMNS 視圖記錄了字典視圖列(COLUMN)及其相關說明:


c.  OBJ$/DBA_OBJECTS/OBJ 
OBJ$是一個底層的字典表,其中記錄了數據庫中所有對象的信息,DBA_OBJECTS 視圖基於 OBJ$建立,一脈相承的,ALL_OBJECTS 和 USER_OBJECTS 視圖也隨之建立。

4.動態性能視圖:

動態性能(V$)視圖(Dynamic Performance View)記錄了數據庫運行時信息和統計數據,大部分動態性能視圖被實時更新以反映數據庫當前狀態。 Oracle 通過動態性能視圖將 Oracle 數據庫的狀態展示出來,提供給用戶和數據庫管理員,Oracle 對 V$視圖給出了詳細的文檔說明供開發管理人員參考,是我們研究和管理數據庫的主要依據。 

①.GV$和 V$視圖 
在數據庫啓動時,Oracle 動態創建 X$表,在此基礎之上,Oracle 創建了 GV$和 V$視圖。  從 Oracle8 開始,GV$視圖開始被引入,其含義爲 Global V$。 除了一些特例以外,每個 V$視圖都有一個對應的 GV$視圖存在。 
 
GV$視圖的產生是爲了滿足 OPS/RAC 環境的需要,在 OPS/RAC 環境中,查詢 GV$視圖返回所有實例信息,而每個 V$視圖是基於 GV$視圖,增加了 INST_ID 列的 WHERE 條件限制建立,只包含當前連接實例信息。
總結一下,Oracle 的 GV$視圖和 V$視圖是在數據庫創建過程中建立起來的,內置於數據庫中,Oracle 通過 v$fixed_view_definition 視圖爲我們展現這些定義。

②.GV_$,V_$視圖和 V$,GV$同義詞

在 GV$和 V$之後,Oracle 建立了 GV_$和 V_$視圖,隨後爲這些視圖建立了公用同義詞。這些工作都是通過 catalog.sql 腳本(該腳本位於$ORACLE_HOME/rdbms/admin/目錄下)實現的。 

從 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_$視圖是基於真正的 V$視圖(這個視圖是基於 X$表建立的)創建的。 

5.動態性能視圖與數據庫啓動
由於動態性能視圖是在數據庫啓動過程中自動創建的,所以在數據庫啓動的不同階段,我們能夠訪問的視圖也各不相同。
①. 在 Nomount 階段 
當數據庫啓動到 nomount 狀態時,實際上僅僅啓動了數據庫實例,此時的實例信息主要來自參數文件,因此和參數文件記錄的相關信息可以查詢,以下是這一階段可以獲
取信息的主要視圖: 
V$PARAMETER、V$SPPARAMETER 
V$SGA、V$SGASTAT、V$BH、V$INSTANCE 
V$OPTION、V$VERSION 
V$PROCESS、V$SESSION 
. 在 Mount 階段 
當數據庫啓動到 Mount 狀態時,控制文件被讀取,和控制文件相關的視圖此時可以進行查詢,以下是這一階段可以獲取信息的主要視圖: 
V$THREAD、V$CONTROLFILE、V$DATABASE、 
V$DATAFILE、V$LOGFILE、V$DATAFILE_HEADER 

③. 在 Open 階段 
當數據庫 Open 之後,所有的動態性能視圖和數據字典都可以被查詢。 




二.數據字典裏的同義詞:

SQL> select file#,name from v$datafile; (同義詞)
     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf
         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf
         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf
         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf

SQL> select file#,name from v_$datafile;

     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf
         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf
         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf
         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf


三.模糊查詢視圖名稱
select * from dictionary where table_name like 'DBA';


四.數據字典的視圖:(重點)

數據字典視圖的分類,靜態(static)和動態(dynamic) 

1.動態視圖
大部分在mount下就可以訪問,反映數據庫實時的狀態
大部分v$開頭,多用單數,從控制文件和內存彙總讀出。
從v$fixed_table 這個視圖查到所有的動態視圖的名稱。
用於調優和數據庫監控。
v$_單數   單實例的動態視圖。
Gv$_單數  rac環境的動態視圖


SQL> select count(*) from v$fixed_table;

  COUNT(*)
----------
      1396

常用靜態視圖:
select name from v$tablespace;
select file#,name from v$datafiles;
select * from v$log;
select * from v$logfile;
select name from v$archived_log;



2.靜態視圖
在數據庫的open狀態下訪問,用於瞭解數據庫的物理結構信息。
大部分以dba、all、user開頭,並用複數形式
user_:存儲當前用戶所擁有的對象的相關信息
all_:存儲當前用戶能夠訪問的對象
dba_:存儲所有用戶對象的信息(默認只能有sys/system用戶訪問)

例: 
查看區信息
select segment_name ,segment_type,tablespace_name, bytes/1024 k,extents,blocks from dba_segments;
#查看數據文件
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 m from dba_data_files;




五.字符集:














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章