--==============================
--Oracle 數據字典和數據字典視圖
--==============================
?
數據字典
??? 是元數據的集合,從邏輯上和物理上描述了數據庫及內容,存儲于 SYSTEM 與 SYSAUX 表空間內的若干段。
??? SYS 用戶擁有所有的數據字典表,數據字典基本一般以 $ 結尾,如 col$ , tab$ 等,這些數據字典存放在 system 表空間中。
???
數據字典的形成
??? 在數據庫創建階段創建,在使用階段維護和更新
??? 無法通過 DML 操作來修改,只能通過相關的命令修改系統,來達到間接修改數據字典。
?
數據字典的特點
??? 每個 Oracle 數據庫的中樞
??? 描述數據庫和它的對象
??? 包含只讀的表和視圖
??? 存儲在 SYSTEM 表空間中
??? 擁有者是 SYS 用戶
??? 由 Oracle 服務器自己維護
??? 用 SELECT 訪問
?
數據字典內容 :
??? 數據字典提供下列信息 :
?????? 邏輯和物理的數據庫結構
?????? 對象的定義和空間分配
?????? 一致性限制
?????? 用戶
?????? 角色
?????? 權限
?????? 審計
?
數據字典的主要用途:
??? Oracle 服務器用它查找下列信息:
?????? 用戶
?????? 對象
?????? 存儲結構
?????? Oracle 服務器修改數據字典當 DDL 語句執行的時候 .
?????? 用戶和管理員們利用它了解數據庫的信息 .
??????????
基礎表和數據字典視圖: ??
??? 數據字典包括兩個部分 :
?????? 基礎表
????????????? 存儲數據庫的描述
????????????? CREATE DATABASE 命令創建( sql . bsq )
?
?????? 數據字典視圖
????????????? 用于簡化基礎表的信息
????????????? 通過 PUBLIC 同義詞訪問
????????????? 由腳本 catalog . sql 創建
??????????
?????????? 數據字典基表中的數據很難看懂。因此,很少人直接訪問這些基表。取而代之的是數據字典視圖。
?????????? 數據字典視圖分為類,它們以前輟來區分,前輟分別為: USER 、 ALL 、 DBA
?
?????????? USER_ * 用戶所擁有的對象信息
?????????? ALL_ * ? 用戶能訪問的對象信息
?????????? DBA_ * ? 整個數據庫中的對象信息
???
創建數據字典視圖:
??? 建庫后,運行以下腳本創建的
??? $ORACLE_HOME / rdbms / admin / catalog . sql ? 創建常用的數據字典和同義詞
??? $ORACLE_HOME / rdbms / admin / catproc . sql ? 創建內建的存儲過程、包等 pl / sql 對象
?
??? DBCA 建庫時會自動運行這兩個腳本,但如果手動建庫的話,需手動運行。
?
常用的數據字典:
??? 一般的概況 : TAB , DICTIONARY , DICT_COLUMNS
??? 對象 : DBA_TABLES , DBA_INDEXES , DBA_TAB_COLUMNS , DBA_CONSTRAINTS --->user_ ,all_
??? 空間分配 : DBA_SEGMENTS , DBA_EXTENTS
??? 數據庫結構 : DBA_TABLESPACES , DBA_DATA_FILES
???
動態性能視圖 :
??? 是將內存里的數據或控制文件里的數據以表的形式展現出來,它們實際都是虛擬表,并不是真正的表
??? 只要數據庫在運行,就會不斷更新動態性能視圖
??? 一旦數據庫關閉或崩潰,則動態性能視圖里的數據就丟失,當數據庫重新啟動后,數據將會被更新
??? 所有的動態性能視圖名稱都存放在 v$fixed_table 里。這些動態性能視圖都是以 V_$ 開頭,屬主是 sys ??
??? oracle 為每個動態性能視圖都創建了同義詞,同義詞將中間的 “_” 去掉了,形成以 v$ 開頭
???
??? 在同義詞中查看 v$session
?????? SQL > SELECT owner , synonym_name , table_owner , table_name , db_link
?????? ? 2 ? FROM dba_synonyms WHERE synonym_name = 'V$SESSION' ;
?
?????? OWNER ????? SYNONYM_NAME TABLE_OWNER ? TABLE_NAME ?? DB_LINK
?????? -------------------- -------------------- ??? -------------------- ?? -------------------- ?? --------
?????? PUBLIC ?????? V$SESSION ??????????? SYS ?????? V_$SESSION ?
???
?????? SQL > SET LONG 15000
?????? SQL > SELECT text FROM dba_views WHERE view_name = 'V_$SESSION' ;
?
?????? TEXT
?????? --------------------------------------------------------------------------------
?????? select "SADDR" , "SID" , "SERIAL#" , "AUDSID" , "PADDR" , "USER#" , "USERNAME" , "COMMAND" , "OW
?????? NERID" , "TADDR" , "LOCKWAIT" , "STATUS" , "SERVER" , "SCHEMA#" , "SCHEMANAME" , "OSUSER" , "PRO
?????? CESS" , "MACHINE" , "TERMINAL" , "PROGRAM" , "TYPE" , "SQL_ADDRESS" , "SQL_HASH_VALUE" , "SQL_
?????? ID" , "SQL_CHILD_NUMBER" , "PREV_SQL_ADDR" , "PREV_HASH_VALUE" , "PREV_SQL_ID" , "PREV_CHI
?????? LD_NUMBER" , "MODULE" , "MODULE_HASH" , "ACTION" , "ACTION_HASH" , "CLIENT_INFO" , "FIXED_TA
?????? BLE_SEQUENCE" , "ROW_WAIT_OBJ#" , "ROW_WAIT_FILE#" , "ROW_WAIT_BLOCK#" , "ROW_WAIT_ROW#"
?????? , "LOGON_TIME" , "LAST_CALL_ET" , "PDML_ENABLED" , "FAILOVER_TYPE" , "FAILOVER_METHOD" , "F
?????? AILED_OVER" , "RESOURCE_CONSUMER_GROUP" , "PDML_STATUS" , "PDDL_STATUS" , "PQ_STATUS" , "C
?????? URRENT_QUEUE_DURATION" , "CLIENT_IDENTIFIER" , "BLOCKING_SESSION_STATUS" , "BLOCKING_I
?????? NSTANCE" , "BLOCKING_SESSION" , "SEQ#" , "EVENT#" , "EVENT" , "P1TEXT" , "P1" , "P1RAW" , "P2TEX
?????? T" , "P2" , "P2RAW" , "P3TEXT" , "P3" , "P3RAW" , "WAIT_CLASS_ID" , "WAIT_CLASS#" , "WAIT_CLASS"
?
?????? TEXT
?????? --------------------------------------------------------------------------------
?????? , "WAIT_TIME" , "SECONDS_IN_WAIT" , "STATE" , "SERVICE_NAME" , "SQL_TRACE" , "SQL_TRACE_WAI
?????? TS" , "SQL_TRACE_BINDS" from v$session
?
?????? SQL > SELECT view_definition FROM v$fixed_view_definition
?????? ? 2 ? WHERE view_name = 'V$SESSION' ;
?
?????? VIEW_DEFINITION
?????? ---------------------------------------------------------------------------------
?????? select ? SADDR , SID , SERIAL# , AUDSID , PADDR , USER# , USERNAME , COMMAND ,
?????? OWNERID , TADDR , LOCKWAIT , STATUS , SERVER , SCHEMA# , SCHEMANAME , OSUSER ,
?????? PROCESS , MACHINE , TERMINAL , PROGRAM , TYPE , SQL_ADDRESS , SQL_HASH_VALUE ,
?????? SQL_ID , SQL_CHILD_NUMBER , PREV_SQL_ADDR , PREV_HASH_VALUE , PREV_SQL_ID ,
?????? PREV_CHILD_NUMBER , MODULE , MODULE_HASH , ACTION , ACTION_HASH , CLIENT_INFO ,
?????? FIXED_TABLE_SEQUENCE , ROW_WAIT_OBJ# , ROW_WAIT_FILE# , ROW_WAIT_BLOCK# ,
?????? ROW_WAIT_ROW# , LOGON_TIME , LAST_CALL_ET , PDML_ENABLED , FAILOVER_TYPE ,
?????? FAILOVER_METHOD , FAILED_OVER , RESOURCE_CONSUMER_GROUP , PDML_STATUS ,
?????? PDDL_STATUS , PQ_STATUS , CURRENT_QUEUE_DURATION , CLIENT_IDENTIFIER ,
?????? BLOCKING_SESSION_STATUS , BLOCKING_INSTANCE , BLOCKING_SESSION , SEQ# ,
?????? EVENT# , EVENT , P1TEXT , P1 , P1RAW , P2TEXT , P2 , P2RAW , P3TEXT , P3 , P3RAW ,
?????? WAIT_CLASS_ID , WAIT_CLASS# , WAIT_CLASS , WAIT_TIME , SECONDS_IN_WAIT ,
?????? STATE , SERVICE_NAME , SQL_TRACE , SQL_TRACE_WAITS , SQL_TRACE_BINDS
?????? from GV$SESSION
?????? where inst_id = USERENV ( 'Instance' ) ???
?
常用的數據字典視圖、動態性能視圖:
??? dba_objects
??? dba_tables
??? dba_users
??? dba_tablespaces
???
??? V$CONTROLFILE 控制文件信息
??? V$DATABASE ??? 數據庫信息
??? V$DATAFILE ??? 數據文件信息
??? V$INSTANCE ??? 實例信息
??? V$PARAMETER ?????? 參數信息
??? V$SESSION ???? 會話信息
??? V$SGA ???????? SGA 信息
??? V$SGAINFO ???? SGA 信息
??? V$TABLESPACE ? 表空間信息
??? V$THREAD ?????
??? V$VERSION ????
??? V$option
?
??? v$parameter 顯示的是 session 級的參數,也就是當前 session 的參數信息。
??? 如果沒有使用 alter session 單獨設置當前 session 的參數值,那么默認和 system 級的參數應該是一樣的。
?
??? v$system_parameter 顯示的是 system 級的參數,保存的是使用 alter system 修改的值( scope = both 或者 scope = memory )。
?
??? 上面兩個都是當前已經生效的參數值。對于使用 spfile 的庫,也可以暫時只修改 spfile 中的
??? 值。 v$spparameter 顯示的就是保存在 spfile 中的參數值( scope = spfile )。
?
五、更多
?
? SQL 基礎 --> ROLLUP 與 CUBE 運算符實現數據匯總
? SQL 基礎 --> 層次化查詢 (START BY ... CONNECT BY PRIOR)
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
