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.
-
CDB-Root und -Systemcontainer Die CDB-Root, auch einfach Root genannt, ist eine Sammlung von Schemas, Schemaobjekten und Nichtschemaobjekten, zu denen alle PDBs gehören.
-
PDBs Eine PDB ist eine vom Benutzer erstellte Gruppe von Schemas, Objekten und zugehörigen Strukturen, die logisch für eine Clientanwendung als separate Datenbank angezeigt wird.
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:
-
Genau ein CDB-Root-Container (auch als Root bezeichnet)
Die CDB-Root ist eine Sammlung von Schemas, Schemaobjekten und Nichtschemaobjekten, zu denen alle PDBs gehören (siehe "CDBs und PDBs"). Die Root speichert von Oracle bereitgestellte Metadaten und allgemeine Benutzer. Ein Beispiel für Metadaten ist der Quellcode für von Oracle bereitgestellte PL/SQL-Packages. Ein allgemeiner Benutzer ist ein Datenbankbenutzer, der in jedem Container bekannt ist (siehe "Allgemeine Benutzeraccounts"). Der Root-Container heißt
CDB$ROOT. -
Genau ein Systemcontainer
Der Systemcontainer enthält die Root-CDB und alle PDBs in der CDB. Daher ist der Systemcontainer der logische Container für die CDB selbst.
-
Null oder mehr Anwendungscontainer
Ein Anwendungscontainer besteht aus genau einer Anwendungs-Root und den PDBs, die in diese Root integriert sind. Während der Systemcontainer die CDB-Root und alle PDBs innerhalb der CDB enthält, enthält ein Anwendungscontainer nur die PDBs, die in die Anwendungs-Root integriert sind. Eine Anwendungs-Root gehört zur CDB-Root und keinem anderen Container.
-
Keine oder mehrere vom Benutzer erstellte PDBs
Eine PDB enthält die Daten und den Code, die für einen bestimmten Satz von Features erforderlich sind (siehe "PDBs"). Beispiel: Eine PDB kann eine bestimmte Anwendung unterstützen, wie z.B. eine Personal- oder Vertriebsanwendung. Beim Erstellen der CDB sind keine PDBs vorhanden. Sie fügen PDBs basierend auf Ihren Geschäftsanforderungen hinzu.
Eine PDB gehört zu genau null oder einem Anwendungscontainer. Wenn eine PDB zu einem Anwendungscontainer gehört, handelt es sich um eine Anwendungs-PDB. Beispiel: Die Anwendungs-PDBs
cust1_pdbundcust2_pdbgehören möglicherweise zum Anwendungscontainersaas_sales_ac. In diesem Fall gehören sie zu keinen anderen Anwendungscontainern. Ein Anwendungs-Seed ist eine optionale Anwendungs-PDB, die als vom Benutzer erstellte PDB-Vorlage fungiert. So können Sie schnell neue Anwendungs-PDBs erstellen. -
Genau eine vordefinierte PDB
Die Seed-PDB ist eine vom System bereitgestellte Vorlage, mit der die CDB neue PDBs erstellen kann. Die Seed-PDB heißt
PDB$SEED. Sie können keine Objekte inPDB$SEEDhinzufügen oder ändern.
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:
-
Ein CDB-Administrator verwaltet die CDB selbst.
-
Ein Anwendungscontaineradministrator verwaltet den Container
saas_sales_ac, einschließlich Anwendungsinstallation und -upgrades. -
Ein Anwendungs-PDB-Administrator verwaltet die beiden PDBs im Container
saas_sales_ac:cust1_pdbundcust2_pdb. -
Ein PDB-Administrator verwaltet
hrpdb.
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.
-
Typen von PDBs Alle PDBs werden vom Benutzer mit der
CREATE PLUGGABLE DATABASE-Anweisung erstellt. Ausnahme:PDB$SEED, das von Oracle bereitgestellt wird. -
Zweck von PDBs Für eine 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.
-
Proxy-PDBs Eine Proxy-PDB bezieht sich auf eine Remote-PDB, die als referenzierte PDB bezeichnet wird.
-
Namen für PDBs Container in einer CDB verwenden denselben Namespace, d.h. sie müssen eindeutige Namen in diesem Namespace haben.
-
Datenbanklinks zwischen PDBs Standardmäßig muss ein Benutzer, der mit einer PDB verbunden ist, Datenbanklinks verwenden, um auf Objekte in einer anderen PDB zuzugreifen.
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:
-
PDB in CDB-Root integriert
Diese PDB gehört zum CDB-Root-Container und nicht zum Anwendungscontainer. Dieser PDB-Typ kann keine gemeinsamen Anwendungsobjekte verwenden. Siehe "Allgemeine Anwendungsobjekte".
-
Anwendungs-PDB
Eine Anwendungs-PDB gehört genau zu einem Anwendungscontainer. Im Gegensatz zu PDBs, die in die CDB-Root integriert sind, können Anwendungs-PDBs eine Masteranwendungsdefinition innerhalb eines Anwendungscontainers gemeinsam verwenden. Beispiel: Eine Tabelle
usa_zipcodesin einer Anwendungs-Root kann ein allgemeines datenverknüpftes Objekt sein. Das bedeutet, dass sie Daten enthält, auf die alle Anwendungs-PDBs zugreifen können, die in diese Root integriert sind. PDBs, die sich nicht im Anwendungscontainer befinden, können nicht auf gemeinsame Anwendungsobjekte zugreifen.
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:
-
Seed-PDB in CDB-Root integriert (
PDB$SEED)Mit dieser vom System bereitgestellten Vorlage können Sie neue PDBs entweder in einem Anwendungscontainer oder im Systemcontainer erstellen. Der Systemcontainer enthält genau einen PDB-Seed. Sie können
PDB$SEEDnicht löschen oder Objekte darin hinzufügen oder ändern. -
Anwendungs-Seed-PDB
Um die Erstellung von Anwendungs-PDBs in einem Anwendungscontainer zu beschleunigen, können Sie einen optionalen Anwendungs-Seed erstellen. Ein Anwendungscontainer enthält entweder null oder einen Anwendungs-Seed.
Sie erstellen einen Anwendungs-Seed, indem Sie eine Verbindung zum Anwendungscontainer herstellen und die Anweisung
CREATE PLUGGABLE DATABASE ... AS SEEDausführen. Siehe "Anwendungs-Seed".
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:
-
Speichert anwendungsspezifische Daten
Beispiel: Eine Vertriebsanwendung kann über eine eigene dedizierte PDB verfügen, und eine Personalanwendung kann über eine eigene dedizierte PDB verfügen. Alternativ können Sie einen Anwendungscontainer erstellen, bei dem es sich um eine benannte Sammlung von PDBs handelt, um ein Anwendungs-Backend zu speichern, das allgemeine Daten und Metadaten enthält.
-
Daten in eine andere CDB verschieben
Eine Datenbank ist "integrierbar", weil Sie sie als eigenständige Einheit, die als nicht integrierte PDB bezeichnet wird, verpacken und dann in eine andere CDB verschieben können.
-
Schnelle Upgrades durchführen
Sie können die Integration einer PDB von der CDB in einem niedrigeren Oracle-Datenbankrelease aufheben und sie dann in einem höheren Release an eine CDB anschließen.
-
Schnelles Kopieren von Daten ohne Verlust der Verfügbarkeit
Zum Testen und Entwickeln können Sie eine PDB klonen, während sie geöffnet bleibt, und den Klon in derselben oder einer anderen CDB speichern. Optional können Sie die PDB als aktualisierbare Klon-PDB angeben. Alternativ können Sie die von Oracle bereitgestellte Seed PDB oder ein vom Benutzer erstelltes Anwendungs-Seed verwenden, um neue PDBs zu kopieren.
-
Referenzdaten in einer anderen CDB
Sie können eine Proxy-PDB erstellen, die sich auf eine andere PDB bezieht, entweder in derselben CDB oder in einer separaten CDB. Wenn Sie Anweisungen in der Proxy-PDB absetzen, werden sie in der referenzierten PDB ausgeführt.
-
Berechtigungen in PDBs isolieren
Ein lokaler oder allgemeiner Benutzer mit den entsprechenden Berechtigungen kann
EXECUTE-Berechtigungen für ein Schemaobjekt inPUBLICinnerhalb einer einzelnen PDB erteilen.
Siehe:
-
In der Oracle AI Database-Sicherheitsdokumentation erfahren Sie, wie Sie Rollen und Berechtigungen in einer CDB erteilen.
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:
-
Daten aus mehreren Anwendungsmodellen aggregieren
Mit Proxy-PDBs können Sie standorttransparente Anwendungen erstellen, die Daten aus mehreren Quellen aggregieren können. Diese Quellen können sich im selben Data Center befinden oder über Data Center verteilt sein.
-
Anwendungs-Root in einer CDB aktivieren, um Anwendungsänderungen an eine andere Anwendungs-Root zu propagieren
Angenommen, die CDBs
cdb_produndcdb_testhaben dasselbe Anwendungsmodell. Sie erstellen eine Proxy-PDB in einem Anwendungscontainer incdb_prod, der auf eine Anwendungs-Root incdb_testverweist. Wenn Sie Installations- und Upgradeskripte in der Anwendungs-Root incdb_prodausführen, propagiert Oracle AI Database diese Anweisungen an die Proxy-PDB, die sie wiederum remote an die Anwendungs-Root incdb_testsendet. Auf diese Weise wird das Anwendungs-Root incdb_testzu einem Replikat des Anwendungs-Root incdb_prod.
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:
-
Die CDB-Root
-
PDBs, die in die CDB-Root integriert sind
-
Anwendungs-Roots
-
Anwendungs-PDBs
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:
-
Ein verknüpftes allgemeines Objekt, auf das alle Anwendungs-PDBs zugreifen können, die einen Datenlink enthalten, der auf dieses Objekt verweist. Beispiel: Der Anwendungscontainer
saas_sales_acenthält die Data-Link-Tabelleusa_zipcodesin seiner Anwendung. In diesem Fall kann der allgemeine CDB-Benutzerc##dbaeine Verbindung zu einer Anwendungs-PDB in diesem Container herstellen und dannusa_zipcodesabfragen, obwohl sich die eigentliche Tabelle in der Anwendungs-Root befindet. In diesem Fall ist kein Datenbanklink erforderlich. -
Die
CONTAINERS()-Klausel in SQL, die von der CDB-Root oder Anwendungs-Root ausgegeben wird. Mit dieser Klausel können Sie Daten über alle PDBs hinweg abfragen, die an die Container-Root angeschlossen sind.
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"