在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;