資料說明和動態效能視觀表
每一個 Oracle 資料庫的一組唯讀參照表格與視觀表統稱為資料說明。動態效能視觀表是在資料庫開啟和使用中時持續更新的特殊視觀表。
-
資料說明簡介 Oracle 資料庫的重要部分就是其資料說明,這是一組唯讀的表格,提供資料庫的管理描述資料。
-
動態效能視觀表簡介 Oracle AI Database 會在作業中維護一組記錄目前資料庫活動的虛擬表格。
-
資料庫物件描述資料
DBMS_METADATA套裝程式和DBMS_DEVELOPER.GET_METADATA函數提供擷取資料庫物件完整定義的介面。
資料說明概要
Oracle 資料庫的重要部分就是其資料說明,此為一組唯讀的表格,提供資料庫的管理描述資料。
-
資料說明的用途:資料說明包含描述資料庫內容的描述資料。
-
資料說明元件:資料說明是由基礎表格和視觀表所組成。
-
資料字典的運作方式 Oracle AI Database 使用者帳戶
SYS擁有資料字典的所有基礎表格和使用者可存取的檢視。 -
資料說明儲存體:將 CDB 的描述資料儲存為整體的資料說明,只會儲存在系統表格空間中。
資料說明的用途
資料說明包含描述資料庫內容的描述資料。
例如,資料說明包含下列資訊:
-
資料庫中每個綱要物件的定義,包括資料欄的預設值和完整性限制條件資訊
-
綱要物件所配置與目前使用的空間量
-
Oracle AI Database 使用者的名稱、授予使用者的權限和角色,以及與使用者相關的稽核資訊
-
資料管理:資料說明是每個 Oracle 資料庫的資料管理核心部分。
-
CDB 中的資料說明區隔在 CDB 中,資料說明描述資料會分割到 CDB 根與 PDB 之間。從使用者和應用程式角度來看,CDB 中每個容器中的資料說明是分開的。
資料管理
資料說明是每個 Oracle 資料庫資料管理的核心部分。
例如,資料庫會執行下列動作:
-
存取資料說明以尋找使用者、綱要物件以及儲存體結構的相關資訊
-
每次發出 DDL 敘述句時修改資料說明
因為 Oracle AI Database 將資料說明資料儲存在表格中,就像其他資料一樣,使用者可以使用 SQL 查詢資料。例如,使用者可以執行 SELECT 敘述句來決定其權限,哪些表格存在於其綱要中、哪些資料欄位於這些表格中、是否在這些資料欄上建立索引等等。
另請參閱:
-
「綱要物件簡介」
CDB 中的資料說明區隔
在 CDB 中,資料說明描述資料是分割到 CDB 根與 PDB 之間。從使用者和應用程式角度來看,CDB 中每個容器中的資料說明是分開的。
在新建立的 CDB 中尚未包含使用者資料,CDB 根目錄中的資料說明只包含系統描述資料。例如,TAB$ 表格包含僅描述 Oracle 提供之表格的資料列,例如 TRIGGER$ 和 SERVICE$。下圖說明三個基礎資料說明表格,紅色長條表示系統的資料列。
圖 1:CDB 根目錄中的資料說明描述資料

假設您建立一個 PDB,然後建立一個包含此 PDB 中之 employees 和 departments 表格的 hr 綱要。PDB 中的資料說明包含一些描述 Oracle 提供之實體的資料列,以及其他描述使用者建立之實體的資料列。例如,PDB 說明中的 TAB$ 表格有一個 employees 表格的描述資料資料列,以及一個 departments 表格的資料列。
圖 2:CDB 中的資料說明架構

