11G Concept 第六章翻譯 Data Dictionary and Dynamic Performance Views(數據字典和動態性能試圖)

DataDictionary and Dynamic Performance Views(數據字典和動態性能試圖)

這一章介紹了每個數據庫的具有的只讀參考表(視圖)的最重要部分,統稱爲數據字典。這張還介紹了動態性能試圖,它們是一些在數據庫打開狀態時會不停更新的特殊視圖。

這章包含一下小節:

·Overview of the Data Dictionary(數據字典的概述)

·Overview of the Dynamic Performance Views(動態性能試圖的概述)

·Database Object Metadata(數據庫對象元數據)

Overview of the DataDictonary(數據字典的概述)

Oracle數據庫有一個很重要的部分,就是data dictionary(數據字典),它們是隻讀表提供數據庫管理時需要的元數據。數據字典們會包含如下內容:

·每個schema object的定義,包括每列的默認值,完整性約束信息

·分配給schema object的空間,以及它當前使用了多少空間

·Oracle數據庫的用戶的名字,授予用戶的權限和角色,以及和用戶相關的審計信息

數據字典,是每個數據庫數據管理的核心部分.舉個例子說明,數據庫執行了下列操作:

·通過訪問數據字典獲取用戶,schema object,存儲結構等的詳細信息.

·每次發出DDL語句時,會對數據字典造成修改.

因爲Oracle數據庫存儲數據字典中數據的方式,和其他數據一樣,都是存入到表中,所以用戶可以直接通過SQL來查這些數據。舉個例子:用戶可以執行SELECT語句去確定他們的權限,他們的schema中有什麼表,這些表有什麼列,列上是否有索引,等等。

 

Contents of the DataDIctionary(數據字典的內容)

數據字典由下面兩種對象組成:

·Base tables

  它們存儲着關於數據庫的信息。只有Oracle數據庫可以讀寫這些表。用戶很少直接訪問這些表,因爲表和其中數據的格式,都是按照一種絕密的方式存放的。

·Views

  這些視圖使用joins和WHERE語句來簡化信息,對基表的數據進行判斷,把有用的信息顯示出來(例如表名,用戶名)。這些視圖包含數據字典中的所有對象的描述和名稱。有一些視圖,所有的用戶都可以訪問,而另外的視圖則只爲管理員準備

基本來說,數據字典視圖根據集合分組。大多數情況下,一個集合由包含相似信息的三個視圖組成,這三個視圖通過不同的前綴來區分,如下面的表所示。查詢合適的視圖,你可以訪問只與你相關的信息:

Prefix

User Access

Contents

Notes

DBA_

數據庫管理員

所有對象

一些DBA_視圖擁有一些額外的列。專門供DBA使用

ALL_

所有用戶

用戶有權限訪問的

包括自己擁有的對象。這些視圖服從當前已經啓用的角色

USER_

所有用戶

用戶自設擁有的

USER_開頭的視圖,通常都沒有OWNER列。此列隱含爲對視圖發出查詢的用戶

 

不是所有的視圖集合都是三個成員。舉個例子:有數據字典DBA_LOCK視圖,但沒有ALL_LOCK視圖。

系統提供了一個DICTIONARY視圖包含了所有數據字典視圖的名稱和簡單描述。

下面就是查詢這個視圖的案例:

SQL> SELECT * FROM DICTIONARY

 2  ORDER BY TABLE_NAME;

 

TABLE_NAME                     COMMENTS

----------------------------------------------------------------------

ALL_ALL_TABLES                 Description of all object andrelational

                               tablesaccessible to the user

 

ALL_APPLY                      Details about each applyprocess that

                               dequeues fromthe queue visible to the

                               current user

.

.

Views with the Prefix DBA_(DBA_前綴的視圖)

DBA_前綴的視圖顯示了整個數據庫中所有相關的信息。DBA_ 視圖爲DBA所準備。

舉個例子,下面的查詢顯示了數據庫中所有object相關的信息:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE

FROM  DBA_OBJECTS

ORDER BY OWNER, OBJECT_NAME;

 

Viewswith the Prefix ALL_(ALL_前綴的視圖)

ALL_前綴的視圖通過用戶的視角去看整個數據庫。這些視圖返回的信息,都是用戶可以訪問的信息,通過public角色或者顯式授予的權限和角色,可以看到自己有權限看到的對象的信息。

舉個例子,下面的查詢將返回你所有訪問的所有對象的信息:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE

FROM  ALL_OBJECTS

ORDER BY OWNER, OBJECT_NAME;

因爲ALL_ 視圖 服從與 已經啓用的角色,查詢的結果則依賴於哪些角色已經啓用了,像下面的例子:

SQL> SET ROLE ALL;

 

Role set.

 

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

 

COUNT(*)

----------

68295

 

SQL> SET ROLE NONE;

 

Role set.

 

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

 

COUNT(*)

----------

53771

應用開發人員應該認識到在存儲過程中 使用ALL_ 視圖時 角色對其的影響,如果這裏角色默認不是激活狀態的話。

 

Viewswith the Prefix USER_(USER_ 開頭的視圖)

普通數據庫用戶可以對USER_ 開頭的視圖更感興趣,這些視圖:

·指的是在數據庫中用戶的私有環境,包括用戶創建的schema objects相關的元數據,用戶授出去的權限,等等。

·顯示ALL_ 視圖中屬於用戶自己的一部分

·擁有的和其他視圖一樣的列,除了OWNER列以外。

·可以爲了方便而創建一個簡短一些的PUBLIC 同義詞。

舉個例子,下面的查詢返回你schema中所有的objects

SELECT OBJECT_NAME, OBJECT_TYPE

FROM  USER_OBJECTS

ORDER BY OBJECT_NAME;

 

