|
|
![](bar/8_2.gif) |
|
資料字典(Data Dictionary) 是
ORACLE 系統中最重要的部分之一,主要是由一組唯讀的表格(Table) 或其視觀表格(View) 所組成。它主要提供以下有關資料庫的資訊: |
![](point-18.gif) |
使用者(User)
的名字。 |
![](point-18.gif) |
每個使用者所授與的權限(Privilege) 與角色(Role)。 |
![](point-18.gif) |
綱要物件(Schema),如表格(Table)、視觀表格(View)、快照(Snapshot)、索引(Index)、簇集(Cluster)、序列(Sequence)、副程式(Procedure)、函數(Function)、套裝程式(Package)
與觸發器(Trigger)。 |
![](point-18.gif) |
有關整合性限制(Integrity constraint) 的資訊。 |
![](point-18.gif) |
欄位的預設值。 |
![](point-18.gif) |
有關資料庫中物件所給予的空間大小以及空間的使用情況。 |
![](point-18.gif) |
稽核(Audit)
資訊,如存取或更新物件內容。 |
![](point-18.gif) |
其他一般的資料庫資訊。 |
|
使用者可利用 SQL 指令,以查詢某特定資料字典的方式,獲取其所需的資料庫資訊。因為資料字典為唯讀,所以只允許查詢。
|
![](8-2.ht35.gif) |
查詢使用者目前的資訊。 |
|
SQL> SELECT * FROM USER_USERS; |
|
|
|
![](bar/8_2_1.gif) |
|
資料庫資料字典是由基本表格(Table)
和使用者可存取的視觀表格(View) 所組成。 |
基本表格(Base Table) |
資料字典的基礎是一組基本表格組成,儲存相關的資料庫的資訊。這些資訊僅由 ORACLE 系統讀和寫,它們很少被 ORACLE
使用者直接存取。 |
使用者可存取視觀表格(User Accessible
Views) |
資料字典包含使用者可存取的視觀表格,並且顯示資料字典的基本表格之資訊。視觀表格將基本表格中資訊解讀成可用資訊。資料字典中全部基本表格和使用者可存取視觀表格為
ORACLE 使用者 SYS 所持有。 |
|
|
![](bar/8_2_2.gif) |
|
ORACLE
資料庫字典中儲存了關於每位合法使用者的下列資訊:
|
![](point-32.gif) |
使用者是否持有特定權限。 |
![](point-32.gif) |
使用者所建立的表格、索引和簇集的預定表空間(Default Tablespace)。 |
![](point-32.gif) |
使用者所建立的預定臨時表空間。 |
![](point-32.gif) |
使用者被允許之表空間的使用。 |
|
|
User
Process: |
當使用者的應用程式欲以 SQL
指令存取資料庫資料時,例如:Pro*C程式、Oracle Tools、SQL*plus、Oracle Form
等等,Oracle 會產生 User Process去執行這些工作。
|
Oracle
Process: |
Oracle Process
依執行的方式不同可大概分為 Server Process 與 Background Process 兩種:
※Server Process
※Background Proces |
|
ORACLE 使用者可利用 SQL 指令,依本身的權限查詢資料字典內的視觀表格(View)。視觀表格存放在 ORACLE 系統的名稱為
SYSTEM 的表空間(Tablespace) 中。資料字典內包含多組的視觀表格,可依其前置詞(Prefix)
的不同分成三組含有類似資訊的視觀表格:
|
1. 前置詞(Prefix)
為 USER
的視觀表格(View),例如:USER_TABLES,主要為以使用者本身為觀點,查詢使用者本身在資料庫系統中的自身資訊,例如:使用者所產生的物件(Object)、被授予的權限(Privilege)
與產生的時間等等資訊。
|
![](8-2.ht40.gif) |
查詢使用者本身所擁有的表格資訊。 |
|
SQL> SELECT TABLE_NAME,
TABLESPACE_NAME
2 FROM USER_TABLES; |
|
|
2. 前置詞(Prfix) 為
ALL
的視觀表格,例如:ALL_TABLES,主要是以使用者為觀點,全面性地查詢使用者所能存取的物件資訊,這包括使用者本身所擁有物件外,再加上因被授予權限或角色而能存取的物件。若是我們未在查詢的
SQL 指令中加上特定使用者的條件,則內定為全部使用者。
|
![](8-2.ht41.gif) |
查詢全部使用者的表格資訊。 |
|
SQL> SELECT TABLE_NAME,
TABLESPACE_NAME
2 FROM ALL_TABLES; |
![](8-2.ht42.gif)
|
與例 1 不同之處,在於例 1
只會列出目前使用者本身擁有的表格,而例 2 會列出全部使用者所擁有的表格,若要利用 ALL_TABLES
查詢目前使用者本身擁有的表格,可在查詢上加上條件 WHERE OWNER=‘使用者’。 |
|
|
![](8-2.ht43.gif) |
查詢目前使用者 JEHUANG
所擁有的表格。 |
|
SQL> SELECT TABLE_NAME,
TABLESPACE_NAME
2 FROM ALL_TABLES
3 WHERE OWNER = ‘JEHUANG’; |
![](8-2.ht44.gif) |
其中使用者要大寫,因為
ORACLE 系統內定為大寫。 |
|
|
3. 前置詞為 DBA
的視觀表格,例如:DBA_TABLES,以資料庫整體為觀點,也就是資料庫系統管理者觀點。也只有擁有 DBA
角色的使用者才能查詢此類的視觀表格。若非原內定的 DBA 使用者,例如:SYS 或
SYSTEM,則查詢此類視觀表格必須在視觀表格前加上原來的擁有者 SYS。
|
![](8-2.ht45.gif) |
查詢 DBA 所擁有的表格。 |
|
SQL> SELECT TABLE_NAME,
TABLESPACE_NAME
2 FROM SYS.DBA_TABLES; |
|
|
![](8-2.ht1.gif) |
利用資料字典中的 DICT
查詢資料字典中以 ‘USER_TABLE’ 開頭的視觀表格(VIEW)的意義。(利用資料字典中的 DICT
查詢其他資料字典中視觀表格意義的例子) |
|
|
![](8-2.ht2.jpg) |
|
|
![](8-2.ht3.gif) |
利用資料字典中的
DICT_COLUMNS 查詢資料字典中的視觀表格‘USER_TAB_PRIVS’ 中各欄位的意義。(利用資料字典
DICT_COLUMNS 查詢其他資料字典中視觀表格的欄位意義的例子) |
|
|
![](8-2.ht4.jpg) |
|
|
![](8-2.ht5.gif) |
利用資料字典中的
USER_TAB_COLUMNS 查看使用者的表格 EMP 的表格結構。(利用資料字典中的 USER_TAB_COLUMNS
查看表格結構的例子) |
|
|
![](8-2.ht6.jpg) |
![](8-2.ht7.gif) |
這個查詢相當使用了 DESC
EMP 指令。 |
|
|