在Oracle資料庫中,與用戶有關的表有三種,一是用戶自己創建的表,二是數據字典視圖,三是動態性能視圖。在後兩種視圖中,用戶可以查詢自己關心的信息。 數據字典視圖 數據字典是一種系統表,它在資料庫被創建時自動產生,並且由資料庫伺服器本身進行維護和更新。在數據字典中包含了資料庫的相關信息。 在數據字典 ...
在Oracle資料庫中,與用戶有關的表有三種,一是用戶自己創建的表,二是數據字典視圖,三是動態性能視圖。
在後兩種視圖中,用戶可以查詢自己關心的信息。
數據字典視圖
數據字典是一種系統表,它在資料庫被創建時自動產生,並且由資料庫伺服器本身進行維護和更新。
在數據字典中包含了資料庫的相關信息。
在數據字典中存儲了以下信息:
·資料庫的物理結構和邏輯結構信息。
·用戶和許可權信息。
·資料庫對象的信息,如表、視圖、索引、存儲程式、約束等。
·審計信息。
由於數據字典是一個非常大而且非常複雜的表,用戶不方便對其進行直接的訪問,而且這樣做也不安全。
為了用戶訪問方便, Oracle提供了許多數據字典視圖,這些視圖就建立在數據字典基表上,我們平常所說的數據字典就是指這些數據字典視圖。
數據字典視圖的結構可以通過在SQL*Plus 中執行DESC命令來查看。
對一個用戶而言,可以訪問的數據字典視圖很多,如果按照所包含的信息的範圍大小來劃分,有三類主要的數據字典視圖,這些視圖的名稱分別以以下標識符開始:
user_ 存儲當前用戶所擁有的某類對象的信息。
all_ 存儲當前用戶有權訪問的某類對象的信息。
dba_ 存儲資料庫中所有的某類數據對象的信息,僅管理員可以訪問。
例如,從數據字典視圖user_objects 中可以查詢當前用戶所擁有的所有對象的信息,包括表、視圖、索引、存儲程式等。
如果要查詢當前用戶所擁有的所有對象的名稱、類型、創建時間、狀態等信息,可以執行下列SELECT語句:
SELECT object_name, object_type, created, status FROM user_objects;
在數據字典視圖user_tables 中存儲了當前用戶所擁有的表的信息。
例如,要查詢當前用戶所擁有的表的名稱和所在的表空間名稱,可以執行下列SELECT語句:
SELECT table_name, tablespace_name FROM user_tables;
從數據字典視圖all_tables 中可以查詢當前用戶可以訪問的表的信息,包括用戶自己創建的表,以及其他用戶授權該用戶可以訪問的表。
例如,通過執行下麵的SELECT語句,可以瞭解當前用戶可以訪問的表的名稱:
SELECT table_name FROM all_tables;
從數據字典視圖user_tab_columns 中可以查詢當前用戶所擁有的表的各個列的定義。
例如,通過執行下列的SELECT語句,可以瞭解表DEPT的各個列的定義:
SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name='DEPT';
從數據字典視圖dba_tables 中能夠查詢當前資料庫中所有表的信息,這類以dba_開始的視圖只能由SYS用戶查看。
例如,下麵的SELECT語句用於查詢資料庫中所有表的名稱、所在表空間的名稱、所有者等信息:
SELECT table_name, tablespace_name, owner FROM dba_tables;
一個用戶可以訪問的數據字典是很多的,這些數據字典的名字是與所存儲的對象信息有關的。
例如,數據字典視圖user_indexes可以查詢當前用戶所創建的索引的信息,在dba_users 中,可以查詢當前資料庫中所有用戶的信息。
動態性能視圖
如果說數據字典視圖反映了資料庫的信息,那麼動態性能視圖則主要反映了實例的信息。
數據字典視圖中的信息是靜態的,來自數據字典基表,它反映的是資料庫的信息,這些信息不會因為資料庫伺服器的關閉而消失。
動態性能視圖中的信息則是動態變化的,它反映了實例的實際運行情況,這些信息來自SGA或者控制文件,隨著實例的關閉和重新啟動,這些信息將重新產生。
動態性能視圖的名稱基本上是以v$開始的。
從這些視圖中可以獲得一些有用的統計信息,這些信息主要用於對資料庫的性能進行調優。
例如,執行下麵的SELECT語句可以瞭解資料庫中一些等待事件的發生情況:
SELECT event, total_waits, time_waited, average_wait FROM v$system_event;
下麵的語句用於查看SGA 中每種緩衝區的大小:
SELECT name, bytes/1024/1024 mb FROM v$sgastat;