數據字典是oracle存放有關資料庫信息的地方,幾乎所有的系統信息和對象信息都可在數據字典中進行查詢。數據字典是oracle資料庫系統的信息核心,它是一組提供有關資料庫信息的表和視圖的集合,這些表和視圖是只讀的。它是隨著資料庫的建立而建立的,當資料庫執行特定動作時數據字典也會自動更新。數據一覽與數據 ...
數據字典是oracle存放有關資料庫信息的地方,幾乎所有的系統信息和對象信息都可在數據字典中進行查詢。數據字典是oracle資料庫系統的信息核心,它是一組提供有關資料庫信息的表和視圖的集合,這些表和視圖是只讀的。它是隨著資料庫的建立而建立的,當資料庫執行特定動作時數據字典也會自動更新。數據一覽與數據字典來記錄、校驗和管理正在進行的操作。
Oracle中,sys用戶是數據字典的擁有者,數據字典保證在所有資料庫的系統表空間system內,任何用戶都無權更改sys模式下的模式對象或數據字典中的行。也就是說數據字典只能查詢,不能手動進行修改。
一、數據字典用途
Oracle通過存取數據字典從而比較方便地獲取有關用戶某事對象和存儲結構等信息。當系統執行了DDL語句後,oracle會及時修改數據字典。任何用戶只能以讀的形式使用數據字典獲取資料庫信息。
二、數據字典存儲的信息
- 數據用戶的名稱
- 為用戶授予的許可權和角色
- 模式對象的名。
- 完整性約束的具體信息;
- 每個欄位的預設值;
- 資料庫空間的使用情況;
- 存儲審計的信息
- 對象與用戶的嚴格管理(適用於高度機密管理);
- 其他一般資料庫信息
三、四種首碼的數據字典視圖
- user_ :任何用戶都可以讀取的視圖,每個用戶讀取的都不一樣,它只提供當前用戶某事下的對象信息。
如查詢當前模式下的所有對象:
select object_name, object_type from user_objects;
- all_ :所有用戶都可讀取的用戶視圖,它提供與用戶有關的對象信息。
如查詢當前用戶可訪問的所有對象: select owner, object_name, object_type from all_objects;
- dba_:提供了只有資料庫管理員才可讀取的視圖,包括所有用戶視圖中的對象信息。
如: select owner, object_name, object_type from sys.dba_objects;
- v$:動態性能視圖
動態性能視圖用於記錄當前常式的活動信息,當啟動oracle server時,系統會建立動態性能視圖;當停止oracle server時,系統會刪除動態性能視圖,oracle的所有動態性能視圖都是以v_$開始的,並且oracle為每個動態性能視圖都提供例了相應的同義詞,並且同義詞是以v$開始的,例如_$datefile的同義詞為v$datefile;動態性能視圖的所有者為sys,一般情況下,由DBA或是特權用戶來查詢動態性能視圖。
四、查詢數據字典示例
- 查詢用戶相關的數據字典
查詢用戶 select username from dba_users; -- 只有管理員許可權的用戶才能查詢 select username from all_users; -- 當前或任何用戶都可使用 -- 查看當前用戶的預設表空間 select username, default_tablespace from user_users; --當前用戶角色 select * from user_role_privs; -- 當前用戶的系統許可權和表級許可權 select * from user_sys_privs; select * from user_tab_privs;
- 查詢表空間相關的數據字典(擁有DBA許可權的用戶才能查詢)
select * from dba_data_files; select * from dba_tablespaces; --表空間 select tablespace_name, sum(bytes), sum(blocks) from dba_free_space group by tablespace_name; --空閑表空間 select * from dba_data_files where tablespace_name='USERS'; -- 表空間對於的數據文件 select * from dba_segments where tablespace_name='USERS'; --查詢用戶模式對象所使用過的正在使用空間大小 select name, type, source_size, code_size from user_object_size;
- 查詢資料庫對象(擁有DBA許可權的用戶才能查詢)
select * from dba_objects select * from dba_objects where object_type = upper('package body'); select * from dba_objects where OBJECT_TYPE='TABLE' and OWNER='SCOTT'