數據字典與動態(tài)視圖_第1頁
數據字典與動態(tài)視圖_第2頁
數據字典與動態(tài)視圖_第3頁
數據字典與動態(tài)視圖_第4頁
數據字典與動態(tài)視圖_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據字典與動態(tài)視圖數據字典數據字典是Oracle 數據庫重要的組成部分,它用于提供數據庫的相關系統(tǒng)信息。數據字典的維護和修改是由系統(tǒng)自動完成的,而用戶只能執(zhí)行SELECT語句查詢系統(tǒng)信息。p數據庫是數據的集合,數據庫維護和管理用戶的數據,那么這些用戶數據表都存在哪里,用戶的信息是怎樣的,存儲這些用戶的數據的路徑在哪里,這些信息不屬于用戶的信息,卻是數據庫維護和管理用戶數據的核心,這些信息就是數據庫的數據字典來維護的,數據庫的數據字典就匯集了這些數據庫運行所需要的基礎信息 數據字典pOracle RDBMS使用數據字典記錄和管理對象信息和安全信息等,用戶和數據庫系統(tǒng)管理員可以通過數據字典來獲取數

2、據庫相關信息。p數據字典是數據庫的核心,通過數據字典,oracle數據庫基本上可以實現自解釋。p數據字典是只讀的,通常不建議對任何數據字典表中的任何信息進行手工更新或改動,對于數據字典的修改很容易就會導致數據庫紊亂,造成無法恢復的后果,而且oracle公司不對此類操作帶來的后果負責。模式(Schema)p模式是用戶所擁有對象的集合用戶所擁有對象的集合,在Oracle數據庫中,用戶與模式是一一對應的關系,并且二者名稱相同。模式SYSTEM模式stu_00用戶SYSTEM用戶stu_00數據字典包括以下內容p所有數據庫Schema對象的定義(表、視圖、索引、聚簇、同義詞、序列、過程、函數、包、觸發(fā)

3、器等);p數據庫的空間分配和使用情況;p字段的缺省值;p完整性約束信息;pOracle用戶名稱、角色、權限等信息;p審計信息;p其他數據庫信息。數據字典p所有數據字典都屬于SYS模式,并且存放在SYSTEM表空間中。p數據字典由基表(內部RDBMS(X$)表和數據字典表)和視圖(動態(tài)性能(V$)視圖和數據字典視圖)兩部分構成。p其中基表存放數據庫的基本信息,普通用戶無法讀寫。p數據字典視圖存放基表解碼后的信息,用戶可以通過它查詢系統(tǒng)信息。內部RDBMS(X$)表pX$表是oracle數據庫的核心部分,這些表用于跟蹤內部數據庫信息,維持數據庫的正常運行。X$表是加密命名的,而且oracle不作文

4、檔說明,這部分知識是oracle公司的技術機密,oracle通過這些X$表建立起其他大量視圖,提供用戶查詢管理數據庫之用。但是由于X$表記錄了大量的有用信息,所以也不停地被全球的DBA不懈地探索著,最為人所熟知的有X$BH、 X$KSMKP等。pX$表是oracle數據庫的運行基礎,在數據庫啟動時由oracle應用程序動態(tài)創(chuàng)建。這部分表對數據庫來說至關重要,所以oracle不允許SYSDBA之外的用戶直接訪問,顯示授權不被允許。數據字典表p數據字典表(Data Dictionary Table)用以存儲表、索引、約束以及其他數據庫結構的信息。這些對象通常以“$”結尾(如tab$、obj$、ts

5、$等),在創(chuàng)建數據庫的時候通過運行sql.bsq腳本來創(chuàng)建。psql.bsq是非常重要的一個文件,其中包含了數據字典表的定義及注釋說明。p該文件位于.rdbmsadmin目錄下。建立數據字典視圖p建立數據字典基表,運行腳本:SQL%oracle_home%rdbmsadminsql.bsq;p建立數據字典視圖,運行腳本:SQL%oracle_home%rdbmsadmincatalog.bsq;數據字典視圖分類1.以ALL_開頭的數據字典視圖2.以USER_開頭的數據字典視圖3.以DBA_開頭的數據字典視圖p在Oracle中,用戶與模式一一對應,用戶可以訪問其模式的所有對象,如果用戶要訪問其他

6、模式的對象,必須要有相應的對象特權。模式SYSTEM模式stu_00用戶stu_00p數據字典表的用戶都是sys,存在在system這個表空間里,表名都用“$”結尾,為了便于用戶對數據字典表的查詢,這樣的名字是不利于我們記憶的,所以Oracle對這些數據字典都分別建立了用戶視圖,不僅換了更容易接受的名字,還隱藏了數據字典表表之間的關系,讓我們通過視圖來進行查詢,簡單而形象,Oracle針對這些對象的范圍,分別把視圖命名為DBA_XXXX, ALL_XXXX和USER_XXXX 各類數據視圖比較pUSER_數據字典視圖:顯示當前模式的所有對象信息。 (user_objects)pALL_數據字典