TheDUAL Table(DUAL表)

DUAL是個數據字典中的小表,Oracle數據庫和用戶自定義過程可以引用它來保證獲得一個正常的返回結果。當一個值只返回一次時,可以使用dual表,舉個例子:當前的日期和時間。所有的數據庫用戶都可以訪問DUAL。

DUAL表只有一列,列名爲DUMMY,也只有一行,值是X。

下面的例子是通過查詢DUAL做一次數學運算:

SQL> SELECT ((3*4)+5)/3 FROM DUAL;

 

((3*4)+5)/3

-----------

 5.66666667

 

Storageof the Data Dictionary(數據字典的存儲)

Oracle數據庫最先創建的就是數據字典的基表。數據庫中所有的數據字典視圖和基表都是存放在SYSTEM表空間。因爲在數據庫打開時,SYSTEM表空間永遠是online的,所以在數據庫打開時所有的數據字典永遠是可用的。

 

HowOracle Database Uses the Data Dictionary(數據庫怎樣使用數據字典)

Oracle數據庫用戶SYS擁有所有的數據字典基表以及視圖。數據字典基表中的數據 對於數據庫運行來說是必須存在的。因此只有Oracle數據庫可以寫或者更改數據字典中的信息。用戶永遠不要對SYS schema中的對象或數據進行修改,因爲這樣的操作會損壞數據完整性。

安全管理員必須保證對這個關鍵用戶(SYS)的控制。

  警告:更改或操作數據字典的數據會對數據庫運行造成永久的損害。

在數據庫運行期間,在用戶訪問一個schema objects時,Oracle數據庫會讀取數據字典來確認這些schema objects是否存在。Oracle數據庫同樣也會持續對數據字典進行更新用來反映數據庫中 結構,審計,授權以及數據的變化。

舉個例子,如果hr用戶創建一個名叫interns的表,那麼會有插入一些行到數據字典中來對應這個新表,列,段,區,以及hr在這個表上的權限。這些新的信息會在下次查詢數據字典中體現出來。

 

PublicSynonyms for Data Dictionary Views(數據字典視圖的公共同義詞)

Oracle數據庫給很多數據字典創建了公共同義詞,這樣用戶就可以很方便的訪問它們。安全管理員可以另外再增加公共同義詞。用戶給自己對象起名時要注意規避這些公共同義詞的名字。

 

Cachethe Data Dictionary for Fast Access(將數據字典緩存,方便快速訪問)

許多數據字典中的數據都在data dictionary cache中,因爲數據庫頻繁的查詢這些信息去驗證用戶們訪問的對象的狀態。parsing(解析)信息往往保存在caches中。COMMENTS列 說明了表們以及它的列們沒有緩存到dictionary cache,但是可能會緩存到database buffer cache。

 

OtherPrograms and the Data Dictionary

其他Oracle數據庫產品可以引用已經存在的數據字典,然後創建它們自己的數據字典表或視圖。應用開發人員在寫程序時用到數據字典,應該用它們的公共同義詞,而不是底層的表。

同義詞在不同版本很少發生改變。

 

Overview of the DynamicPerformance Views(動態性能試圖的概述)

在Oracle數據庫運行(從open到關閉),Oracle數據庫會維護一組虛表用來記錄當前數據庫的動作。因爲它們在數據庫打開後就不間斷的更新着 所以稱它們爲動態性能試圖。

這些視圖同樣會被稱之爲 V$ 視圖。包含的信息如下:

·系統和會話的參數(parameters)

·內存的使用和分配

·文件的狀態(包括RMAN備份文件)

·jobs和tasks的進度

·SQL執行情況

·統計信息和度量信息

動態性能有下面幾個主要用戶:

·Oracle Enterprise Manager 使用這些視圖獲取Oracle數據庫中的信息

·管理員可以使用這些視圖來性能監控和排錯。

 

Contentsof the Dynamic Performance Views(動態性能試圖的內容)

動態性能試圖有時候也被叫做固化(fixed)視圖,因爲它們不能被DBA更改或者刪除。DBA可以查詢,以及在這些表上創建視圖然後將這些視圖的訪問授權給其他用戶。

SYS擁有動態性能視圖,它們的名字都是以V_$開頭。這些表上有視圖,以及它們的公共同義詞前綴是V$。舉個例子,V$DATAFILE視圖包含了數據文件的信息。V$FIXED_TABLE視圖包含了所有動態性能表和視圖的信息。

幾乎所有的V$視圖都有一個對應的GV$視圖存在。在RAC中,查詢GV$視圖將返回所有數據庫instance中的V$視圖中的信息。

當你使用了Database Configuration Assistant(DBCA)創建一個數據庫,Oracle會自動創建數據字典。Oracle數據庫會自動運行catalog.sql腳本,這個腳本包含動態性能視圖的公共同義詞的定義。你必須運行catalog.sql來創建這些視圖和同義詞。

 

Storageof the Dynamic Performance Views(動態性能試圖的存儲)

動態性能試圖是基於根據數據庫內存結構創建的虛表。因此,它們沒有傳統的表存儲在數據庫。視圖的讀一致性沒有保證,因爲數據一直在動態更新中。

動態性能試圖不是真彪,數據依賴於數據庫和實例的狀態。舉個例子,當數據庫是NOMOUNT時你可以查詢V$INSTANCE和V$BGPROCESS,可是,在數據庫NOMOUNT時,你是不能查詢V$DATAFILE的。

 

Database Object Metadata(數據庫對象元數據)

DBMS_METADAT包提供了抽取數據庫objects完整定義的接口。這些定義可以表現爲XML或者SQL DDL語句。這裏提供了兩種類型的接口:爲程序控制提供了靈活,複雜的接口,以及爲臨時查詢提供的簡單接口。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章