CDBs und PDBs

Mit der mehrmandantenfähigen Architektur kann eine Oracle-Datenbank als mehrmandantenfähige Containerdatenbank (CDB) fungieren.

Ab Oracle Database 21c ist eine mehrmandantenfähige Containerdatenbank die einzige unterstützte Architektur. In früheren Releases unterstützten Oracle Nicht-Containerdatenbanken (Nicht-CDBs).

Container in einer CDB

Ein Container ist eine Sammlung von Schemas, Objekten und zugehörigen Strukturen in einer mehrmandantenfähigen Containerdatenbank (CDB). Innerhalb einer CDB hat jeder Container eine eindeutige ID und einen eindeutigen Namen.

Eine CDB umfasst null, eine oder viele vom Kunden erstellte integrierbare Datenbanken (PDBs) und Anwendungscontainer. Eine PDB ist eine portable Sammlung von Schemas, Schemaobjekten und Nichtschemaobjekten, die einem Oracle Net-Client als separate Datenbank angezeigt wird. Ein Anwendungscontainer ist eine optionale, vom Benutzer erstellte CDB-Komponente, die Daten und Metadaten für ein oder mehrere Anwendungs-Backends speichert. Eine CDB enthält null oder mehr Anwendungscontainer.

Hinweis: Unter "Anwendungscontainer" werden Anwendungscontainer ausführlich erläutert.

Die folgende Abbildung stellt mögliche Container in einer CDB dar.

Abbildung 1: Container in einer CDB

Beschreibung der Abbildung admin112.png

Jede CDB enthält die folgenden Container:

Beispiel 2-1: CDB ohne Anwendungscontainer

Dieses Beispiel zeigt eine einfache CDB mit fünf Containern: dem Systemcontainer (der gesamten CDB), der CDB-Root, dem PDB-Seed (PDB$SEED) und zwei PDBs. Jede PDB verfügt über eine eigene dedizierte Anwendung. Jede PDB wird von einem anderen PDB-Administrator verwaltet. Ein gemeinsamer Benutzer ist in einer CDB mit einer einzelnen Identität vorhanden. In diesem Beispiel kann der allgemeine Benutzer SYS die Root und jede PDB verwalten. Auf der physischen Ebene wird diese CDB von einer oder mehreren Datenbankinstanzen verwaltet. Sie enthält eine Gruppe von Datendateien für jede PDB und für die CDB selbst.

Abbildung 2: CDB ohne Anwendungscontainer

Beschreibung der Abbildung cncpt345.png

Beispiel 2-2: CDB mit einem Anwendungscontainer

In dieser Variante enthält die CDB einen Anwendungscontainer namens saas_sales_ac. Innerhalb des Anwendungscontainers unterstützt die Anwendungs-PDB cust1_pdb eine Anwendung für einen Kunden, und die Anwendungs-PDB cust2_pdb unterstützt eine Anwendung für einen anderen Kunden. Die CDB enthält auch eine PDB namens hrpdb, die eine HR-Anwendung unterstützt, aber nicht zu einem Anwendungscontainer gehört.

Abbildung 3: CDB mit einem Anwendungscontainer

Beschreibung der Abbildung cncpt383.png

In diesem Beispiel verwalten mehrere DBAs die CDB-Umgebung:

Root- und Systemcontainer der CDB

Die CDB-Root, die auch einfach die Root genannt wird, ist eine Sammlung von Schemas, Schemaobjekten und Nichtschemaobjekten, zu denen alle PDBs gehören.

Jede CDB hat nur einen Root-Container namens CDB$ROOT. In der Root werden die Systemmetadaten gespeichert, die zum Verwalten von PDBs erforderlich sind. Alle PDBs gehören zur Root. Der Systemcontainer ist die CDB-Root und alle PDBs, die zu dieser Root gehören.