上圖顯示 PDB 中的資料說明包含 CDB 根中資料說明的指標。在內部,Oracle 提供的物件 (例如資料說明表格定義和 PL/SQL 套裝程式) 會在 CDB 根目錄中只代表一次。此架構實現了 CDB 內的兩個主要目標:
-
減少重複
例如,CDB 不會將
DBMS_ADVISORPL/SQL 套裝程式的原始程式碼儲存在每個 PDB 中,而是只將程式碼儲存在CDB$ROOT中,如此可節省磁碟空間。 -
輕鬆升級資料庫
如果每個 PDB 中都有一個資料說明表格的定義,而且如果新版本中的定義是要變更,則每個 PDB 都需要個別升級才能擷取變更。將表格定義只儲存在 CDB 根目錄中一次,即可排除此問題。
資料說明元件
資料說明是由基礎表格與視觀表所組成。
這些物件的定義如下:
-
基準表
這些儲存資料庫的相關資訊。只有 Oracle AI Database 應該寫入和讀取這些表格。使用者很少會直接存取基本表格,因為它們都是標準化的,而且大多數的資料都是以加密格式儲存的。
-
檢視
這些方法會使用結合和
WHERE子句,將基礎表格資料解碼為有用的資訊,例如使用者或表格名稱,以簡化資訊。視觀表包含資料說明中所有物件的名稱與描述。部分檢視可供所有資料庫使用者存取,而其他檢視則僅供管理員使用。
通常,資料說明視觀表會分組為多個集合。在許多情況下,集合由三個檢視組成,其中包含類似的資訊,並依其字首加以區別,如下表所示。藉由查詢適當的檢視,您只能存取與您相關的資訊。
表格 1 資料說明視觀表集
| 字首 | 使用者存取 | 內容 | 備註 |
|---|---|---|---|
DBA_ |
資料庫系統管理員 | 所有的物件 | 部分 DBA_ 視觀表具有其他資料欄,其中包含對管理員有用的資訊。 |
ALL_ |
所有使用者 | 使用者具有權限的物件 | 包括使用者擁有的物件。這些視觀表會遵守目前啟用的一組角色。 |
USER_ |
所有使用者 | 使用者擁有的物件 | 前置碼為 USER_ 的檢視通常會排除資料欄 OWNER。此資料欄隱含在 USER_ 視觀表中,作為發出查詢的使用者。 |
並非所有檢視集都有三個成員。例如,資料說明包含 DBA_LOCK 視觀表,但沒有 ALL_LOCK 視觀表。
系統提供的 DICTIONARY 視觀表包含所有資料說明視觀表的名稱與縮寫描述。此視觀表的下列查詢包括部分範例輸出:
SQL> SELECT * FROM DICTIONARY
2 ORDER BY TABLE_NAME;
TABLE_NAME COMMENTS
------------------------------ ----------------------------------------
ALL_ALL_TABLES Description of all object and relational
tables accessible to the user
ALL_APPLY Details about each apply process that
dequeues from the queue visible to the
current user
.
.
.
-
CDB 中的容器資料物件 容器資料物件是一個表格或視觀表,其中包含與多個容器或整個 CDB 有關的資料。
-
前置碼為 DBA_ 的檢視,前置碼為
DBA_的檢視會顯示整個資料庫中的所有相關資訊。DBA_檢視僅供管理員使用。 -
前置碼為 ALL_ 的檢視 (前置碼為
ALL_) 代表使用者對資料庫的整體觀點。 -
前置碼為 USER_ 的檢視:最有可能對一般資料庫使用者感興趣的檢視是前置碼為
USER_的檢視。 -
雙重表格
DUAL是資料說明中的小型表格,Oracle AI Database 和使用者撰寫的程式可參考這些表格來保證已知的結果。
另請參閱:
-
「檢視概要」
-
Oracle AI Database Reference,瞭解資料說明視觀表及其資料欄的完整清單
CDB 中的容器資料物件
容器資料物件是一個表格或視觀表,其中包含多個容器或整個 CDB 相關的資料。
容器資料權限支援多個 PDB 位於單一 CDB,但具有不同本機管理需求的一般需求。例如,如果應用程式 DBA 不想在本機管理,他們就可以將適當視觀表的容器資料權限授予通用使用者。在此情況下,CDB 管理員可以存取這些 PDB 的資料。相反的,不希望 CDB 管理員存取其資料的 PDB 管理員,也不會授予容器資料權限。
容器資料物件的範例為 Oracle 提供的視觀表,其名稱開頭為 V$ 和 CDB_。所有容器資料物件都有一個 CON_ID 資料欄。下表顯示此資料欄值的意義。
表格 2 貨櫃 ID 值
| 貨櫃 ID | 與下列項目相關的資料列: |
|---|---|
0 |
整個 CDB |
1 |
CDB$ROOT |
2 |
PDB$SEED |
| 所有其他 ID | 使用者建立的 PDB、應用程式根目錄或應用程式原始內建值 |
在 CDB 中,每個 DBA_ 視觀表都有對應的 CDB_ 視觀表。CDB_ 視觀表的擁有者是對應 DBA_ 視觀表的擁有者。下圖顯示說明視觀表之不同類別之間的關係:
圖 3:CDB 中的說明視觀表

