一、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
PUBLIC
SYNONYM
SYS
DBMS_APPLICATION_INFO
PACKAGE
GV$ACCESS
VIEW
v$session
該視圖列出目前會話的詳細資訊。由于該視圖字段較多,這裡就不列詳細字段,為了解詳細資訊,可以直接在sql*plus指令行下鍵入:desc v$session即可。
v$active_instance
該視圖主要描述目前資料庫下的活動的執行個體的資訊。依然可以使用select語句來觀察該資訊。
v$context
該視圖列出目前會話的屬性資訊。比如命名空間、屬性值等。
3.小結
以上是Oracle的資料字典方面的基本内容,還有很多有用視圖因為篇幅原因這裡不能一一講解,希望大家在平時使用中多留心。總之,運用好資料字典技術,可以讓資料庫開發人員能夠更好的了解資料庫的全貌,這樣對于資料庫優化、管理等有極大的幫助。
二、Oracle 中常用資料字典
下面列出的這些資料字典,均在 Oracle 11g R1 上,通過 Oracle Sql Developer 進行過測試的,全部通過。其中很多的資料字典都必須以 system 或者是 sysdba 使用者登入才能夠使用的。
---資料庫執行個體的基本資訊
desc v$instance;
select * from v$instance;
--資料檔案的基本資訊
desc v$datafile;
select * from v$datafile;
desc dba_data_files;
select file_name,file_id,tablespace_name,bytes,blocks,
status,online_status
from dba_data_files;
--臨時檔案的基本資訊
desc dba_temp_files;
select file_name,file_id,tablespace_name,status,
bytes/1024/1024 大小MB
from dba_temp_files;
--控制檔案的基本資訊
desc v$controlfile;
select name,status,is_recovery_dest_file,
block_size,file_size_blks
from v$controlfile;
--日志檔案的基本資訊
desc v$logfile;
select group#,status,type,member,is_recovery_dest_file
from v$logfile;
--資料庫的基本資訊
desc v$database;
select * from v$database;
select dbid,name,created,resetlogs_time,log_mode,
open_mode,checkpoint_change#,archive_change#,
controlfile_created,controlfile_type,
controlfile_sequence#,controlfile_change#,
controlfile_time,protection_mode,database_role
from v$database;
--日志檔案參數資訊
show parameter log_archive_dest;
--通路參數檔案
desc v$parameter;
select num,name,type,value,display_value,
isdefault,isses_modifiable,
issys_modifiable,isinstance_modifiable
from v$parameter;
select * from v$parameter;
select name,value,description from v$parameter;
--背景程序資訊
desc v$bgprocess;
select paddr,pserial#,name,description,error from v$bgprocess;
--DBA 使用者的所有的表的基本資訊
desc dba_tables;
desc dba_tab_columns;
select owner,table_name,column_name,data_type,data_length,
global_stats,data_upgraded,histogram
from dba_tab_columns;
--DBA 使用者的所有的視圖的基本資訊
desc dba_views;
select owner,view_name,read_only from dba_views;
--DBA 使用者的所有的同義詞的基本資訊
desc dba_synonyms;
select owner,synonym_name,table_owner,
table_name,db_link
from dba_synonyms;
--DBA 使用者的所有的序列的資訊
desc dba_sequences;
select sequence_owner,sequence_name,min_value,max_value,
cycle_flag
from dba_sequences;
--DBA 使用者的所有的限制的資訊
desc dba_constraints;
select owner,constraint_name,constraint_type,
table_name,status
from dba_constraints;
--DBA 使用者的所有的索引的基本資訊
desc dba_indexes;
select owner,index_name,index_type,table_owner,table_name,
table_type,uniqueness,compression,logging,status
from dba_indexes;
--DBA 使用者的所有的觸發器的基本資訊
desc dba_triggers;
select owner,trigger_name,trigger_type,
table_owner,table_name,column_name
from dba_triggers;
--DBA 使用者的所有的存儲過程的基本資訊
desc dba_source;
select owner,name,type,line,text from dba_source;
--DBA 使用者的所有的段的基本資訊
desc dba_segments;
select owner,segment_name,segment_type,
tablespace_name,blocks,extents
from dba_segments;
--DBA 使用者的所有的區的基本資訊
desc dba_extents
tablespace_name,extent_id,file_id,blocks
from dba_extents;
--DBA 使用者的所有的對象的基本資訊
desc dba_objects;
select owner,object_name,subobject_name,
object_id,data_object_id,object_type,
created,status,namespace
from dba_objects;
--目前使用者可以通路的所有的基表
desc cat;
select table_name from cat;
--目前使用者可以通路的所有的基表,視圖,同義詞
desc system.tab;
select tname,tabtype,clusterid from system.tab;
--構成資料字典的所有的表資訊
desc dict;
select table_name,comments from dict;
-- 查詢關于表空間的一些基本的資料字典
desc dba_tablespaces;
select tablespace_name,block_size,status,
logging,extent_management
from dba_tablespaces;
desc dba_free_space;
select tablespace_name,file_id,block_id,
bytes/1024/1024 大小MB,blocks,relative_fno
from dba_free_space;
--歸檔狀态的一些基本資訊
desc v$archived_log;
select name,dest_id,blocks,block_size,
archived,status,backup_count
from v$archived_log;
--關于記憶體結構的一些資訊
desc v$sga;
select name,value/1024/1024 大小MB from v$sga;
desc v$sgastat;
select pool,name,bytes from v$sgastat;
desc v$db_object_cache;
select owner,name,db_link,type,namespace,locks from v$db_object_cache;
desc v$sql;
select sql_text,sql_id,cpu_time from v$sql;
上面的呢就是 Oracle 中較常使用的資料字典了,需要提一下的是,上面有很多都是以 “dba_”開頭的資料字典,比如有 dba_tables ,其實呢,這個是列出了資料庫中所有的資料,比如使用 dba_tables 就會列出資料庫中所有的資料表(n 多),但是您可以使用 user_tables 或者 all_tables 來代替 dba_tables,當然有一些是沒有與之對應的,這樣呢,就隻會列出目前登入使用者允許檢視的資料表了,對于以“dba_”基本上都是有與之相對應的“user_”和“all_”,其中“user_”對應的是記錄目前登陸使用者的對象,而“all_”則是記錄目前登陸使用者的對象資訊以及被授權通路的對象資訊,而“dba_”是包含資料庫執行個體的所有對象資訊!!!
原文連結:
<a href="http://9host.cn/oracle/200742218394112481.html">http://9host.cn/oracle/200742218394112481.html</a>
<a href="http://www.cnblogs.com/QinBaoBei/archive/2010/04/11/1709580.html">http://www.cnblogs.com/QinBaoBei/archive/2010/04/11/1709580.html</a>
本文轉自賀滿部落格園部落格,原文連結:http://www.cnblogs.com/puresoul/archive/2010/06/29/1767591.html,如需轉載請自行聯系原作者。