Die CDB-Root speichert keine Benutzerdaten. Oracle empfiehlt, dass Sie der Root keine allgemeinen Objekte hinzufügen oder von Oracle bereitgestellte Schemas in der Root ändern. Sie können jedoch allgemeine Benutzer und Rollen für die Datenbankadministration erstellen. Ein allgemeiner Benutzer mit den erforderlichen Berechtigungen kann zwischen Containern wechseln.

Oracle empfiehlt AL32UTF8 als Root-Zeichensatz. PDBs mit unterschiedlichen Zeichensätzen können sich in derselben CDB befinden, ohne dass eine Zeichensatzkonvertierung erforderlich ist.

Beispiel 2-3: Alle Container in einer CDB

Die folgende Abfrage, die von einem mit der CDB-Root verbundenen administrativen Benutzer ausgegeben wird, listet alle Container in der CDB (einschließlich der Seed- und CDB-Root) nach CON_ID auf.

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

Siehe auch: "Allgemeine Benutzerkonten"

PDBs

Eine PDB ist ein vom Benutzer erstelltes Set von Schemas, Objekten und zugehörigen Strukturen, das einer Clientanwendung logisch als separate Datenbank angezeigt wird.

Jede PDB ist Eigentümer von SYS, unabhängig davon, welcher Benutzer die PDB erstellt hat. SYS ist ein allgemeiner Benutzer in der CDB. Das bedeutet, dass dieser Benutzer dieselbe Identität in der Root und in jeder vorhandenen und zukünftigen PDB innerhalb der CDB hat.

PDB-Typen

Alle PDBs werden vom Benutzer mit der CREATE PLUGGABLE DATABASE-Anweisung erstellt, mit Ausnahme von PDB$SEED, das von Oracle bereitgestellt wird.

Sie können die folgenden PDB-Typen erstellen.

Standard PDB

Dieser PDB-Typ führt dazu, dass CREATE PLUGGABLE DATABASE ohne Angabe der PDB als Seed, Proxy-PDB oder Anwendungs-Root ausgeführt wird. Die Funktionen hängen von dem Container ab, in dem Sie ihn erstellen:

Anwendungs-Root

Betrachten Sie ein Anwendungs-Root als anwendungsspezifischen Root-Container. Es dient als Repository für eine Masterdefinition eines Anwendungs-Backends, einschließlich gemeinsamer Daten und Metadaten. Um eine Anwendungs-Root zu erstellen, melden Sie sich bei der CDB-Root an, und geben Sie die AS APPLICATION CONTAINER-Klausel in einer CREATE PLUGGABLE DATABASE-Anweisung an. Siehe "Anwendungs-Root".

Seed-PDBs

Im Gegensatz zu einer Standard-PDB ist eine Seed-PDB nicht für die Unterstützung einer Anwendung vorgesehen. Der Seed ist vielmehr eine Vorlage für die Erstellung von PDBs, die Anwendungen unterstützen. Ein Samen kann eine der folgenden sein:

Proxy-PDBs

Eine Proxy-PDB ist eine PDB, die über einen Datenbanklink eine PDB in einer Remote-CDB referenziert. Wenn Sie eine Anweisung in einer Proxy-PDB absetzen, während die PDB geöffnet ist, wird die Anweisung in der referenzierten PDB ausgeführt.

Sie müssen eine Proxy-PDB erstellen, während Sie mit der CDB-Root oder Anwendungs-Root verbunden sind. Sie können eine Proxy-PDB genauso wie eine Standard-PDB ändern oder löschen.

Zweck der PDBs

Bei einer Anwendung ist eine PDB eine eigenständige, voll funktionsfähige Oracle-Datenbank. Sie können PDBs in einer einzigen CDB konsolidieren, um Skaleneffekte zu erzielen und gleichzeitig die Isolation zwischen PDBs aufrechtzuerhalten.

Mit PDBs können Sie die folgenden spezifischen Ziele erreichen:

Siehe:

Proxy-PDBs

Eine Proxy-PDB bezieht sich auf eine Remote-PDB, die als referenzierte PDB bezeichnet wird.

