CDB 和 PDB

多雲端用戶架構可讓 Oracle 資料庫被當作多雲端用戶容器資料庫 (CDB) 來運作。

從 Oracle Database 21c 開始,多重用戶容器資料庫是唯一支援的架構。在舊版中,Oracle 支援的非容器資料庫 (非 CDB)。

關於 CDB 中的容器

容器是多雲端用戶容器資料庫 (CDB) 中綱要、物件以及相關結構的集合。在 CDB 中,每個容器都有唯一的 ID 與名稱。

CDB 包括零個、一個或多個客戶建立的可插式資料庫 (PDB) 以及應用程式容器。PDB 是綱要、綱要物件以及非綱要物件的可攜式集合,這個集合會對 Oracle Net 從屬端顯示為個別的資料庫。應用程式容器是一個選擇性且由使用者建立的 CDB 元件,可儲存一或多個應用程式後端的資料與描述資料。CDB 包含零個或多個應用程式容器。

備註:「應用程式容器」會詳細說明應用程式容器。

下圖代表 CDB 中可能的容器。

圖 1:CDB 中的容器

admin112.png 圖解描述

每個 CDB 都有下列容器:

範例 2-1 沒有應用程式容器的 CDB

此範例顯示一個含有五個容器的簡單 CDB:系統容器 (整個 CDB)、CDB 根、PDB 種籽 (PDB$SEED) 以及兩個 PDB。每個 PDB 都有自己的專用應用程式。不同的 PDB 管理員可以管理每個 PDB。具有單一識別的 CDB 中已有通用使用者。在此範例中,通用使用者 SYS 可以管理 root 與每個 PDB。但在實體層次上,此 CDB 是由一或多個資料庫執行處理所管理,並且包含每個 PDB 與 CDB 本身的一組資料檔。

圖 2:沒有應用程式容器的 CDB

cncpt345.png 圖解描述

範例 2-2 含有應用程式容器的 CDB

在此變化中,CDB 包含一個名為 saas_sales_ac 的應用程式容器。在應用程式容器中,應用程式 PDB cust1_pdb 支援一位客戶的應用程式,而應用程式 PDB cust2_pdb 支援一位客戶的應用程式。CDB 也包含一個名為 hrpdb 的 PDB,該 PDB 支援一個 HR 應用程式,但該 PDB 不屬於應用程式容器。

圖 3:含有應用程式容器的 CDB

cncpt383.png 圖解描述

在此範例中,多個 DBA 可以管理 CDB 環境:

CDB 根和系統容器

CDB 根 (也稱為根 ) 是所有 PDB 所屬之綱要、綱要物件以及非綱要物件的集合。

每個 CDB 都有一個且只有一個名為 CDB$ROOT 的 root 容器。root 會儲存管理 PDB 所需的系統描述資料。所有 PDB 皆屬於 root。系統容器是 CDB 根目錄,以及屬於此根目錄的所有 PDB。

CDB 根不會儲存使用者資料。Oracle 建議您不要將一般物件新增至根目錄,或修改根目錄中的 Oracle 提供的綱要。不過,您可以為資料庫管理建立通用使用者與角色。具備必要權限的通用使用者可以在容器之間切換。

Oracle 建議使用 AL32UTF8 作為根字元集。具有不同字元集的 PDB 不需要轉換字元集,便可位於相同的 CDB 中。

範例 2-3 CDB 中的所有容器

下列由連線至 CDB 根的管理使用者所發出的查詢,會列出 CDB 中的所有容器 (包括原始內建值和 CDB 根),並依 CON_ID 排序。

COL NAME FORMAT A15
SELECT NAME, CON_ID, DBID, CON_UID, GUID
FROM   V$CONTAINERS ORDER BY CON_ID;

NAME          CON_ID       DBID    CON_UID GUID
------------- ------ ---------- ---------- --------------------------------
CDB$ROOT           1 1895287725          1 2003321EDD4F60D6E0534E40E40A41C5
PDB$SEED           2 2795386505 2795386505 200AC90679F07B55E05396C0E40A23FE
SAAS_SALES_AC      3 1239646423 1239646423 200B4CE0A8DC1D24E05396C0E40AF8EE
SALESPDB           4 3692549634 3692549634 200B4928319C1BCCE05396C0E40A2432
HRPDB              5 3784483090 3784483090 200B4928319D1BCCE05396C0E40A2432

另請參閱:「通用使用者帳戶」

PDB

PDB 是一組使用者建立的綱要、物件以及相關結構,能夠以邏輯化方式向從屬端應用程式顯示為不同的資料庫。

無論哪個使用者建立 PDB,每個 PDB 都是由 SYS 所擁有。SYS 是 CDB 中的通用使用者,這表示此使用者在 root 以及 CDB 內的每個現有和未來 PDB 中都具有相同的識別。

PDB 類型

