下文以oracle資料庫為例對資料字典進行解釋:
資料字典是Oracle存放有關資料庫資訊的地方,其用途是用來描述資料的。比如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者訪問許可權資訊等。當用戶在對資料庫中的資料進行操作時遇到困難就可以訪問資料字典來檢視詳細的資訊。
Oracle中的資料字典有靜態和動態之分。靜態資料字典主要是在使用者訪問資料字典時不會發生改變的,但動態資料字典是依賴資料庫執行的效能的,反映資料庫執行的一些內在資訊,所以在訪問這類資料字典時往往不是一成不變的。以下分別就這兩類資料字典來論述。
1. 靜態資料字典
這類資料字典主要是由表和檢視組成,應該注意的是,資料字典中的表是不能直接被訪問的,但是可以訪問資料字典中的檢視。靜態資料字典中的檢視分為三類,它們分別由三個字首夠成:user_*、 all_*、 dba_*。
user_*
該檢視儲存了關於當前使用者所擁有的物件的資訊。(即所有在該使用者模式下的物件)
all_*
該試圖儲存了當前使用者能夠訪問的物件的資訊。(與user_*相比,all_* 並不需要擁有該物件,只需要具有訪問該物件的許可權即可)
dba_*
該檢視儲存了資料庫中所有物件的資訊。(前提是當前使用者具有訪問這些資料庫的許可權,一般來說必須具有管理員許可權)
從上面的描述可以看出,三者之間儲存的資料肯定會有重疊,其實它們除了訪問範圍的不同以外(因為許可權不一樣,所以訪問物件的範圍不一樣),其他均具有一致性。具體來說,由於資料字典檢視是由SYS(系統使用者)所擁有的,所以在卻省情況下,只有SYS和擁有DBA系統許可權的使用者可以看到所有的檢視。沒有DBA許可權的使用者只能看到user_*和all_*視。如果沒有被授予相關的SELECT許可權的話,他們是不能看到 dba_*檢視的。
由於三者具有相似性,下面以user_為例介紹幾個常用的靜態檢視:
user_users檢視
主要描述當前使用者的資訊,主要包括當前使用者名稱、帳戶id、帳戶狀態、表空間名、建立時間等。例如執行下列命令即可返回這些資訊。
select * from user_users
user_tables檢視
主要描述當前使用者擁有的所有表的資訊,主要包括表名、表空間名、簇名等。透過此檢視可以清楚瞭解當前使用者可以操作的表有哪些。執行命令為:select * from user_tables
user_objects檢視
主要描述當前使用者擁有的所有物件的資訊,物件包括表、檢視、儲存過程、觸發器、包、索引、序列等。該檢視比user_tables檢視更加全面。例如, 需要獲取一個名為“package1”的物件型別和其狀態的資訊,可以執行下面命令:
select object_type,status
from user_objects
where object_name=upper(‘package1’);
這裡需注意upper的使用,資料字典裡的所有物件均為大寫形式,而PL/SQL裡不是大小寫敏感的,所以在實際操作中一定要注意大小寫匹配。
user_tab_privs檢視
該檢視主要是儲存當前使用者下對所有表的許可權資訊。比如,為了瞭解當前使用者對table1的許可權資訊,可以執行如下命令:
select * from user_tab_privs where table_name=upper("table1")
瞭解了當前使用者對該表的許可權之後就可以清楚的知道,哪些操作可以執行,哪些操作不能執行。
前面的檢視均為user_開頭的,其實all_開頭的也完全是一樣的,只是列出來的資訊是當前使用者可以訪問的物件而不是當前使用者擁有的物件。對於dba_開頭的需要管理員許可權,其他用法也完全一樣,這裡就不再贅述了。
2. 動態資料字典
Oracle包含了一些潛在的由系統管理員如SYS維護的表和檢視,由於當資料庫執行的時候它們會不斷進行更新,所以稱它們為動態資料字典(或者是動態效能檢視)。這些檢視提供了關於記憶體和磁碟的執行情況,所以我們只能對其進行只讀訪問而不能修改它們。
Oracle中這些動態效能檢視都是以v$開頭的檢視,比如v$access。下面就幾個主要的動態效能檢視進行介紹。
v$access
該檢視顯示資料庫中鎖定的資料庫物件以及訪問這些物件的會話物件(session物件)。
執行如下命令:
select * from v$access
結果如下:(因記錄較多,故這裡只是節選了部分記錄)
SID
OWNER OBJECT TYPE
27 DKH V$ACCESS CURSOR
27 PUBLIC V$ACCESS SYNONYM
27 SYS DBMS_APPLICATION_INFO PACKAGE
27 SYS GV$ACCESS VIEW
v$session
該檢視列出當前會話的詳細資訊。由於該檢視欄位較多,這裡就不列詳細欄位,為了解詳細資訊,可以直接在sql*plus命令列下鍵入:desc v$session即可。
v$active_instance
該檢視主要描述當前資料庫下的活動的例項的資訊。依然可以使用select語句來觀察該資訊。
v$context
該檢視列出當前會話的屬性資訊。比如名稱空間、屬性值等。
3.小結
以上是Oracle的資料字典方面的基本內容,還有很多有用檢視因為篇幅原因這裡不能一一講解,希望大家在平時使用中多留心。總之,運用好資料字典技術,可以讓資料庫開發人員能夠更好的瞭解資料庫的全貌,這樣對於資料庫最佳化、管理等有極大的幫助。
下文以oracle資料庫為例對資料字典進行解釋:
資料字典是Oracle存放有關資料庫資訊的地方,其用途是用來描述資料的。比如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者訪問許可權資訊等。當用戶在對資料庫中的資料進行操作時遇到困難就可以訪問資料字典來檢視詳細的資訊。
Oracle中的資料字典有靜態和動態之分。靜態資料字典主要是在使用者訪問資料字典時不會發生改變的,但動態資料字典是依賴資料庫執行的效能的,反映資料庫執行的一些內在資訊,所以在訪問這類資料字典時往往不是一成不變的。以下分別就這兩類資料字典來論述。
1. 靜態資料字典
這類資料字典主要是由表和檢視組成,應該注意的是,資料字典中的表是不能直接被訪問的,但是可以訪問資料字典中的檢視。靜態資料字典中的檢視分為三類,它們分別由三個字首夠成:user_*、 all_*、 dba_*。
user_*
該檢視儲存了關於當前使用者所擁有的物件的資訊。(即所有在該使用者模式下的物件)
all_*
該試圖儲存了當前使用者能夠訪問的物件的資訊。(與user_*相比,all_* 並不需要擁有該物件,只需要具有訪問該物件的許可權即可)
dba_*
該檢視儲存了資料庫中所有物件的資訊。(前提是當前使用者具有訪問這些資料庫的許可權,一般來說必須具有管理員許可權)
從上面的描述可以看出,三者之間儲存的資料肯定會有重疊,其實它們除了訪問範圍的不同以外(因為許可權不一樣,所以訪問物件的範圍不一樣),其他均具有一致性。具體來說,由於資料字典檢視是由SYS(系統使用者)所擁有的,所以在卻省情況下,只有SYS和擁有DBA系統許可權的使用者可以看到所有的檢視。沒有DBA許可權的使用者只能看到user_*和all_*視。如果沒有被授予相關的SELECT許可權的話,他們是不能看到 dba_*檢視的。
由於三者具有相似性,下面以user_為例介紹幾個常用的靜態檢視:
user_users檢視
主要描述當前使用者的資訊,主要包括當前使用者名稱、帳戶id、帳戶狀態、表空間名、建立時間等。例如執行下列命令即可返回這些資訊。
select * from user_users
user_tables檢視
主要描述當前使用者擁有的所有表的資訊,主要包括表名、表空間名、簇名等。透過此檢視可以清楚瞭解當前使用者可以操作的表有哪些。執行命令為:select * from user_tables
user_objects檢視
主要描述當前使用者擁有的所有物件的資訊,物件包括表、檢視、儲存過程、觸發器、包、索引、序列等。該檢視比user_tables檢視更加全面。例如, 需要獲取一個名為“package1”的物件型別和其狀態的資訊,可以執行下面命令:
select object_type,status
from user_objects
where object_name=upper(‘package1’);
這裡需注意upper的使用,資料字典裡的所有物件均為大寫形式,而PL/SQL裡不是大小寫敏感的,所以在實際操作中一定要注意大小寫匹配。
user_tab_privs檢視
該檢視主要是儲存當前使用者下對所有表的許可權資訊。比如,為了瞭解當前使用者對table1的許可權資訊,可以執行如下命令:
select * from user_tab_privs where table_name=upper("table1")
瞭解了當前使用者對該表的許可權之後就可以清楚的知道,哪些操作可以執行,哪些操作不能執行。
前面的檢視均為user_開頭的,其實all_開頭的也完全是一樣的,只是列出來的資訊是當前使用者可以訪問的物件而不是當前使用者擁有的物件。對於dba_開頭的需要管理員許可權,其他用法也完全一樣,這裡就不再贅述了。
2. 動態資料字典
Oracle包含了一些潛在的由系統管理員如SYS維護的表和檢視,由於當資料庫執行的時候它們會不斷進行更新,所以稱它們為動態資料字典(或者是動態效能檢視)。這些檢視提供了關於記憶體和磁碟的執行情況,所以我們只能對其進行只讀訪問而不能修改它們。
Oracle中這些動態效能檢視都是以v$開頭的檢視,比如v$access。下面就幾個主要的動態效能檢視進行介紹。
v$access
該檢視顯示資料庫中鎖定的資料庫物件以及訪問這些物件的會話物件(session物件)。
執行如下命令:
select * from v$access
結果如下:(因記錄較多,故這裡只是節選了部分記錄)
SID
OWNER OBJECT TYPE
27 DKH V$ACCESS CURSOR
27 PUBLIC V$ACCESS SYNONYM
27 SYS DBMS_APPLICATION_INFO PACKAGE
27 SYS GV$ACCESS VIEW
v$session
該檢視列出當前會話的詳細資訊。由於該檢視欄位較多,這裡就不列詳細欄位,為了解詳細資訊,可以直接在sql*plus命令列下鍵入:desc v$session即可。
v$active_instance
該檢視主要描述當前資料庫下的活動的例項的資訊。依然可以使用select語句來觀察該資訊。
v$context
該檢視列出當前會話的屬性資訊。比如名稱空間、屬性值等。
3.小結
以上是Oracle的資料字典方面的基本內容,還有很多有用檢視因為篇幅原因這裡不能一一講解,希望大家在平時使用中多留心。總之,運用好資料字典技術,可以讓資料庫開發人員能夠更好的瞭解資料庫的全貌,這樣對於資料庫最佳化、管理等有極大的幫助。