Oracle資料字典

來源:互聯網
上載者:User

標籤:oracle   資料庫   動態   空間   資訊   

一、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

OWNEROBJECTTYPE

27DKHV$ACCESSCURSOR

27PUBLICV$ACCESSSYNONYM

27SYSDBMS_APPLICATION_INFOPACKAGE

27SYSGV$ACCESSVIEW


  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 

select owner,segment_name,segment_type, 

       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_”是包含資料庫執行個體的所有對象資訊!!!


Oracle資料字典

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.