當目前的容器為 PDB 時,使用者只能檢視目前 PDB 的資料說明資訊。不過,當目前的容器是 CDB 根時,通用使用者可以查詢 CDB_ 視觀表來查看 CDB 根目錄與具有此使用者權限之 PDB 的描述資料。注意:從 CDB 根查詢時,CDB_ 和 V$ 視觀表會隱含地將資料轉換成 AL32UTF8 字元集。如果字元集在轉換成 AL32UTF8 時需要更多位元組來代表字元,且檢視資料欄寬度無法容納特定 PDB 的資料,則可能會截斷資料。
下表說明 CDB_ 視觀表的查詢。每一列都描述在前一列的動作後所發生的動作。
表格 3 查詢 CDB_ 視觀表
| 作業 | 說明 |
|---|---|
|
|
|
SYSTEM 會查詢 CDB_USERS,以取得 CDB 根中的通用使用者數目。輸出指出 38 個通用使用者存在於 CDB 根中。 |
|
SYSTEM 會查詢 CDB_USERS 來判斷 CDB 中不同容器的數目。 |
|
SYSTEM 使用者現在會連線到名為 hrpdb 的 PDB。 |
|
SYSTEM 查詢 CDB_USERS。輸出指示目前的容器中有 48 個通用使用者和本機使用者,亦即 hrpdb。 |
|
SYSTEM 查詢 DBA_USERS。輸出與上一個查詢相同。由於 SYSTEM 未連線至 CDB 根,因此 DBA_USERS 視觀表會顯示與 CDB_USERS 相同的輸出。由於 DBA_USERS 只會顯示目前容器中的使用者,因此會顯示 48。 |
前置碼為 DBA_ 的檢視
前置碼為 DBA_ 的檢視會顯示整個資料庫中的所有相關資訊。DBA_ 檢視僅供管理員使用。
下列範例查詢顯示資料庫中所有物件的相關資訊:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;
另請參閱:Oracle AI Database Administrator's Guide,瞭解管理權限的詳細資訊
前置碼為 ALL_ 的檢視
前置碼為 ALL_ 的視觀表指的是使用者的整體資料庫觀點。
這些視觀表會傳回除了使用者擁有的綱要物件之外,使用者可透過公用或明確的權限與角色授權來存取之綱要物件的相關資訊。
例如,下列查詢會傳回您有權存取之所有物件的相關資訊:
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_ 檢視時 (預設不會啟用角色),應用程式開發人員應該認知角色的影響。
前置碼為 USER_ 的檢視
對一般資料庫使用者最可能感興趣的檢視是字首為 USER_ 的檢視。
這些檢視:
-
請參閱資料庫中使用者的專用環境,包括使用者建立之綱要物件的描述資料、使用者所進行的授權等等
-
只顯示與使用者相關的資料列,傳回
ALL_視觀表中資訊的子集 -
具有與其他檢視相同的資料欄,但隱含
OWNER資料欄除外 -
可以使用縮寫的
PUBLIC同義字以方便使用
例如,下列查詢會傳回綱要中包含的所有物件:
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
ORDER BY OBJECT_NAME;
DUAL 表格
DUAL 是資料說明中的小型表格,Oracle AI Database 和使用者撰寫的程式可參考這些表格來保證已知的結果。
當值必須只傳回一次 (例如,目前的日期與時間) 時,雙重表格就很有用。所有資料庫使用者都可以存取 DUAL。
DUAL 表格有一個名為 DUMMY 的資料欄,以及一個包含 X 值的資料列。下列範例會查詢 DUAL 以執行算術運算:
SQL> SELECT ((3*4)+5)/3 FROM DUAL;
((3*4)+5)/3
-----------
5.66666667
另請參閱:Oracle AI Database SQL Language Reference,瞭解有關 DUAL 表格的詳細資訊
資料說明的運作方式
Oracle AI Database 使用者帳戶 SYS 擁有資料字典的所有基礎表格和使用者可存取的檢視。
在資料庫作業期間,Oracle AI Database 會讀取資料說明,以確定綱要物件存在,且使用者具有適當的存取權。Oracle AI Database 會持續更新資料說明,以反映資料庫結構、稽核、授權和資料的變更。
例如,如果使用者 hr 建立名為 interns 的表格,則資料庫會將新資料列新增至資料說明,以反映 hr 在表格上的新表格、資料欄、區段、擴充區塊以及權限。下次查詢字典視觀表時,就會看到這個新資訊。
資料字典基礎表格中的資料是 Oracle AI Database 正常運作的必要資料。只有 Oracle AI Database 才應該寫入或變更資料字典資訊。Oracle AI Database 使用者不應該永久更改 SYS 綱要中包含的資料列或綱要物件,因為這類活動可能會影響資料完整性。負責安全的管理員必須嚴加控制此核心帳戶。
警告:更改或操控資料說明表格中的資料可能會永久產生影響資料庫作業。
-
描述資料與資料連結:CDB 使用內部連結機制來區隔資料說明資訊。
-
資料字典視觀表的公用同義字:Oracle AI Database 會為許多資料字典視觀表建立公用同義字,讓使用者能夠輕鬆存取它們。
-
資料說明快取:大部份的資料說明資訊都位於資料說明快取中,因為資料庫會持續要求資訊來驗證使用者存取權,並驗證綱要物件的狀態。
-
其他程式和資料字典 其他 Oracle AI Database 產品可以參考現有檢視,並自行建立其他資料字典表格或檢視。另請參閱: " SYS and SYSTEM Accounts "
中繼資料與資料連結
CDB 使用內部連結機制來分隔資料說明資訊。
具體而言,Oracle AI Database 使用下列自動管理的指標:
-
描述資料連結
Oracle AI Database 只會將說明物件的相關描述資料儲存在 CDB 根目錄中。例如,
OBJ$說明表格的資料欄定義 (在DBA_OBJECTS資料說明視觀表底下) 只存在於 CDB 根目錄中。如圖 9-2 所述,每個 PDB 中的OBJ$表格都使用稱為描述資料連結的內部機制,來指向儲存在 CDB 根目錄中的OBJ$定義。對應描述資料連結的資料位於其 PDB 中,而不是位於 CDB 根中。例如,如果您在
hrpdb中建立表格mytable,並在其中新增資料列,則資料列會儲存在 PDB 資料檔中,而不是儲存在 CDB 根資料檔中。PDB 中與 CDB 根中的資料說明視觀表包含不同的資料列。例如,描述
mytable的新資料列存在於hrpdb的OBJ$表格中,但不存在於 CDB 根的OBJ$表格中。因此,CDB 根目錄中的DBA_OBJECTS查詢和hrdpb中的DBA_OBJECTS顯示不同的結果。 -
資料連結
注意:資料連結在 Oracle Database 12c 版本 1 (12.1.0.2) 中稱為物件連結。
在某些情況下,Oracle AI Database 只會在應用程式容器的應用程式根目錄中儲存物件的資料 (不僅是中繼資料)。請考慮一家電子商務公司,其 PDB 在不同區域中。應用程式根目錄可能會儲存一個名為
postal_codes的表格,此表格會列出所有美國郵遞區號。此容器中的每個應用程式 PDB 都需要存取通用的postal_codes表格。應用程式 PDB 使用稱為資料連結的內部機制來參照應用程式根目錄中的物件。建立資料連結的應用程式 PDB 也會儲存資料連結描述。資料連結會繼承其參照之物件的資料類型。
-
延伸資料連結
延伸資料連結是資料連結與中繼資料連結的混合。就像資料連結一樣,延伸的資料連結會參考應用程式根目錄中的物件。不過,擴充資料連結也表示應用程式 PDB 中的對應物件。例如,應用程式 PDB 可能有延伸的資料連結表格,可儲存美國郵遞區號與加拿大郵遞區號。就像描述資料連結一樣,應用程式 PDB 中的物件會從應用程式根目錄中對應的物件繼承描述資料。
在應用程式根目錄中查詢時,延伸的資料連結表格只會從應用程式根目錄擷取資料列,例如僅從美國郵遞區號擷取資料列。不過,在應用程式 PDB 中查詢時,擴充的資料連結表格會同時從應用程式根目錄和應用程式 PDB 擷取資料列,例如美國郵遞區號與加拿大郵遞區號。
Oracle AI Database 會自動建立和管理 CDB$ROOT 的中繼資料和資料連結。使用者無法新增、修改或移除這些連結。
另請參閱:
-
Oracle AI Database Concepts,瞭解資料說明的簡介
資料說明視觀表的公用同義字
Oracle AI Database 為許多資料字典檢視建立公用同義字,讓使用者能夠輕鬆存取。
安全管理員也可以為全系統使用的綱要物件建立其他公用同義字。Oracle 建議針對專用綱要物件和公用同義字使用相同的名稱。
另請參閱:「同義字簡介」
資料字典快取
因為資料庫會持續要求資訊來驗證使用者存取權,並驗證綱要物件的狀態,所以大部份的資料說明資訊都位於資料說明快取中。
快取通常包含剖析資訊。描述表格及其資料欄的 COMMENTS 資料欄不會快取至說明快取中,但可以快取至資料庫緩衝區快取中。
另請參閱:「資料說明快取」
其他程式與資料字典
其他 Oracle AI Database 產品可以參考現有檢視,並自行建立其他資料字典表格或檢視。
Oracle 建議撰寫參照資料說明之程式的應用程式開發人員使用公用同義字,而非基礎表格。同義字在不同發行版本之間較不容易變更。
資料說明儲存體
將 CDB 的描述資料儲存為整體的資料說明,只會儲存在系統表格空間中。
儲存特定 PDB 之描述資料的資料說明會儲存在專用於此 PDB 的獨立表格空間中。PDB 表格空間包含應用程式後端的資料與描述資料。因此,每組資料說明表格都會儲存在自己的一組專用表格空間中。
另請參閱:SYSTEM 表格空間,瞭解有關 SYSTEM 表格空間的詳細資訊
動態效能視觀表概要
在整個作業中,Oracle AI Database 會維護一組記錄目前資料庫活動的虛擬表格。
這些視觀表是動態的,因為在資料庫開啟和使用中時會持續更新。視觀表有時稱為 V$ 視觀表,因為它們的名稱開頭為 V$。
動態效能視觀表包含下列資訊:
動態效能視觀表的主要用途如下:
-
Oracle Enterprise Manager 會使用檢視來取得資料庫的相關資訊。
-
管理員可以使用檢視來進行績效監控與除錯。
-
動態效能視觀表的內容:動態效能視觀表稱為固定視觀表,因為資料庫管理員無法更改或移除它們。不過,資料庫管理員可以在表格上查詢和建立視觀表,並將這些視觀表的存取權授與其他使用者。
-
動態效能視觀表的儲存體動態效能視觀表是以資料庫記憶體結構建立的虛擬表格為基礎。另請參閱:Oracle AI Database Reference,以取得動態效能檢視的完整清單
動態效能視觀表的內容
動態效能視觀表稱為固定視觀表,因為資料庫管理員無法更改或移除它們。不過,資料庫管理員可以在表格上查詢和建立視觀表,並將這些視觀表的存取權授與其他使用者。
SYS 擁有動態效能表格,其名稱開頭為 V_$。檢視會在這些表格上建立,然後以 V$ 開頭的公用同義字建立。例如,V$DATAFILE 視觀表包含資料檔的相關資訊。V$FIXED_TABLE 檢視包含所有動態效能表格與檢視的相關資訊。
幾乎每一個 V$ 視觀表都有對應的 GV$ 視觀表。在 Oracle Real Application Clusters (Oracle RAC) 中,查詢 GV$ 視觀表會從所有合格的資料庫執行處理擷取 V$ 視觀表資訊。
當您使用「資料庫組態輔助程式 (DBCA)」建立資料庫時,Oracle 會自動建立資料說明。Oracle AI Database 會自動執行 catalog.sql 指令碼,其中包含動態效能檢視的檢視與公用同義字定義。您必須執行 catalog.sql,才能建立這些檢視和同義字。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何手動執行
catalog.sql -
Oracle Real Application Clusters Administration and Deployment Guide,瞭解如何在 Oracle RAC 中使用效能視觀表
動態效能視觀表的儲存體
動態效能視觀表的基礎是虛擬表格,而虛擬表格是從資料庫記憶體結構建立的。
視觀表並不會儲存在資料庫中的傳統表格。不保證視觀表的讀取一致性,因為資料會動態更新。
因為動態效能視觀表不是 true 表格,所以資料會視資料庫和資料庫執行處理的狀態而定。例如,您可以在啟動但未掛載資料庫時查詢 V$INSTANCE 和 V$BGPROCESS。不過,在掛載資料庫之前,您無法查詢 V$DATAFILE。
另請參閱:「資料並行與一致性」
資料庫物件描述資料
DBMS_METADATA 套裝程式和 DBMS_DEVELOPER.GET_METADATA 函數提供擷取資料庫物件完整定義的介面。
使用 DBMS_METADATA 套裝程式時,可以用 XML 或 SQL DDL 來表示定義。Oracle AI Database 提供兩種介面樣式:用於程式設計控制的彈性複雜介面,以及用於特設查詢的簡化介面。
使用 DBMS_DEVELOPER.GET_METADATA 函數時,物件中繼資料會傳回為 JSON 文件。
另請參閱:Oracle AI Database PL/SQL Packages and Types Reference,瞭解有關 DBMS_METADATA 的詳細資訊。Oracle AI Database PL/SQL Packages and Types Reference,瞭解 DBMS_DEVELOPER.GET_METADATA 的詳細資訊。