Oracle 概念(Oracle 10.2) 第七章 數(shù)據(jù)字典7、數(shù)據(jù)字典這一章描述了每個(gè)Oracle數(shù)據(jù)庫(kù)核心引用的只讀表,它們的總稱(chēng)叫數(shù)據(jù)字典(data dictionary)。 這一章包含下列主題: u 數(shù)據(jù)字典介紹 u 如何使用數(shù)據(jù)字典 u 動(dòng)態(tài)性能表 u 數(shù)據(jù)庫(kù)對(duì)象元數(shù)據(jù) 數(shù)據(jù)字典介紹Oracle數(shù)據(jù)庫(kù)的最重要的一個(gè)部分就是它的數(shù)據(jù)字典,它們是一些只讀的表集合,提供數(shù)據(jù)庫(kù)的信息。一個(gè)數(shù)據(jù)字典包含: l 數(shù)據(jù)庫(kù)中所有模式對(duì)象的定義(表、視圖、索引、聚集、同義詞、序列、過(guò)程、函數(shù)、包、觸發(fā)器等等) l 模式對(duì)象被分配了多少空間,當(dāng)前使用了多少 l 列默認(rèn)值 l 完整性約束信息 l Oracle用戶(hù)名 l 每個(gè)用戶(hù)被賦予的權(quán)限和角色 l 審核信息,例如誰(shuí)有權(quán)限訪問(wèn)或者更新不同的模式對(duì)象 l 其他數(shù)據(jù)庫(kù)通用信息 和其他數(shù)據(jù)庫(kù)數(shù)據(jù)一樣,數(shù)據(jù)字典以表和視圖的方式存在。給定數(shù)據(jù)庫(kù)的所有數(shù)據(jù)字典表和視圖都保存在數(shù)據(jù)庫(kù)的SYSTEM表空間。 數(shù)據(jù)字典不僅僅是Oracle數(shù)據(jù)庫(kù)的核心部分,還是從最終用戶(hù)到應(yīng)用程序設(shè)計(jì)人員和數(shù)據(jù)庫(kù)管理員所有用戶(hù)的一個(gè)重要工具。使用SQL語(yǔ)句可以訪問(wèn)數(shù)據(jù)字典。因?yàn)閿?shù)據(jù)字典是只讀的,你只能對(duì)它的表或視圖執(zhí)行查詢(xún)(SELECT語(yǔ)句)。 數(shù)據(jù)字典結(jié)構(gòu)數(shù)據(jù)字典包含下列內(nèi)容: 基表 這些底層表保存相關(guān)數(shù)據(jù)庫(kù)的信息。只有Oracle可以讀寫(xiě)這些表。用戶(hù)很少直接訪問(wèn)它們,因?yàn)樗鼈兪菢?biāo)準(zhǔn)化的,而且大部分?jǐn)?shù)據(jù)都以加密的格式保存。 用戶(hù)可訪問(wèn)視圖 這些視圖匯總和顯示保存在數(shù)據(jù)字典基表中的信息。這些表將基表轉(zhuǎn)換為有用的信息,比如用戶(hù)或表名、使用連接和WHERE子句來(lái)簡(jiǎn)化信息。大部分用戶(hù)都只被賦予了這些視圖的訪問(wèn),而不是直接訪問(wèn)基表。 SYS,數(shù)據(jù)字典的擁有者 Oracle用戶(hù)SYS擁有所有的數(shù)據(jù)字典基表和用戶(hù)可訪問(wèn)表。沒(méi)有Oracle用戶(hù)能夠更新(UPDATE,DELET,INSERT)SYS模式包含的模式對(duì)象或任意行,因?yàn)槟菢拥牟僮鲿?huì)破壞數(shù)據(jù)完整性。安全管理員必須嚴(yán)格控制這個(gè)中心賬號(hào)。 注意:修改或者操作數(shù)據(jù)字典表的數(shù)據(jù)能夠?qū)?shù)據(jù)庫(kù)操作的影響是持久和有害的。 數(shù)據(jù)字典如何使用數(shù)據(jù)字典主要有三個(gè)用處: u Oracle訪問(wèn)數(shù)據(jù)字典來(lái)查找關(guān)于用戶(hù)、模式對(duì)象和存儲(chǔ)結(jié)構(gòu)的信息 u Oracle每次執(zhí)行一個(gè)數(shù)據(jù)定義語(yǔ)句(DDL)時(shí)都會(huì)修改數(shù)據(jù)字典 u 任何Oracle用戶(hù)都可以將數(shù)據(jù)字典做為數(shù)據(jù)庫(kù)的只讀參考信息 Oracle如何使用數(shù)據(jù)字典數(shù)據(jù)字典中基表的數(shù)據(jù)對(duì)Oracle運(yùn)行是至關(guān)重要的。因?yàn)橹挥蠴racle可以寫(xiě)入和修改數(shù)據(jù)字典信息。Oracle在數(shù)據(jù)庫(kù)升級(jí)或者降級(jí)時(shí)提供腳本來(lái)修改數(shù)據(jù)字典表。 注意:數(shù)據(jù)字典表的任何數(shù)據(jù)都不能被任何用戶(hù)修改和刪除。 數(shù)據(jù)庫(kù)操作過(guò)程中,Oracle讀取數(shù)據(jù)字典來(lái)確保模式對(duì)象存在和用戶(hù)有足夠的權(quán)限來(lái)訪問(wèn)它們。Oracle還不斷的更新數(shù)據(jù)字典來(lái)反映數(shù)據(jù)庫(kù)結(jié)構(gòu)、審核、賦權(quán)和數(shù)據(jù)的變化。 例如,如果用戶(hù)Kathy創(chuàng)建一個(gè)叫parts的表,然后數(shù)據(jù)字典中會(huì)增加新行來(lái)反映新的表、列、段、區(qū)段和Kathy在這表上擁有的權(quán)限。這些信息在下次查詢(xún)這個(gè)字典視圖時(shí)可以看到。 數(shù)據(jù)字典視圖的公共同義詞 Oracle對(duì)一些數(shù)據(jù)字典視圖創(chuàng)建了公共同義詞,所以用戶(hù)可以很方便的訪問(wèn)他們。安全管理員還可以對(duì)模式對(duì)象創(chuàng)建公共同義詞,這樣就可以在系統(tǒng)范圍內(nèi)使用。用戶(hù)要避免將他們自己的模式對(duì)象取名和公共同義詞的名字相同。 針對(duì)數(shù)據(jù)字典快速訪問(wèn)的Cache 大部分的數(shù)據(jù)字典信息都保存在SGA的字典Cache中,因?yàn)镺racle運(yùn)行過(guò)程中需要不停的訪問(wèn)數(shù)據(jù)字典來(lái)確認(rèn)用戶(hù)有權(quán)限訪問(wèn)模式對(duì)象和確定模式對(duì)象的狀態(tài)。保存在的內(nèi)存中的所有信息采用最近使用(LRU)算法。 解析信息也大部分保存在cache中。描述表和行的COMMENT行沒(méi)有緩存,除非他們被經(jīng)常訪問(wèn)。 其他的程序和數(shù)據(jù)字典 其他的Oracle產(chǎn)品可以引用已有的視圖和創(chuàng)建它們自己的數(shù)據(jù)字典表或者視圖。應(yīng)用開(kāi)發(fā)人員寫(xiě)的程序指向的數(shù)據(jù)字典應(yīng)該使用公共同義詞而不是底層表:因?yàn)樵谲浖姹局g同義詞基本保持不變。 如何使用數(shù)據(jù)字典 數(shù)據(jù)字典的視圖可以被所有數(shù)據(jù)庫(kù)用戶(hù)引用。使用SQL語(yǔ)句可以訪問(wèn)數(shù)據(jù)字典。某些視圖對(duì)于所有Oracle用戶(hù)可用,其他的只對(duì)數(shù)據(jù)庫(kù)管理員可用。 數(shù)據(jù)字典在數(shù)據(jù)庫(kù)打開(kāi)時(shí)總是可用。它們保存在總是在線的SYSTEM表空間上。 數(shù)據(jù)字典由一系列視圖組成。在多數(shù)情況下,一個(gè)由三個(gè)視圖組成的系列包含類(lèi)似的信息,相互之間用他們的前綴區(qū)分: 表7-1 數(shù)據(jù)字典視圖前綴
這一系列視圖的列基本類(lèi)似,除了: l USER前綴的視圖通常不包含OWNER列。這一列隱含在對(duì)這個(gè)USER視圖提交查詢(xún)的用戶(hù)上。 l 某些DBA視圖包含對(duì)管理員有用的一些額外列信息 USER前綴的視圖 典型數(shù)據(jù)庫(kù)用戶(hù)關(guān)心的視圖就是前綴為USER的視圖。這些視圖: u 指向用戶(hù)自己的私有數(shù)據(jù)庫(kù)環(huán)境,包含用戶(hù)創(chuàng)建的模式對(duì)象信息、用戶(hù)創(chuàng)建的權(quán)限等等。 u 只顯示用戶(hù)相關(guān)行 u 和其他視圖的列類(lèi)似,除了不包含隱含的OWNER列之外 u 返回ALL視圖的一部分信息 u 可以有簡(jiǎn)單的PUBLIC同義詞來(lái)方便使用 例如,下列查詢(xún)返回了你的模式中包含的所有對(duì)象: SELECT object_name,object_type FROM USER_OBJECTS; ALL前綴視圖 ALL前綴視圖指向用戶(hù)的數(shù)據(jù)庫(kù)整個(gè)透視圖。這個(gè)視圖除了返回用戶(hù)擁有的模式對(duì)象信息之外,還返回通過(guò)公開(kāi)的或者隱含的分配給這個(gè)用戶(hù)的權(quán)限和角色而能夠訪問(wèn)的模式對(duì)象信息。例如,下面的查詢(xún)返回你有權(quán)限訪問(wèn)的所有對(duì)象信息: SELECT owner,object_name,object_type FROM ALL_OBJECTS; DBA前綴視圖 DBA前綴視圖顯示整個(gè)數(shù)據(jù)庫(kù)的全景視圖。這些視圖不能創(chuàng)建同義詞,因?yàn)镈BA前綴視圖只能被數(shù)據(jù)庫(kù)管理員訪問(wèn)。因此,為查詢(xún)DBA前綴視圖,管理員必須在視圖名字前加上它的所有者SYS,如下: SELECT owner,object_name,object_type FROM SYS.DBA_OBJECTS; Oracle推薦你通過(guò)阻止用戶(hù)在數(shù)據(jù)字典上擁有系統(tǒng)訪問(wèn)權(quán)限來(lái)保護(hù)數(shù)據(jù)字典。如果你啟動(dòng)了數(shù)據(jù)字典保護(hù)(07_DICTIONARY_ACCESSIBILITY為false),然后訪問(wèn)SYS模式對(duì)象(數(shù)據(jù)字典)被限制為擁有SYS模式的用戶(hù)。這些用戶(hù)是SYS和以SYSDBA方式連接的用戶(hù)。(似乎不是這樣子,system也可以訪問(wèn),擁有DBA權(quán)限就可以,因?yàn)镈BA權(quán)限包含了SELECT ANY DICTIONARY權(quán)限) DUAL表DUAL表是數(shù)據(jù)字典中的一個(gè)小表,Oracle和用戶(hù)寫(xiě)的程序可以引用它來(lái)確保一個(gè)已知結(jié)果。這個(gè)表包含一列叫DUMMY,包含一行值為X。 動(dòng)態(tài)性能視圖在Oracle運(yùn)行期間,Oracle維護(hù)了一系列虛擬表來(lái)記錄當(dāng)前數(shù)據(jù)庫(kù)的活動(dòng)。這些表叫做動(dòng)態(tài)性能表。 動(dòng)態(tài)性能表不是真實(shí)的表,它們對(duì)于大多數(shù)用戶(hù)來(lái)說(shuō)不可訪問(wèn)。但是,數(shù)據(jù)庫(kù)管理員可以查詢(xún)、在表上創(chuàng)建視圖、分配這些視圖的權(quán)限給其他用戶(hù)。這些視圖有時(shí)候叫做固定視圖,因?yàn)樗鼈儾荒苡蓴?shù)據(jù)庫(kù)管理員修改和刪除。 SYS擁有動(dòng)態(tài)性能表;他們的名字以V_$開(kāi)始。在此基礎(chǔ)上創(chuàng)建視圖,然后再在視圖上創(chuàng)建公共同義詞。這些同義詞以V$開(kāi)始。例如,V$DATAFILE視圖包含數(shù)據(jù)庫(kù)數(shù)據(jù)文件的信息,V$FIXED_TABLE視圖包含數(shù)據(jù)庫(kù)中所有動(dòng)態(tài)性能表和視圖的信息。 數(shù)據(jù)庫(kù)對(duì)象元數(shù)據(jù)DBMS_METADATA包提供了抽取全部數(shù)據(jù)庫(kù)對(duì)象定義的接口。定義可以顯示為XML或者SQL DDL格式。提供兩種形式的接口: u 可編程控制的靈活精密接口 u 特殊查詢(xún)使用的簡(jiǎn)單接口 |
|
來(lái)自: 月影斜 > 《Oracle 10.2 概念》