oracle資料字典
說起字典,下面讓我來打個比方。我們讀書寫字,靠的是什嗎?你會說:字!那我問你,你所用的字又是什麼呢?!這時,你只可能把字典(新華字典、康熙字典、說文解字等等)裡的說法拿出來解釋了。再進一步,你能隨隨便便就自己寫一本字典,把每個字重新定義一下,就去用嗎?顯然不可能,要是那樣,世界早亂套了!有意思的是:即使是字典關於每個字的解釋還是用其他的字來解釋的,這樣迴圈解釋下去.....????????這其實只是表現形式的一致,內容上絕不會死迴圈的,那就是鐵定規定一些最最基礎的語義不可再分的字為基礎字!其他的不過是多種說法寫法,不斷被解釋的新字而已!
就是這樣:資料庫裡的資料字典就是就是解釋資料庫物件的對象,所以資料字典也叫中繼資料-metadata。他們不可以被使用者增、刪、改,只能查看使用。資料字典也有一些不可再分的字典基礎資料表,其他的主要是視圖、視圖的視圖、同義字而已,而我們能用的只能是這些視圖、視圖的視圖、同義字。你問了“oracle為什麼不讓咱看基礎資料表啊”?讓你看,你看的懂嗎?話又說回來,真讓你看懂了,oracle不早關門了?! 這就是曆史、相容性、效率、管理、安全、習慣等問題了。
為什麼oracle提供了這麼多的資料字典啊?你說是如果你蓋房子了,是用現成的磚、水泥、鋼筋等等建築材料好啊,還是先從一個老房子上拆零件好啊?但有時候有整合度較高的半成品也是很好的,可這個東西是沒有標準去把握的,只好仁者見仁、智者見智了。oracle也是不斷順應民意不斷改變的!
oracle的資料字典主要從兩個角度去劃分的
- static 和 dynamic 指的是字典資訊內容是否即時更新,是否可以階段重現或者是否可控。static主要適用於使用者模式對象,在資料庫open狀態下使用;dynamic主要是資料庫執行個體提供的記憶體結構資訊,他們甚至沒有database中儲存的表結構,完全是oracle執行個體提供的記憶體表,而且可用的字典表在執行個體啟動的不同階段都是不同的。由此也引出了兩者的可訪問的方式有些不同:dynamic字典只能使用簡單的 select where,要使用其他的東西,必須先轉儲位實體表;而 static 則沒有這些限制!
- privileges :指許可權、安全管理角度。 其中,static 的 dba_、all_、user_ 指的是從使用者ID安全形度定義了內容訪問功能,由此引出了大量的資料字典視圖、同義字;類似的dynamic的v_$、v$、gv_$、gv$從執行個體ID安全形度定義了內容訪問功能,也引出了大量的資料字典視圖、同義字!
oracle資料字典的衍生關係
oracle程式fixed 表-->fixed 視圖:如v$instance ----該層的fixed 表是對使用者訪問關閉的
oracle: x$表-->gv$視圖-->v$視圖 --該層是對使用者訪問關閉的
| |
gv_$視圖 v_$視圖
| |
gv$同義字 v$同義字
oracle: *$基礎資料表-->dba_*視圖-->all_*視圖-->user視圖 ----該層的表是對使用者訪問關閉的
all_*視圖、user視圖實際上都是從*$基礎資料表定義而來的,邏輯範圍上如上
在進行資料訪問時,Oracle 訪問 VIEW優先,然後是同義字。
你絕對用的到的基礎資料字典
- dictionary 【dict】 --列出所有的資料字典,oracle10g裡有 1378 個!
- dict_columns --列出所有的資料字典表列
- v$fixed_table --列出所有的dynamic 表、視圖,此處的 fixed 應理解為oracle內建的、固有的
- v$fixed_view_definition --列出所有dynamic視圖的原始定義,此處的 fixed 應理解為oracle內建的、固有的
- v$process --oracle進程資訊,addr
- v$session --oracle的會話資訊,paddr對應v$process的addr,process指client的os的processid,*_sql_*,row_wait_row#,event等待事件描述,sql_trace
- v$sql --oracle緩衝的sql
- v$sgainfo、v$sgastat、v$pgastat --sga的固定和動態組成情況
- v$sysem_parameter --oracle系統所有的初始化參數,不包含隱藏參數
- v$sysem_event --oracle執行個體的系統等等事件統計
- v$thread --當前lgwr線程資訊,從中可以獲得很多redo相關的資訊。sequence#-1
- v$version、v$option --oracle的版本、組件情況
- v$open_cursor --oracle開啟的所有cursor情況
- v$object_dependency --oracle系統運行時所有object的依賴情況
- v$bgprocess --oracle所有可能的後台進程,已經是否運行等情況
- v$datafile、v$datafile_header --oracle的datafile資訊
- v$log、v$logfile、v$log_history --oracle的online redo 的資訊及歸檔曆史資訊
其他常見的oracle資料字典(不斷收集整理中......)
- v$session_event、v$session_wait、v$session_wait_class、v$session_wait_history --當前會話等待事件、匯總、曆史統計
- v$sql、v$sql_plan、v$sql_trace、v$sql_text、v$sql_cursor、v$sqlstats、v$sqlarea --sql緩衝中的sql文本
- v$process_memory --oracle進程的記憶體使用量詳細資料
- v$system_wait_class --oracle系統等待事件匯總
- v$database
- v$instance
- v$tablespace --從控制檔案中獲得的關於資料表空間的基本資料
- v$thread --lgwr線程資訊,從中可以獲得很多redo相關的資訊