7、視圖:顯示用戶可訪問的所有對象信息。(all_objects)pDBA_數據字典視圖:顯示整個數據庫范圍內的系統(tǒng)信息。(dba_objects)以USER_開頭的數據字典視圖pUSER_數據字典只顯示當前模式的當前模式的詳細信息。pSELECT object_name FROM user_objects WHERE object_type = TABLE;以ALL_開頭的數據字典視圖pALL_數據字典視圖可用于查詢用戶可訪問的用戶可訪問的所有對象信息。pSELECT owner, object_name FROM all_objects WHERE object_type = TABLE;以D

8、BA_開頭的數據字典視圖pDBA_數據字典視圖用于顯示整個數據庫范圍內的系統(tǒng)信息。(要求用戶有DBA角色或SELECT ANY TABLE系統(tǒng)權限)pSELECT owner, object_name FROM dba_objects where object_type = TABLE;p這些視圖是由sys用戶創(chuàng)建的,所以使用需要加上sys ,顯然這個太麻煩了,所以Oracle為每個數據字典表的視圖頭建立了同名字的公共同義詞(public synonyms). 這樣簡單的處理就省去了寫sys.這個麻煩事。 pOracle為了便于匯總數據字典表的信息,把所有的數據字典都匯集到dictionary

9、表里了,通過對這個表的查詢,我們可以很方便的找到數據庫提供的數據字典。 SQL desc dictionary; Name Type Nullable Default Comments - - - - - TABLE_NAME VARCHAR2(30) Y Name of the object COMMENTS VARCHAR2(4000) Y Text comment on the object p上面我們了解了這里數據字典表的內部機理,我們以ALL_TABLES這個為例,看看她是怎樣的一回事我們可以先看看dictionary表里確實有這樣一個數據字典 SQL select * from d

10、ictionary a where a.table_name = ALL_TABLES; TABLE_NAME COMMENTS - - ALL_TABLES Description of relational tables accessible to the p這里ALL_TABLES是一個同義詞,查出關聯對象 SQL select * from dba_synonyms a where a.synonym_name = ALL_TABLES; OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME - - - - PUBLIC ALL_TABLES SYS AL

11、L_TABLES p根據上面我們提到的,這個的同義詞指向一個view,我們查查view的定義 SQL select * from dba_views a where a.view_name = ALL_TABLES; OWNER VIEW_NAME TEXT_LENGTH TEXT - - - - SYS ALL_TABLES 4173 select , ,d. from sys.user$ u, sys.ts$ ts, s ys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,sys.obj$ cx, sys.user$ cu

12、. p這里就可以看到這個all_tables查詢了 sys.user$ u, sys.ts$ ts, s ys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,sys.obj$ cx, sys.user$ cu 這樣一系列表,有興趣的朋友看看,這里是不是All的這個邏輯呀,也就是這個用戶可以看到的所有的表。 動態(tài)性能視圖p動態(tài)性能視圖用于記錄當前數據庫的活動信息,他們是由Oracle Server自動維護和修改的。當啟動Oracle Server時,系統(tǒng)會自動建立動態(tài)性能視圖,而當停止Oracle Server時,系統(tǒng)會自動釋放動態(tài)性能視圖。動態(tài)性能視圖

13、p動態(tài)性能(V$)視圖(Dynamic Performance View)記錄了數據庫運行時信息和統(tǒng)計數據,大部分動態(tài)性能視圖被實時更新以反映數據庫當前狀態(tài)。pOracle通過動態(tài)性能視圖將oracle數據庫的狀態(tài)展示出來,提供給用戶和數據庫管理員,oracle對V$視圖給出了詳細的文檔說明供開發(fā)管理人員參考,是研究和管理數據庫的主要依據。pOracle包含了一些潛在的由系統(tǒng)管理員如SYS維護的表和視圖,由于當數據庫運行的時候它們會不斷進行更新,所以稱它們?yōu)閯討B(tài)數據字典(或者是動態(tài)性能視圖)。這些視圖提供了關于內存和磁盤的運行情況,所以我們只能對其進行只讀訪問而不能修改它們。p動態(tài)信息視圖也是

