數據字典視圖:sql
DICTIONARY數據庫
USER_OBJECTSsession
USER_TABLES性能
USER_TAB_COLUMNS命令行
……對象
數據字典結構:索引
基表內存
用戶可訪問的視圖io
視圖前綴 含義table
USER 用戶視圖(本身擁有的,本身方案下的)
ALL 擴展的用戶視圖(在USER_的基礎上,用戶有權訪問的)
DBA 數據庫管理員視圖(全部方案下的)
V$ 動態性能視圖(能夠理解爲內存中的信息)
中綴 COL TAB CONS ……
後綴 CONSTRAINTS COLUMNS VIEW ……
USER_CONSTRAINTS查詢用戶下的約束
USER_CONS_COLUMNS查詢用戶下的約束和在哪些列上
數據字典是Oracle存放有關數據庫信息的地方,其用途是用來描述數據的。好比一個表的建立者信息,建立時間信息,所屬表空間信息,用戶訪問權限信息等。當用戶在對數據庫中的數據進行操做時遇到困難就能夠訪問數據字典來查看詳細的信息。
Oracle中的數據字典有靜態和動態之分。靜態數據字典主要是在用戶訪問數據字典時不會發生改變的,但動態數據字典是依賴數據庫運行的性能的,反映數據庫運行的一些內在信息,因此在訪問這類數據字典時每每不是一成不變的。如下分別就這兩類數據字典來論述。
1. 靜態數據字典
這類數據字典主要是由表和視圖組成,應該注意的是,數據字典中的表是不能直接被訪問的,可是能夠訪問數據字典中的視圖。靜態數據字典中的視圖分爲三類,它們分別由三個前綴夠成:user_*、 all_*、 dba_*。
user_*
該視圖存儲了關於當前用戶所擁有的對象的信息。(即全部在該用戶模式下的對象)
all_*
該試圖存儲了當前用戶可以訪問的對象的信息。(與user_*相比,all_* 並不須要擁有該對象,只須要具備訪問該對象的權限便可)
dba_*
該視圖存儲了數據庫中全部對象的信息。(前提是當前用戶具備訪問這些數據庫的權限,通常來講必須具備管理員權限)
從上面的描述能夠看出,三者之間存儲的數據確定會有重疊,其實它們除了訪問範圍的不一樣之外(由於權限不同,因此訪問對象的範圍不同),其餘均具備一致性。具體來講,因爲數據字典視圖是由SYS(系統用戶)所擁有的,因此在卻省狀況下,只有SYS和擁有DBA系統權限的用戶能夠看到全部的視圖。沒有DBA權限的用戶只能看到user_*和all_*視。若是沒有被授予相關的SELECT權限的話,他們是不能看到 dba_*視圖的。
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
該視圖列出當前會話的屬性信息。好比命名空間、屬性值等。
SELECT * FROM DICTIONARY WHERE TABLE_NAME LIKE ‘USER\_%’ ESCAPE ‘\’;
查詢數據庫裏都有哪些USER開頭的數據字典
SELECT VIEW_NAME FROM USER_VIEWS;查詢用戶下全部視圖的試圖名字
DESCRIBE USER_SEQUENCES;序列字典結構
在USER_SEQUENCES數據字典表中確認您的序列值
SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER
FRO USER_SEQUENCES;
USER_INDEXES 提供關於索引的信息。
USER_IND_COLUMNS描述索引列,包括索引和字段。
SELECT * FROM USER_SYNONYMS;查找用戶下的全部同義詞的信息
使用COMMENT命令爲表和字段添加註釋:
COMMENT ON TABLE EMPLOYEES
IS ‘EMPLOYEES INFOMATION’
COMMENT ON COLUMN EMPLOYEES.FIRST_NAME
IS ‘FIRST NAME OF THE EMPLOYEE’
能夠經過下列數據字典視圖查看註釋信息
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS