Oracle多租戶管理員指南-體系結構介紹01

chenoracle發表於2020-03-24

Oracle® Multitenant   Administrator’s Guide

Part I Multitenant Architecture

1 Introduction to the Multitenant Architecture

2 Overview of the Multitenant Architecture

 

Part I   多租戶體系結構

多租戶體系結構使Oracle 資料庫能夠充當多租戶容器資料庫( CDB )。

1 介紹多租戶體系結構

熟悉Oracle Multitenant 選項。

1.1 Oracle Database Release 20c Oracle Multitenant Administrator 's Guide 中的變化,以下是該版本的新特性。

•採用非 CDB 作為 PDB ,使用重放升級

Oracle 資料庫 20cdb 中採用以前版本的非 CDB 作為 PDB 時, PDB 正常開啟時會自動升級。重播升級功能自動捕獲必要的 CREATE REPLACE 語句,僅重播已更改物件的語句,並轉換資料字典。重播機制與應用程式同步中使用的機制相同。

請參閱《Oracle 資料庫升級指南》,瞭解如何使用重播升級將非 CDB 用作 PDB

PDB 開啟時重播升級

PDB CDB 根之間發生版本不匹配時,開啟 PDB 會自動升級它。 PDB Open optimization 上的重播升級是預設的,它通過重新執行儲存在捕獲表中的語句來避免手動的錯誤糾正。該機制與應用程式同步中使用的機制相同。 Oracle 資料庫 20c 在以下場景中使用 PDB Open 上的重播升級 :

- 在以前的版本中,你插入了一個從 CDB 中拔出來的 PDB 。當 PDB 開啟時,資料庫自動執行重播升級。

- 以前版本的 CDB 升級到 Oracle 資料庫 20c ,但是 CDB 中的 PDB 沒有升級。如果您在沒有開啟升級選項的情況下開啟 PDB ,那麼 CDB 將自動執行 PDB 的重播升級。

•與 Oracle 資料庫的名稱空間整合

DbNest pdb 提供作業系統資源隔離和管理、檔案系統隔離和安全計算。當啟用 DbNest 時,資料庫例項的設定發生在一個巢狀中,該巢狀是一種獨立的分層容器。資料庫例項系統資源與其他例項隔離。檔案和目錄只能由配置它們的 CDB PDB 訪問。

Oracle Cloud 中透明的應用程式連續性

在計劃的維護期間,資料庫可能會決定會話不太可能在“排出”視窗中排出。在這種情況下,資料庫呼叫應用程式連續性並自動故障轉移會話。

cpu_min_count 初始化引數增強

CPU_MIN_COUNT 表示 PDB CDB 所需的最小 CPU 執行緒數。 CPU 資源管理器使用 PDB 級的 CPU_MIN_COUNT 值來設定資源計劃中的 PDB 共享。對於每個 PDB, CPU 資源管理器確保對 CPU 的公平訪問,保證最小的 CPU ,並強制執行最大的 CPU

job_queue_processes 初始化引數增強

所有容器的JOB_QUEUE_PROCESSES 的預設值已經從 4000 更改為一個自動值,該值取決於會話和 CPU 執行緒的數量。

max_idle_blocker_time 初始化引數增強

MAX_IDLE_BLOCKER_TIME 設定持有所需資源的會話在候選終止之前空閒的分鐘數。

•應用程式同步的擴充套件語法

ALTER PLUGGABLE DATABASE APPLICATION ... SYNC 語句接受多個應用程式名稱。例如,在應用程式 PDB 中釋出的單個語句可以同步 apexapp ordsapp ,或者同步 ordsapp 之外的所有應用程式。

當應用程式彼此依賴時,為了保證函式的正確性,需要在一條語句中對它們進行同步。假設您將apexapp 1.0 升級到 2.0 ,將 ordsapp 1.0 升級到 2.0 ,然後將 apexapp 升級到 3.0 。語句改變可插入的資料庫應用程式 apexapp, ordsapp 同步按順序回放升級,將 apexapp 升級到 2.0,ordsapp 升級到 2.0 ,然後 apexapp 升級到 3.0 。在單獨的語句中同步 apexapp ordsapp 並不保留升級順序。

1.2 資料庫與例項

Oracle 資料庫伺服器由一個資料庫和至少一個資料庫例項組成,通常簡稱為一個例項。

因為一個例項和一個資料庫是如此緊密地聯絡在一起,所以Oracle 資料庫這個術語有時同時指的是例項和資料庫。最嚴格地說,這些術語有下列含義 :

•資料庫

資料庫是一組位於磁碟上的檔案,用於儲存使用者資料。這些資料檔案可以獨立於資料庫例項而存在。從Oracle 資料庫 20c 開始,“資料庫”特指多租戶容器資料庫 (CDB) 、可插拔資料庫 (PDB) 或應用程式容器的資料檔案。

•資料庫例項

例項是一組命名的記憶體結構,用於管理資料庫檔案。資料庫例項由共享記憶體區域( 稱為系統全域性區域 (SGA)) 和一組後臺程式組成。例項可以獨立於資料庫檔案而存在。

1.2.1 多租戶體系結構

多租戶體系結構使Oracle 資料庫成為 CDB

每個Oracle 資料庫必須包含或能夠包含在另一個資料庫中。例如, CDB 包含 pdb ,而應用程式容器包含應用程式 pdb PDB CDB 或應用程式容器包含,而應用程式容器由 CDB 包含。

Oracle 資料庫 20c 開始,多租戶容器資料庫是唯一受支援的體系結構。在以前的版本中, Oracle 支援非容器資料庫(非 CDB )。

1.2.1.1 CDB

CDB 包含一個或多個使用者建立的 pdb 和應用程式容器。

在物理層,CDB 是一組檔案:控制檔案、聯機重做日誌檔案和資料檔案。資料庫例項管理構成 CDB 的檔案。

下圖顯示了CDB 和關聯的資料庫例項。

1.2.1.2 PDB 系統

PDB 是模式、模式物件和非模式物件的可移植集合,在應用程式中顯示為單獨的資料庫。

在物理層,每個PDB 都有自己的一組資料檔案,用於儲存 PDB 的資料。 CDB 包括包含在其中的 pdb 的所有資料檔案,以及儲存 CDB 本身後設資料的一組系統資料檔案。

要移動或存檔PDB ,可以拔下它。拔出的 PDB PDB 資料檔案和後設資料檔案組成。拔下的 PDB 在插入 CDB 之前不可用。

下圖顯示名為MYCDB CDB

從物理上講,MYCDB 是一個 Oracle 資料庫,即一組與例項關聯的資料檔案。 MYCDB 有一個資料庫例項,儘管在 Oracle Real Application Clusters 叢集中可能有多個例項,還有一組資料庫檔案。

MYCDB 包含兩個 pdb:hrpdb salespdb 。如圖 1-2 所示,這些 pdb 在各自的應用程式中顯示為獨立的資料庫。應用程式不知道它是連線到 CDB 還是 PDB

要管理CDB 本身或其中的任何 PDB ,可以連線到 CDB root root 是所有 pdb 和應用程式容器所屬的模式、模式物件和非模式物件的集合。

1.2.1.3 應用程式容器

應用程式容器是CDB 中一個可選的、使用者建立的容器,用於儲存一個或多個應用程式的資料和後設資料。

在此上下文中,應用程式( 也稱為主應用程式定義 ) 是儲存在應用程式根中的一組已命名的、版本化的公共資料和後設資料。例如,應用程式可能包括表、檢視、使用者帳戶和 PL/SQL 包的定義,這些定義對於一組 pdb 是通用的。

在某些方面,應用程式容器充當CDB 中的特定於應用程式的 CDB 。與 CDB 本身一樣,一個應用程式容器可以包含多個應用程式 pdb ,並允許這些 pdb 共享後設資料和資料。在物理級別上,應用程式容器有自己的一組資料檔案,就像 PDB 一樣。

例如,SaaS 部署可以使用多個應用程式 pdb ,每個 pdb 用於一個單獨的客戶,該客戶共享應用程式後設資料和資料。例如,在下面的圖中, sales_app 是應用程式根目錄中的應用程式模型。名為 cust1_pdb 的應用程式只包含客戶 1 的銷售資料,而名為 cust2_pdb 的應用程式只包含客戶 2 的銷售資料。

對於單個客戶PDBs ,可以進行插拔、解插、克隆和其他 pdb 級操作。

1.2.2 Sharding 架構

Oracle Sharding 是一種基於跨多個 pdb 的資料水平分割槽的資料庫擴充套件技術。應用程式將 PDB 視為單個邏輯資料庫。

sharding 對於 OLTP 應用程式的主要好處包括線性可伸縮性、故障包容和地理資料分佈。 Sharding 非常適合在 Oracle Cloud 部署。與實現 sharding NoSQL 資料儲存不同, Oracle sharding 提供了 sharding 的優點,同時又不犧牲企業 RDBMS 的功能。

sharding 架構中,每個 CDB 都託管在一個專用伺服器上,伺服器上有自己的本地資源 :CPU 、記憶體、 flash 或磁碟。您可以將 PDB 指定為 shard 。來自不同 cdb PDB 切分組成一個邏輯資料庫,稱為 sharding 資料庫。同一個 CDB 中的兩個碎片不能是同一個 shard 資料庫的成員。但是,在同一個 CDB 中,一個 PDB 可以在一個 shard 資料庫中,另一個 PDB 可以在一個單獨的 shard 資料庫中。

水平分割槽涉及將一個資料庫表跨shards ,以便每個 shards 包含具有相同列但不同行的子集的表。以這種方式分割的表也稱為 shards 表。下圖顯示了一個經過水平分割的 shards 表,它橫跨三個 shards ,每個 shards 都是單獨的 CDB 中的 PDB

一個用例是跨多個CDBs 分發客戶帳戶資料。例如, ID 28459361 的客戶可以查詢他的記錄。下圖顯示了一種可能的體系結構。客戶請求通過連線池路由,其中分片控制器 ( 網路監聽器 ) 將請求定向到適當的 PDB 分片,該分片包含所有客戶行。

1.3 關於多租戶架構

多租戶體系結構允許Oracle 資料庫充當多租戶容器資料庫 (CDB)

Oracle Database 20c 開始,多租戶容器資料庫是惟一受支援的體系結構。在以前的版本中, Oracle 支援非容器資料庫 (non-container databases, non-CDBs)

CDB 包括零個、一個或多個客戶建立的可插拔資料庫 (PDBs) 和應用程式容器。 PDB 是模式、模式物件和非模式物件的可移植集合,在 Oracle Net   client 中作為單獨的資料庫出現。

1.3.1 關於 CDB 中的容器

container 是多租戶體系結構中資料或後設資料的邏輯集合。

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

每個CDB 都有以下容器:

•只有一個 CDB  root 容器(也稱為 root

CDB  root 容器 是所有pdb 所屬的模式、模式物件和非模式物件的集合(請參閱“ CDB 中容器的概述”)。 Root 儲存Oracle 提供的後設資料和公共使用者。後設資料的一個例子是 Oracle 提供的 PL/SQL 包的原始碼(請參閱“ CDB 中的資料字典體系結構”)。公共使用者是每個容器中已知的資料庫使用者(請參閱“ CDB 中的公共使用者”)。根容器名為 CDB$ ROOT

•一個系統容器

系統容器包括 root CDB CDB 中的所有 pdb 。因此,系統容器是 CDB 本身的邏輯容器。

•零個或多個應用程式容器

應用程式容器正好由一個應用程式 root 和插入到此 root pdb 組成。系統容器包含 CDB  root CDB 中的所有 pdb ,而應用程式容器僅包含插入到應用程式根中的 pdb 。應用程式根屬於 CDB  root ,而不是其他容器。

•零個或多個使用者建立的 PDB

PDB 包含特定功能集所需的資料和程式碼(請參見“ PDB ”)。例如, PDB 可以支援特定的應用程式,例如人力資源或銷售應用程式。建立 CDB 時不存在 PDB 。您可以根據業務需求新增 pdb

PDB 完全屬於零個或一個應用程式容器。如果 PDB 屬於應用程式容器,則它是應用程式 PDB 。例如, cust1_pdb cust2_pdb 應用程式 pdb 可能屬於 saas_sales_ac 應用程式容器,在這種情況下,它們不屬於其他應用程式容器。應用程式 seed 是一個可選的應用程式PDB ,它充當使用者建立的 PDB 模板,使您能夠快速建立新的應用程式 PDB

•一個種子 PDB

seed PDB 是系統提供的模板, CDB 可以使用它來建立新的 PDB 。種子 PDB 命名為 PDB$seed 。不能在 PDB$SEED 中新增或修改物件。

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

這個例子展示了一個包含五個容器的簡單CDB :系統容器(整個 CDB )、 CDB root PDB seed PDB$seed )和兩個 PDB 。每個 PDB 都有自己的專用應用程式。不同的 PDB 管理員管理每個 PDB CDB 中存在一個具有單個標識的公共使用者。在本例中,公共使用者 SYS 可以管理 root 和每個 PDB 。在物理級別,這個 CDB 由一個或多個資料庫例項管理,並且包含一組用於每個 PDB CDB 本身的資料檔案。

1-2 cdb 和一個應用程式容器

在這個變體中,CDB 包含一個名為 saas_sales_ac 的應用程式容器。在應用程式容器中,應用程式 PDB cust1_pdb 為一個客戶支援一個應用程式,而應用程式 PDB cust2_pdb 為另一個客戶支援一個應用程式。 CDB 還包含一個名為 hrpdb PDB ,它支援 HR 應用程式,但不屬於應用程式容器。

在本例中,多個dba 管理 CDB 環境 :

•由 CDB 管理員管理 CDB 本身。

•應用程式容器管理員管理 saas_sales_ac 容器,包括應用程式安裝和升級。

•應用程式 PDB 管理員管理 saas_sales_ac 容器中的兩個 PDB: cust1_pdb cust2_pdb

PDB 管理員管理 hrpdb

1.3.2 關於多租戶體系結構的使用者 介面

您可以對cdb pdb 和應用程式容器使用相同的管理工具集。


1.4 多租戶體系結構的好處

在單個CDB 中建立單獨的 PDB 為可管理性和效能提供了好處。

1.4.1 將資料整合到單個 CDB 的好處

資料庫整合是將來自不同主機上的多個資料庫的資料整合到一臺主機上的一個CDB 的過程。多租戶體系結構使您能夠在不改變現有模式或應用程式的情況下整合資料和程式碼。

將資料合併到一個CDB 有以下好處 :

•降低成本

通過將硬體和資料庫基礎設施合併為一組單一的後臺程式,並有效地共享計算資源和記憶體資源,您可以降低硬體和維護的成本。例如,在單個主機上的單個CDB 中的 100 pdb 可以共享一個資料庫例項。

•更容易、更快速地移動資料和程式碼

按照設計,您可以快速地將PDB 插入到 CDB 中,從 CDB 中拔出 PDB ,然後將這個 PDB 插入到另一個 CDB 中。您還可以在 pdb 仍然可用時克隆它們。您可以使用任何字符集插入 PDB 並在不進行字符集轉換的情況下訪問它。如果 CDB 的字符集是 AL32UTF8 ,那麼在同一個 CDB 中可以存在具有不同資料庫字符集的 pdb

•簡化物理資料庫的管理和監控

CDB 管理員可以通過為所有託管租戶和 CDB  root 使用者執行單個操作( 例如打補丁或執行 RMAN 備份 ) 來將環境作為一個集合進行管理。簡化了備份策略和災難恢復。

•資料和程式碼分離

儘管合併到單個物理CDB 中,但 PDB 在應用程式中似乎是獨立的資料庫。例如,如果使用者錯誤丟失了單個 PDB 中的關鍵資料,那麼 PDB 管理員可以使用 Oracle 閃回或時間點恢復來檢索丟失的資料,而不會影響其他 PDB

•確保行政職責的分離

公共使用者帳戶可以連線到具有足夠許可權的任何容器,而本地使用者帳戶只能連線到特定的PDB 。管理員可以將職責劃分如下 :

管理員使用公共使用者帳戶來管理CDB 或應用程式容器。

- PDB 管理員使用一個本地使用者帳戶來管理一個單獨的 PDB 。由於特權包含在授予它的容器中,所以一個 PDB 上的本地使用者在同一 CDB 內的其他 PDB 上沒有特權。

•易於效能調優

在一臺主機上收集單個CDB 的效能指標要比在多臺主機上收集多個資料庫的效能指標更容易。例如,調整一個 SGA 比調整 100 SGA 更容易。

•更少的資料庫補丁和升級

對一個CDB 應用補丁比升級 100 個資料庫更容易,升級一個 CDB 比升級 100 個資料庫更容易。

1.4.2 多租戶體系結構對可管理性的好處

多租戶體系結構通過將特定於PDB 的資料和後設資料儲存在 PDB 本身中來提高可管理性。

通過儲存自己的字典後設資料,PDB 作為一個單元變得更易於管理。即使一個 CDB 中只有一個 PDB ,也會有此好處。將 pdb 分組到單獨管理的應用程式容器中可以進一步提高可管理性。

CDB 中,資料字典後設資料在 CDB  root pdb 之間進行拆分。資料字典分離的好處包括:

•更容易升級資料和程式碼

例如,您可以快速地從現有的CDB 中拔出 PDB ,然後將其從更高版本插入新建立的 CDB ,而不是將 CDB 從一個資料庫版本升級到另一個資料庫版本。

•更容易在伺服器之間遷移

要執行負載 均衡 或滿足SLAs ,可以將應用程式資料庫從本地資料中心遷移到 Oracle  Cloud ,或在同一環境中的兩臺伺服器之間遷移。

•防止 PDB 中的資料損壞

您可以將PDB 快閃記憶體 到指定 SCN PDB 特定的還原點,而不影響其他 PDB

•能夠在一個地方安裝、管理和升級特定於應用程式的資料和後設資料

可以將一組特定於應用程式的pdb 定義為單個元件,稱為應用程式容器。然後可以在此容器中定義一個或多個應用程式。每個應用程式定義都是在此應用程式容器共享的公共後設資料和資料的命名版本集。

例如,SaaS 供應商的每個客戶都可以擁有自己的應用程式 PDB 。每個應用程式 PDB 可能都有相同定義的名為 sales_mlt 的表,每個 PDB 中有不同的資料。 PDB 可以共享一個名為 countries_olt 的資料連結公共物件,該物件在每個 PDB 中具有相同的資料。作為應用程式管理員,您可以管理主應用程式定義,以便每個新客戶都獲得具有相同物件的 PDB ,並且對現有架構的每個更改(例如,新增新表或更改表定義)都適用於共享應用程式定義的所有 PDB

•與 Oracle 資料庫資源管理器整合

在多租戶環境中,pdb 爭奪共享資源。要解決資源爭用、使用和監視問題,請使用 Oracle Database Resource Manager

1.5 CDB PDB 建立概述

您可以使用create DATABASE 建立一個 CDB ,然後使用 create PLUGGABLE DATABASE 建立 pdb 和應用程式容器。

1.5.1 建立 CDB

CREATE DATABASE 語句建立一個新的 CDB

當您建立一個CDB 時, Oracle 資料庫會自動建立一個根容器 (CDB$root) 和一個種子 PDB (PDB$seed) 。下圖顯示了新建立的 CDB:

1.5.2 PDB 的建立

CREATE PLUGGABLE DATABASE SQL 語句建立一個 PDB

建立的PDB 自動包括一個完整的資料字典,其中包括後設資料和到 CDB  root 中系統提供的物件的內部連結。您必須從單個 root 定義每個PDB: CDB  root 或應用程式 root

每個PDB 都有一個全域性惟一識別符號 (GUID) PDB GUID 主要用於為儲存 PDB 檔案的目錄生成名稱,包括 Oracle 託管檔案目錄和非 Oracle 託管檔案目錄。

1.5.2.1 通過克隆建立 PDB

建立PDB 的一種技術稱為克隆。

您可以從PDB$SEED application seed 或遠端或本地 PDB 克隆一個 PDB

1.5.2.1.1 Seed 中建立 PDB

您可以使用CREATE PLUGGABLE DATABASE 語句從一個 seed 建立一個PDB

一個seed 是一個PDB ,用作建立另一個 PDB 的模板。從 seed 中建立PDB 複製 PDB 的部分或全部內容,然後分配一個新的惟一識別符號。

Seed PDB 是以下任意一種 :

PDB 種子 (PDB$ seed) ,這是一個系統提供的用於建立 PDBs 的模板,每個 CDB 只有一個 PDB$ seed ,不能修改或刪除它。

•應用程式種子,它是使用者為指定的應用程式根建立的 PDB

在應用程式容器中,可以使用create PLUGGABLE DATABASE AS seed 語句建立應用程式種子,然後可以使用該語句加速新應用程式 PDBs 的建立。

例子1-3 PDB$SEED 建立一個 PDB

下面的SQL 語句使用 Oracle 託管檔案從 PDB$SEED 建立一個名為 hrpdb PDB:

CREATE PLUGGABLE DATABASE hrpdb ADMIN USER dba1 IDENTIFIED BY password;

1.5.2.1.2 通過克隆產生 PDB

要從另一個PDB 克隆 PDB ,請使用 CREATE PLUGGABLE DATABASE 語句和 from 子句。

在這種技術中,源是本地或遠端CDB 中的 PDB 。目標是從源複製的 PDB 。克隆操作將與源關聯的檔案複製到新位置,然後分配新的 GUID 以建立 PDB

此技術對於快速建立用於測試和開發的pdb 非常有用。例如,在將應用程式部署到生產 PDB 中之前,可以在克隆的 PDB 上測試新的或修改過的應用程式。如果 PDB 處於 local undo 模式,則可以在操作期間以讀 / 寫模式開啟源 PDB ,稱為熱克隆。

如果在應用程式根目錄中執行CREATE PLUGGABLE DATABASE 語句,則在應用程式容器中建立克隆的 PDB 。在這種情況下,源 PDB 的應用程式名和版本必須與應用程式容器的應用程式名和版本相容。

下圖演示了當源和目標位於同一個CDB 中時克隆 PDB

Oracle 資料庫 19c 開始,可以使用 DBCA 克隆遠端 PDB

示例1-4 克隆 PDB

以下SQL 語句從名為 hrpdb 的插入式 PDB 克隆名為 salespdb PDB

CREATE PLUGGABLE DATABASE salespdb FROM hrpdb;

1.5.2.1.2.1 PDB 快照克隆

通過指定Create PLUGGABLE DATABASE 命令的 USING snapshot 子句,從 PDB 快照建立克隆。

使用SNAPSHOT 子句建立 PDB 快照

PDB 快照是 PDB 的時間點副本。建立快照時,源 PDB 可以是隻讀的或讀 / 寫的。源 PDB 開啟時拍攝的 PDB 快照稱為熱克隆。您可以從 PDB 快照建立克隆。這些克隆 pdb 在開發和測試中非常有用。

可以使用create PLUGGABLE DATABASE (或 ALTER PLUGGABLE DATABASE )的 SNAPSHOT 子句手動建立快照,也可以使用 EVERY interval 子句自動建立快照。以下語句建立名為 pdb1_wed_4_1201 PDB 快照:

ALTER PLUGGABLE DATABASE SNAPSHOT pdb1_wed_4_1201;

如果儲存系統支援稀疏克隆,那麼前面的命令將建立一個稀疏副本。否則,該命令將建立一個完整的副本。

每個PDB 快照都與快照名稱和快照建立時的 SCN 和時間戳相關聯。

使用USING SNAPSHOT 子句建立 PDB 克隆

PDB 快照中的克隆是完整的獨立 PDB 。與基於儲存管理快照的快照副本 PDB 不同,您不需要具體化從 PDB 快照建立的克隆。

要從PDB 快照建立克隆,請指定 create PLUGGABLE DATABASE 語句的 USING snapshot 子句。例如,以下語句從名為 pdb1_wed_4_1201 PDB 級快照克隆名為 pdb1_ PDB 副本:

CREATE PLUGGABLE DATABASE pdb1_copy FROM pdb1 USING SNAPSHOT pdb1_wed_4_1201;

1.5.2.1.2.2 快照複製 PDB

快照副本PDB 基於底層儲存系統的副本。快照拷貝 PDB 減少了測試所需的儲存量,並顯著縮短了建立時間。

如果檔案系統支援儲存快照,則CREATE PLUGGABLE DATABASE ... FROM ... SNAPSHOT COPY 複製從源 PDB 複製 PDB ,該 PDB 可以在操作期間讀 / 寫。快照拷貝 PDB 檔案使用寫時拷貝技術。只有修改後的塊需要在磁碟上額外儲存。如果檔案系統不支援儲存快照或使用 Oracle Exadata 稀疏檔案,則 CLONEDB 初始化引數必須為 true ,並且只要快照副本 PDB 存在,源 PDB 就必須為只讀。

由於快照副本PDB 依賴於儲存管理的快照,因此無法從 CDB 根或應用程式根拔出快照副本 PDB 。不能刪除快照副本 PDB 所基於的儲存快照。

您可以將使用稀疏檔案的快照副本PDB 轉換為完整的 PDB 。此過程稱為具體化快照副本 PDB 。因為具體化的 PDB 不依賴於源 PDB ,所以可以刪除它。通過執行 ALTER PLUGGABLE DATABASE materiale 命令實現 PDB

注:

使用USING SNAPSHOT 子句建立的 PDB 和使用 SNAPSHOT COPY 子句建立的 PDB 具有不同的屬性。不能在單個 CREATE PLUGGABLE 資料庫命令中同時指定這兩個子句。 CREATE PLUGGABLE DATABASE FROM USING SNAPSHOT 子句建立不需要具體化的完整、獨立的 PDB CREATE PLUGGABLE DATABASE FROM SNAPSHOT COPY 子句建立一個 sparse PDB ,如果要刪除它所基於的儲存級快照,則必須具體化該 PDB

1.5.2.1.2.3 Refreshable pdb 分子克隆

一個可重新整理的克隆PDB 是一個只讀克隆,它可以週期性地與它的源 PDB 同步。

根據REFRESH MODE 子句中指定的值,同步將自動或手動進行。例如,如果 hrpdb_re_clone hrpdb 的一個克隆,那麼每個月您都可以使用來自 hrpdb 的更改手動重新整理 hrpdb_re_clone

或者,您可以配置hrpdb ,使更改每 24 小時自動傳播到 hrpdb_re_clone

您可以切換源PDB 及其可重新整理克隆的角色。當源 PDB 發生故障時,這種切換對於 CDBs 之間的負載平衡非常有用。