14、數據字典的一種,提供信息維護的作用。數據庫運行的一些信息對于我們來說也是非常有幫助的,也更為有意義。比如,有多少個session,有什么樣的process在實例里運行,系統(tǒng)的狀態(tài)現在是如何的,可以看到這些信息都是實例運行時的動態(tài)信息,不是固定的信息,不同的時刻可能信息也是不一樣的, Oracle為了進行維護的時候能夠得知這些實例的這些類似狀態(tài)一樣的動態(tài)的信息,提供了動態(tài)性能視圖,通過這個動態(tài)性能視圖我們可以了解到實例內部的一些動態(tài)變化的狀態(tài)信息。 GV$和V$視圖p在數據庫啟動時,oracle動態(tài)創(chuàng)建X$表,在此基礎之上,oracle創(chuàng)建了GV$和V$視圖。從oralce 8開始, GV$視圖

15、開始被引入,其含義為Global V$。除了一些特例以外,每個V$視圖都有一個對應的GV$視圖存在。pGV$視圖的產生是為了滿足OPS環(huán)境的需要,在OPS環(huán)境中,查詢GV$視圖返回所有實例信息,而每個V$視圖是基于GV$視圖,增加了INST_ID列的where條件限制建立,只包含當前連接實例信息。p注意,每個V$視圖都包含類似語句:pWhere inst_id=USERENV(Instance)用于限制返回當前實例信息。動態(tài)性能視圖其他視圖pOracle提供了一些特殊視圖用以記錄其他視圖的創(chuàng)建方式。V$fixed_view_definition就是其中之一。例如查看GV$FIXED_TABLE

16、和V$FIXED_TABLE,了解一下GV$和V$視圖的結構及創(chuàng)建方式:pSQLselect view_definition from V$fixed_view_definition where view_name=V$FIXED_TABLE;pSQLselect view_definition from V$fixed_view_definition where view_name=GV$FIXED_TABLE;GV$和V$視圖p通過上面的命令執(zhí)行結果,得出如下結論:pGV$視圖基于X$表創(chuàng)建,然后V$視圖基于GV$視圖創(chuàng)建。pGV$視圖和V$視圖是在數據庫創(chuàng)建過程中建立起來的,內置于數據庫

17、中,oracle通過V$fixed_view_definition視圖為我們展現這些定義。GV_$視圖和V_$視圖p在GV$視圖和V$視圖之后,oracle建立了GV_$視圖和V_$視圖,隨后為這些視圖建立了公用同義詞。這些工作都是通過catalog.sql腳本(該腳本位于./rdbms/admin/目錄下)實現的。p第一個視圖V_$和GV_$視圖基于V$和GV$視圖首先被創(chuàng)建,然后基于V_$和GV_$視圖的同義詞被創(chuàng)建。GV_$視圖和V_$視圖p通過V_$視圖,oracle把V$視圖和普通用戶隔離,V_$視圖的權限可以授予其他用戶,而oracle不允許任何對于V$視圖的直接授權。p對于內部X

18、$表及V$視圖的限制,oracle是通過軟件機制實現的,而并非通過數據庫權限控制的。p所以,實際上通常大部分用戶訪問的V$對象,并不是視圖,而是指向V_$視圖的同義詞;而V_$視圖是基于真正的V$視圖(這個視圖是基于X$表建立的)創(chuàng)建的。p在進行數據訪問時,oracle訪問VIEW優(yōu)先,然后是同義詞。說明p數據字典視圖是在X$表和數據字典表之上創(chuàng)建的視圖。pOracle的X$表信息可以從v$fixed_table查找。pX$表建立之后,基于X$表的GV$和V$視圖得以創(chuàng)建。這部分視圖也可以通過查詢V$FIXED_TABLE得到。最后的驗證p最后通過V$parameter視圖來追蹤一下數據庫的架

19、構。p同樣V$parameter視圖是由GV$parameter視圖創(chuàng)建的,GV$parameter視圖則是由X$創(chuàng)建的。pGV$parameter視圖來源于x$ksppi和x$ksppcv兩個x$表。 x$ksppi和x$ksppcv基本上包含所有數據庫參數,V$parameter展現的是不包含“_”開頭的參數。以“_”開頭的參數通常稱為隱含參數,一般不為大家所知,不建議修改??偨Y一下SQL語句中oracle對于對象名的解析順序pOracle首先查看在發(fā)出命令的用戶模式中是否存在表或視圖。p如果表或視圖不存在,oracle檢查私有同義詞是否存在。p如果私有同義詞存在,將使用這個同義詞所引用的對象。p如果私有同義詞不存在,檢查同名的公共同義詞是否存在。p如果公共同義詞存在,將使用這個同義詞所引用的對象。p如果公共同義詞不存在,oracle返回消息”O(jiān)RA-00942 table or view

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論