除了 PDB$SEED (Oracle 提供的) 之外,所有 PDB 都是使用使用者建立的 CREATE PLUGGABLE DATABASE 敘述句。

您可以建立下列類型的 PDB。

標準 PDB

此類型的 PDB 結果來自執行 CREATE PLUGGABLE DATABASE,不將 PDB 指定為原始內建值、代理主機 PDB 或應用程式根目錄。其功能取決於您建立它的容器:

應用程式根目錄

請將應用程式根目錄視為應用程式特定的根容器。它可作為應用程式後端主要定義的儲存區域,包括一般資料和描述資料。若要建立應用程式根目錄,請連線至 CDB 根目錄,然後在 CREATE PLUGGABLE DATABASE 敘述句中指定 AS APPLICATION CONTAINER 子句。請參閱應用程式根目錄。

內建 PDB

與標準 PDB 不同,原始內建值 PDB 並非針對支援某個應用程式。而是,原始內建值是樣板以建立支援應用程式的 PDB。種子可以是下列其中一種:

代理 PDB

代理 PDB 是一個 PDB,使用資料庫連結來參照遠端 CDB 中的 PDB。當 PDB 被開啟時,當您在代理 PDB 中發出敘述句時,該敘述句會在參照的 PDB 中執行。

您必須在連線到 CDB 根或應用程式根目錄時建立代理主機 PDB。您可以更改或刪除代理主機 PDB,就像您可以更改標準 PDB 一樣。

PDB 的用途

對於應用程式,PDB 是獨立且功能完整的 Oracle 資料庫。您可以將 PDB 整合到單一 CDB 中以實現規模經濟,而 PDB 之間則維持隔離。

您可以使用 PDB 來達成下列特定目標:

另請參閱:

代理 PDB

代理 PDB 是指遠端 PDB,稱為參照的 PDB 。

雖然您在代理主機 (參照) PDB 中發出 SQL 敘述句,但敘述句會在參照的 PDB 中執行。就此而言,代理 PDB 與 Linux 中的符號連結檔案大致類似。

代理 PDB 可提供下列優點:

若要建立代理 PDB,請使用 AS PROXY FROM 子句執行 CREATE PLUGGABLE DATABASE,其中 FROM 指定參照的 PDB 名稱和資料庫連結。create 敘述句只會複製屬於 SYSTEM 和 SYSAUX 表格空間的資料檔。

範例 2-4 建立代理主機 PDB

此範例會連線到本機生產環境 CDB 中的容器 saas_sales_ac。sales_admin 通用使用者會建立一個名為 sales_sync_pdb 的代理 PDB。此應用程式 PDB 參照遠端開發 CDB 中名為 saas_sales_test_ac 的應用程式根目錄,此應用程式使用 cdb_dev_rem 資料庫連結來存取。在實際執行 CDB 的 saas_sales_ac 中進行應用程式升級時,升級會自動傳輸至遠端開發 CDB 中的應用程式根目錄 saas_sales_test_ac。

CONNECT sales_admin@saas_sales_ac
Password: ***********

CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;

PDB 的名稱

CDB 中的容器會共用相同的命名空間,這表示它們在此命名空間中必須具有唯一的名稱。

在同一個 CDB 中,下列容器的名稱不得衝突:

例如,如果同一個 CDB 包含應用程式容器 saas_sales_ac 和 saas_sales_test_ac,則兩個名稱為 cust1 的應用程式 PDB 不可同時存在於兩個容器中。命名空間規則也不會在 CDB 根目錄中建立名稱為 cust1pdb 的 PDB,而在應用程式根目錄中則是名稱為 cust1pdb 的 PDB。

PDB 和應用程式根容器的名稱必須與網路服務名稱遵循相同的規則。此外,因為 PDB 或應用程式根目錄的服務有其專屬名稱,所以其服務會透過特定監聽器公開的所有 CDB 中,容器名稱都必須是唯一的。使用者建立之容器名稱的第一個字元必須是字母,其餘的字元可以是文數字或底線 (_)。由於服務名稱不區分大小寫,因此容器名稱不區分大小寫,即使使用分隔的識別碼指定,也會是大寫。

另請參閱:Oracle AI Database Net Services Reference,瞭解服務名稱的規則

PDB 之間的資料庫連結

連線到一個 PDB 的使用者預設必須使用資料庫連結來存取不同 PDB 中的物件。

圖 4:PDB 之間的資料庫連結

cncpt384.png 圖解描述

規則的例外情況包括:

建立代理主機 PDB 時,您必須在 CREATE PLUGGABLE DATABASE ... AS PROXY 敘述句的 FROM 子句中指定資料庫連結名稱。如果代理 PDB 和參照的 PDB 位於不同的 CDB 中,則資料庫連結必須定義在將包含代理 PDB 的 CDB 根中。資料庫連結必須連線到遠端參照的 PDB 或遠端 CDB 的 CDB 根。

另請參閱:「通用與本機物件」