1.5.2.2 通過插入 unplugged PDB 來建立 PDB

unplugged PDB 是一組自包含的資料檔案,以及一個指定 PDB 檔案位置的 XML 後設資料檔案。要插入 unplugged PDB ,請將 CREATE PLUGGABLE 資料庫語句與 USING 子句一起使用。

插入unplugged PDB 時,您有以下選項:

•指定描述 PDB XML 後設資料檔案和與 PDB 相關的檔案。

•指定一個 PDB 存檔檔案,它是一個壓縮檔案,包含 XML 檔案和 PDB 資料檔案。可以通過指定存檔檔案來建立 PDB ,從而避免分別複製 XML 檔案和資料檔案。

下圖說明了如何使用XML 檔案插入拔出的 PDB

示例1-5 插入 PDB

以下SQL 語句基於儲存在命名 XML 檔案中的後設資料插入名為 salespdb PDB ,並指定 NOCOPY ,因為 unplugged PDB 的檔案不需要移動到新位置:

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' NOCOPY;

1.5.2.3 通過重新定位 (Relocating) 建立 PDB

要將PDB 從一個 CDB 遷移到另一個 CDB ,可以使用 CREATE PLUGGABLE DATABASE ... RELOCATE 語句或 DBCA

該技術具有以下優點:

•以最小的停機時間進行 遷移

•該技術在遷移過程中保持 PDB 處於讀 / 寫模式,然後在新的位置上使 PDB 線上。

您必須在目標CDB 上建立一個資料庫連結,該 CDB 將包含重新定位的 PDB 。另外,源 PDB 必須使用 local undo 資料。

下圖描述了一個PDB  relocation

Oracle 資料庫 19c 開始,您可以在靜默模式下使用 DBCA 重新定位遠端 PDB

示例1-6 PDB 重新定位

在目標CDB 發出的以下語句將 hrpdb 從源 CDB 重新定位到目標 CDB

CREATE PLUGGABLE DATABASE hrpdb FROM hrpdb@lnk_to_source RELOCATE;

1.5.2.4 建立 PDB 作為代理 PDB

代理PDB 提供對遠端 CDB 中不同 PDB (稱為引用 PDB )的訪問。

代理PDB 使您能夠聚合來自多個源的資料。提交以在代理 PDB 中執行的 SQL 語句在引用的 PDB 中執行。

典型的用例是引用應用程式根副本的代理PDB 。如果多個 cdb 具有相同的應用程式定義(例如,相同的表和 PL/SQL 包),則可以在主應用程式根的應用程式容器中建立代理 PDB 。代理 PDB 的引用 PDB 是另一個 CDB 中的應用程式根。通過在主根目錄中執行安裝指令碼,其他 CDB 中的應用程式根目錄將成為主應用程式根目錄的副本。

若要建立代理PDB ,請將 create PLUGGABLE DATABASE 語句與 FROM 子句一起使用, FROM 子句必須指定指向遠端 CDB 中引用的 PDB 的資料庫連結,以及 AS proxy 子句。

注:

如果將代理PDB 直接插入 CDB$ROOT ,則必須在 CDB$ROOT 中建立了代理。應用程式 PDB 的代理必須同時插入到應用程式根目錄。

下圖顯示了引用遠端CDB 中的 PDB 的代理 PDB 的建立。

示例1-7 建立代理 PDB

本例建立一個名為pdb1 的代理 PDB 。引用的 PDB 是使用資料庫連結指定的。

CREATE PLUGGABLE DATABASE pdb1 AS PROXY FROM pdb1@pdb1_link;

1.6 多租戶環境文件路線圖

本主題列出了理解和使用CDB 的最重要主題,幷包括對相應文件的交叉引用。

1-2 多租戶架構文件的路線圖

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2682354/,如需轉載,請註明出處,否則將追究法律責任。

相關文章