Obwohl Sie SQL-Anweisungen in der Proxy-(Referenz-)PDB absetzen, werden die Anweisungen in der referenzierten PDB ausgeführt. In dieser Hinsicht ist eine Proxy-PDB lose analog zu einer symbolischen Link-Datei in Linux.

Proxy-PDBs bieten die folgenden Vorteile:

Um eine Proxy-PDB zu erstellen, führen Sie CREATE PLUGGABLE DATABASE mit der Klausel AS PROXY FROM aus, wobei FROM den referenzierten PDB-Namen und einen Datenbanklink angibt. Die Erstellungsanweisung kopiert nur die Datendateien, die zu den Tablespaces SYSTEM und SYSAUX gehören.

Beispiel 2-4: Proxy-PDB erstellen

In diesem Beispiel wird eine Verbindung zum Container saas_sales_ac in einer lokalen Produktions-CDB hergestellt. Der allgemeine Benutzer sales_admin erstellt eine Proxy-PDB mit dem Namen sales_sync_pdb. Diese Anwendungs-PDB referenziert eine Anwendungs-Root namens saas_sales_test_ac in einer Remote-Entwicklungs-CDB, auf die sie über den Datenbanklink cdb_dev_rem zugreift. Wenn ein Anwendungsupgrade in saas_sales_ac in der Produktions-CDB erfolgt, wird das Upgrade automatisch an das Anwendungs-Root saas_sales_test_ac in der Remote-Entwicklungs-CDB propagiert.

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

CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;

Namen für PDBs

Container in einer CDB verwenden denselben Namespace. Dies bedeutet, dass sie eindeutige Namen in diesem Namespace haben müssen.

Namen der folgenden Container dürfen innerhalb derselben CDB nicht in Konflikt stehen:

Beispiel: Wenn dieselbe CDB die Anwendungscontainer saas_sales_ac und saas_sales_test_ac enthält, können zwei Anwendungs-PDBs, die beide den Namen cust1 haben, nicht gleichzeitig in beiden Containern gespeichert werden. Die Namespace-Regeln verhindern auch die Erstellung einer PDB namens cust1pdb in der CDB-Root und einer PDB namens cust1pdb in einer Anwendungs-Root.

Die Namen von PDBs und Anwendungs-Root-Containern müssen denselben Regeln wie die Net Service-Namen entsprechen. Da eine PDB oder Anwendungs-Root über einen Service mit eigenem Namen verfügt, muss der Containername über alle CDBs hinweg eindeutig sein, deren Services über einen bestimmten Listener verfügbar gemacht werden. Das erste Zeichen eines vom Benutzer erstellten Containernamens muss alphabetisch sein. Die restlichen Zeichen müssen alphanumerisch oder unterstrichen sein (_). Da bei Servicenamen die Groß-/Kleinschreibung nicht beachtet wird, wird bei Containernamen die Groß-/Kleinschreibung nicht beachtet, auch wenn sie mit Bezeichnern mit Trennzeichen angegeben werden.

Siehe auch: Oracle AI Database Net Services Reference für die Regeln für Servicenamen

Datenbanklinks zwischen PDBs

Standardmäßig muss ein Benutzer, der bei einer PDB angemeldet ist, Datenbanklinks verwenden, um auf Objekte in einer anderen PDB zuzugreifen.

Abbildung 4: Datenbanklink zwischen PDBs

Beschreibung der Abbildung cncpt384.png

Ausnahmen für die Regel:

Beim Erstellen einer Proxy-PDB müssen Sie einen Datenbanklinknamen in der FROM-Klausel der CREATE PLUGGABLE DATABASE ... AS PROXY-Anweisung angeben. Wenn sich die Proxy-PDB und die referenzierte PDB in separaten CDBs befinden, muss der Datenbanklink in der Root der CDB definiert werden, in der die Proxy-PDB enthalten ist. Der Datenbanklink muss sich entweder bei der Remote-PDB oder bei der CDB-Root der Remote-CDB anmelden.

Siehe auch: "Allgemeine und lokale Objekte"