Bases de données Conteneur et bases de données pluggables
L'architecture colocative permet à une base de données Oracle de fonctionner comme une base de données Conteneur colocative (CDB).
A partir d'Oracle Database 21c, une base de données Conteneur colocative est la seule architecture prise en charge. Dans les versions précédentes, Oracle prenait en charge les bases de données non Conteneur.
-
A propos des conteneurs dans une base de données Conteneur Un conteneur est un ensemble de schémas, d'objets et de structures associées dans une base de données Conteneur colocative. Dans une base de données Conteneur, chaque conteneur a un ID et un nom uniques.
-
Racine de la base de données Conteneur et conteneur système La racine de la base de données Conteneur, également appelée simplement racine, est un ensemble de schémas, d'objets de schéma et d'objets non schéma auxquels appartiennent toutes les bases de données pluggables.
-
Bases de données pluggables Une Bases de données pluggables est un ensemble créé par l'utilisateur de schémas, d'objets et de structures associées qui apparaît logiquement dans une application client en tant que base de données distincte.
A propos des conteneurs d'une base Conteneur
Un conteneur est un ensemble de schémas, d'objets et de structures associées dans une base de données Conteneur colocative. Dans une base de données Conteneur, chaque conteneur a un ID et un nom uniques.
Une base de données Conteneur inclut zéro, une ou plusieurs bases de données pluggables (PDB) et conteneurs d'application créés par le client. Une base de données pluggable est un ensemble portable de schémas, d'objets de schéma et d'objets non schéma qui apparaît à un client Oracle Net en tant que base de données distincte. Un conteneur d'application est un composant de base de données Conteneur facultatif créé par l'utilisateur qui stocke les données et les métadonnées pour un ou plusieurs back-ends d'application. Une base de données Conteneur inclut zéro ou plusieurs conteneurs d'application.
Remarque : "Conteneurs d'application" explique en détail les conteneurs d'application.
La figure suivante représente les conteneurs possibles dans une base de données Conteneur.
Figure 1 : Conteneurs dans une base de données Conteneur

Description de l'image admin112.png
Chaque base de données Conteneur contient les conteneurs suivants :
-
Un seul conteneur racine de base de données Conteneur (également appelé simplement root)
La racine de base de données Conteneur est un ensemble de schémas, d'objets de schéma et d'objets non schéma auxquels toutes les bases de données pluggables appartiennent (reportez-vous à Bases de données Conteneur et bases de données pluggables). La racine stocke les métadonnées et les utilisateurs communs fournis par Oracle. Le code source des packages PL/SQL fournis par Oracle est un exemple de métadonnées. Un utilisateur commun est un utilisateur de base de données connu dans chaque conteneur (reportez-vous à la section "Comptes utilisateur communs"). Le conteneur racine est nommé
CDB$ROOT. -
Un seul conteneur système
Le conteneur système inclut la base de données Conteneur racine et toutes les bases de données pluggables de la base de données Conteneur. Par conséquent, le conteneur système est le conteneur logique de la base de données Conteneur elle-même.
-
Aucun ou plusieurs conteneurs d'application
Un conteneur d'application se compose d'un seul root d'application et des bases de données pluggables connectées à ce root. Alors que le conteneur système contient la racine de la base de données Conteneur et toutes les bases de données pluggables de la base de données Conteneur, un conteneur d'application inclut uniquement les bases de données pluggables connectées à la racine de l'application. Une racine d'application appartient à la racine de la base de données Conteneur et à aucun autre conteneur.
-
Aucune ou plusieurs bases de données pluggables créées par l'utilisateur
Une base de données pluggable contient les données et le code requis pour un ensemble spécifique de fonctionnalités (reportez-vous à Bases de données pluggables). Par exemple, une base de données pluggable peut prendre en charge une application spécifique, telle qu'une application de ressources humaines ou de vente. Aucune base de données pluggable n'existe lors de la création de la base de données Conteneur. Vous ajoutez des bases pluggables en fonction des besoins de votre entreprise.
Une base de données pluggable appartient à exactement zéro ou à un conteneur d'application. Si une base de données pluggable appartient à un conteneur d'application, il s'agit d'une base de données pluggable d'application. Par exemple, les bases de données pluggables d'application
cust1_pdbetcust2_pdbpeuvent appartenir au conteneur d'applicationsaas_sales_ac, auquel cas elles n'appartiennent à aucun autre conteneur d'application. Une prédéfinition d'application est une base de données pluggable d'application facultative qui agit comme un modèle de base de données pluggable créé par l'utilisateur, ce qui vous permet de créer rapidement des bases de données pluggables d'application. -
Une base de données pluggable prédéfinie
La base de données pluggable prédéfinie est un modèle fourni par le système que la base de données Conteneur peut utiliser pour créer de nouvelles bases de données pluggables. La base de données pluggable de départ est nommée
PDB$SEED. Vous ne pouvez pas ajouter ou modifier des objets dansPDB$SEED.
Exemple 2-1 Base de données Conteneur sans conteneur d'application
Cet exemple présente une base de données Conteneur simple avec cinq conteneurs : le conteneur système (la base de données Conteneur entière), la racine de la base de données Conteneur, la valeur de départ de la base de données pluggable (PDB$SEED) et deux bases de données pluggables. Chaque base de données pluggable dispose de sa propre application dédiée. Un administrateur de base de données pluggable différent gère chaque base de données pluggable. Un utilisateur commun existe dans une base de données Conteneur avec une seule identité. Dans cet exemple, l'utilisateur commun SYS peut gérer la racine et chaque base de données pluggable. Au niveau physique, cette base de données Conteneur est gérée par une ou plusieurs instances de base de données et contient un ensemble de fichiers de données pour chaque base de données pluggable et pour la base de données Conteneur elle-même.
Figure 2 : Base de données Conteneur sans conteneurs d'application

Description de l'image cncpt345.png
Exemple 2-2 Base de données Conteneur avec conteneur d'applications
Dans cette variante, la base de données Conteneur contient un conteneur d'application nommé saas_sales_ac. Dans le conteneur d'application, la base de données pluggable d'application cust1_pdb prend en charge une application pour un client et la base de données pluggable d'application cust2_pdb prend en charge une application pour un client différent. La base de données Conteneur contient également une base de données pluggable nommée hrpdb, qui prend en charge une application RH, mais n'appartient pas à un conteneur d'application.
Figure 3 : Base de données Conteneur avec conteneur d'applications

Description de l'image cncpt383.png
Dans cet exemple, plusieurs DBA gèrent l'environnement de base de données Conteneur :
-
Un administrateur de base de données Conteneur gère la base de données Conteneur elle-même.
-
Un administrateur de conteneur d'application gère le conteneur
saas_sales_ac, notamment l'installation et les mises à niveau de l'application. -
Un administrateur de base de données pluggable d'application gère les deux bases de données pluggables dans le conteneur
saas_sales_ac:cust1_pdbetcust2_pdb. -
Un administrateur de base de données pluggable gère
hrpdb.
Racine de la base de données Conteneur et conteneur système
La racine de base de données Conteneur, également appelée simplement racine, est un ensemble de schémas, d'objets de schéma et d'objets non schéma auxquels appartiennent toutes les bases de données pluggables.
Chaque base de données Conteneur possède un seul et unique conteneur racine nommé CDB$ROOT. La racine stocke les métadonnées système requises pour gérer les bases pluggables. Toutes les bases pluggables appartiennent à la racine. Le conteneur système est la racine de la base de données Conteneur et toutes les bases de données pluggables qui appartiennent à cette racine.
La racine de base de données Conteneur ne stocke pas les données utilisateur. Oracle recommande de ne pas ajouter d'objets communs à la racine ou de modifier les schémas fournis par Oracle dans la racine. Toutefois, vous pouvez créer des utilisateurs et des rôles communs pour l'administration de la base de données. Un utilisateur commun disposant des privilèges nécessaires peut basculer d'un conteneur à un autre.
Oracle recommande AL32UTF8 pour le jeu de caractères racine. Les bases pluggables avec des jeux de caractères différents peuvent résider dans la même base de données Conteneur sans nécessiter de conversion de jeu de caractères.
Exemple 2-3 Tous les conteneurs d'une base Conteneur
La requête suivante, émise par un utilisateur administratif connecté à la racine de base de données Conteneur, répertorie tous les conteneurs de la base de données Conteneur (y compris la racine de base de données d'origine et la racine de base de données Conteneur), classés par 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
Voir aussi : "Comptes utilisateur communs"
Bases pluggables
Une base de données pluggable est un ensemble créé par l'utilisateur de schémas, d'objets et de structures associées qui apparaît logiquement dans une application client en tant que base de données distincte.
Chaque base de données pluggable appartient à SYS, quel que soit l'utilisateur qui l'a créée. SYS est un utilisateur commun dans la base de données Conteneur, ce qui signifie que cet utilisateur a la même identité dans la racine et dans toutes les bases existantes et futures de la base de données Conteneur.
-
Types de bases de données pluggables Toutes les bases de données pluggables sont créées par l'utilisateur avec l'instruction
CREATE PLUGGABLE DATABASE, à l'exception dePDB$SEED, qui est fourni par Oracle. -
Objectif des bases de données pluggables Pour une application, une base de données pluggable est une base de données Oracle autonome et entièrement fonctionnelle. Vous pouvez consolider les bases de données pluggables en une seule base de données Conteneur pour réaliser des économies d'échelle, tout en maintenant l'isolation entre les bases de données pluggables.
-
Bases de données pluggables proxy Une base de données pluggable proxy fait référence à une base de données pluggable distante, appelée base de données pluggable référencée.
-
Les noms des conteneurs de bases pluggables d'une base de données Conteneur partagent le même espace de noms, ce qui signifie qu'ils doivent avoir des noms uniques dans cet espace de noms.
-
Liens de base de données entre bases de données pluggables Par défaut, un utilisateur connecté à une base de données pluggable doit utiliser des liens de base de données pour accéder aux objets d'une autre base de données pluggable.
Types de base de données pluggable
Toutes les bases de données pluggables sont créées par l'utilisateur avec l'instruction CREATE PLUGGABLE DATABASE, à l'exception de PDB$SEED, qui est fournie par Oracle.
Vous pouvez créer les types de base de données pluggable suivants.
Base de données pluggable standard
Ce type de base de données pluggable résulte de l'exécution de CREATE PLUGGABLE DATABASE sans spécifier la base de données pluggable en tant que base de données pluggable d'origine, proxy ou racine d'application. Ses capacités dépendent du conteneur dans lequel vous le créez :
-
Base de données pluggable connectée à la racine de base de données Conteneur
Cette base de données pluggable appartient au conteneur racine de base de données Conteneur et non à un conteneur d'application. Ce type de base de données pluggable ne peut pas utiliser d'objets communs d'application. Reportez-vous à Objets communs des applications.
-
Base de données pluggable d'application
Une base de données pluggable d'application appartient à un seul conteneur d'application. Contrairement aux bases pluggables connectées à la racine de base de données Conteneur, les bases pluggables d'application peuvent partager une définition d'application maître dans un conteneur d'application. Par exemple, une table
usa_zipcodesdans une racine d'application peut être un objet commun lié aux données, ce qui signifie qu'elle contient des données accessibles par toutes les bases de données pluggables d'application connectées à cette racine. Les bases de données pluggables qui ne résident pas dans le conteneur d'application ne peuvent pas accéder à ses objets communs d'application.
Racine d'application
Considérez une racine d'application comme un conteneur racine propre à l'application. Il sert de référentiel pour une définition maître d'un back-end d'application, y compris les données et métadonnées communes. Pour créer une racine d'application, connectez-vous à la racine de base de données Conteneur et indiquez la clause AS APPLICATION CONTAINER dans une instruction CREATE PLUGGABLE DATABASE. Reportez-vous à Application Root.
Prédéfinir des bases pluggables
Contrairement à une base de données pluggable standard, une base de données pluggable prédéfinie n'est pas destinée à prendre en charge une application. La valeur de départ est plutôt un modèle pour la création de bases de données pluggables prenant en charge les applications. Une valeur de départ peut être l'une des suivantes :
-
Prédéfinir la base de données pluggable connectée à la racine de base de données Conteneur (
PDB$SEED)Vous pouvez utiliser ce modèle fourni par le système pour créer des bases de données pluggables dans un conteneur d'application ou dans le conteneur système. Le conteneur système contient exactement une valeur prédéfinie de base de données pluggable. Vous ne pouvez pas supprimer
PDB$SEED, ni y ajouter des objets ou y modifier des objets. -
Base de données pluggable d'origine d'application
Pour accélérer la création de bases de données pluggables d'application dans un conteneur d'application, vous pouvez créer une prédéfinition d'application facultative. Un conteneur d'application contient zéro ou une valeur de départ d'application.
Pour créer une valeur de départ d'application, connectez-vous au conteneur d'application et exécutez l'instruction
CREATE PLUGGABLE DATABASE ... AS SEED. Reportez-vous à Prédéfinition d'application.
Base de données pluggables proxy
Une base de données pluggable proxy est une base de données pluggable qui utilise un lien de base de données pour référencer une base de données pluggable dans une base de données Conteneur distante. Lorsque vous émettez une instruction dans une base pluggable proxy alors que celle-ci est ouverte, l'instruction s'exécute dans la base pluggable référencée.
Vous devez créer une base de données pluggable proxy lorsque vous êtes connecté à la racine de base de données Conteneur ou à la racine d'application. Vous pouvez modifier ou supprimer une base de données pluggable proxy de la même manière qu'une base de données pluggable standard.
Finalité des bases pluggables
Pour une application, une base de données pluggable est une base de données Oracle autonome et entièrement fonctionnelle. Vous pouvez consolider les bases de données pluggables en une seule base de données Conteneur pour réaliser des économies d'échelle, tout en maintenant l'isolation entre les bases de données pluggables.
Vous pouvez utiliser des bases pluggables pour atteindre les objectifs spécifiques suivants :
-
Stocker des données propres à une application
Par exemple, une application de vente peut avoir sa propre base de données pluggable dédiée et une application de ressources humaines peut avoir sa propre base de données pluggable dédiée. Vous pouvez également créer un conteneur d'application, qui est un ensemble nommé de bases de données pluggables, pour stocker un back-end d'application contenant des données et des métadonnées communes.
-
Déplacer des données dans une autre base Conteneur
Une base de données est "enfichable" car vous pouvez la packager en tant qu'unité autonome, appelée base de données pluggable déconnectée, puis la déplacer vers une autre base de données Conteneur.
-
Effectuer des mises à niveau rapides
Vous pouvez déconnecter une base de données pluggable d'une base de données Conteneur dans une version inférieure de la base de données Oracle, puis la connecter à une base de données Conteneur dans une version supérieure.
-
Copier les données rapidement sans perte de disponibilité
Pour les tests et le développement, vous pouvez cloner une base de données pluggable tant qu'elle reste ouverte, en stockant le clone dans la même base de données Conteneur ou dans une autre. Vous pouvez éventuellement indiquer la base de données pluggable en tant que base de données pluggable clone actualisable. Vous pouvez également utiliser la base de données pluggable prédéfinie fournie par Oracle ou une base de données prédéfinie d'application créée par l'utilisateur pour copier de nouvelles bases de données pluggables.
-
Référencer des données dans une autre base Conteneur
Vous pouvez créer une base de données pluggable proxy qui fait référence à une autre base de données pluggable, dans la même base de données Conteneur ou dans une autre base de données Conteneur. Lorsque vous émettez des instructions dans la base de données pluggable proxy, elles sont exécutées dans la base de données pluggable référencée.
-
Isoler les octrois au sein des bases pluggables
Un utilisateur local ou commun disposant des privilèges appropriés peut accorder des privilèges
EXECUTEsur un objet de schéma àPUBLICau sein d'une base de données pluggable individuelle.
Voir aussi :
-
Guide de sécurité Oracle AI Database pour apprendre à accorder des rôles et des privilèges dans une base de données Conteneur
Base de données pluggables proxy
Une base de données pluggable proxy fait référence à une base de données pluggable distante appelée base de données pluggable référencée.
Bien que vous émettiez des instructions SQL dans la base de données pluggable proxy (de référence), ces instructions s'exécutent dans la base de données pluggable référencée. A cet égard, une base de données pluggable proxy est vaguement analogue à un fichier de lien symbolique sous Linux.
Les bases pluggables proxy offrent les avantages suivants :
-
Agréger les données de plusieurs modèles d'application
Les bases de données pluggables proxy vous permettent de créer des applications transparentes qui peuvent agréger des données provenant de plusieurs sources. Ces sources peuvent se trouver dans le même centre de données ou être distribuées entre les centres de données.
-
Activer une racine d'application dans une base de données Conteneur pour propager les modifications d'application vers une autre racine d'application
Supposons que les bases de données Conteneur
cdb_prodetcdb_testaient le même modèle d'application. Vous créez une base de données pluggable proxy dans un conteneur d'application danscdb_prodqui fait référence à une racine d'application danscdb_test. Lorsque vous exécutez des scripts d'installation et de mise à niveau dans la racine d'application danscdb_prod, Oracle AI Database propage ces instructions vers la base de données pluggable proxy, qui les envoie à distance à la racine d'application danscdb_test. Ainsi, la racine d'application danscdb_testdevient une réplique de la racine d'application danscdb_prod.
Pour créer une base de données pluggable proxy, exécutez CREATE PLUGGABLE DATABASE avec la clause AS PROXY FROM, où FROM indique le nom de la base de données pluggable référencée et un lien de base de données. L'instruction de création copie uniquement les fichiers de données appartenant aux tablespaces SYSTEM et SYSAUX.
Exemple 2-4 Création d'une base pluggable proxy
Cet exemple se connecte au conteneur saas_sales_ac dans une base de données Conteneur de production locale. L'utilisateur commun sales_admin crée une base de données pluggable proxy nommée sales_sync_pdb. Cette base de données pluggable d'application référence une racine d'application nommée saas_sales_test_ac dans une base de données Conteneur de développement distante, à laquelle elle accède à l'aide du lien de base de données cdb_dev_rem. Lorsqu'une mise à niveau d'application se produit dans saas_sales_ac dans la base de données Conteneur de production, la mise à niveau est automatiquement propagée à la racine d'application saas_sales_test_ac dans la base de données Conteneur de développement distante.
CONNECT sales_admin@saas_sales_ac
Password: ***********
CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;
Noms des bases pluggables
Les conteneurs d'une base de données Conteneur partagent le même espace de noms, ce qui signifie qu'ils doivent avoir des noms uniques dans cet espace de noms.
Les noms des conteneurs suivants ne doivent pas entrer en conflit dans la même base de données Conteneur :
-
Racine de la base de données Conteneur
-
Bases de données pluggables connectées à la racine de base de données Conteneur
-
Racines d'application
-
Bases de données pluggable d'application
Par exemple, si la même base de données Conteneur contient les conteneurs d'application saas_sales_ac et saas_sales_test_ac, deux bases de données pluggables d'application nommées cust1 ne peuvent pas résider simultanément dans les deux conteneurs. Les règles d'espace de noms empêchent également la création d'une base de données pluggable nommée cust1pdb dans la racine de base de données Conteneur et d'une base de données pluggable nommée cust1pdb dans une racine d'application.
Les noms des bases pluggables et des conteneurs racine d'application doivent suivre les mêmes règles que les noms de service réseau. De plus, étant donné qu'une base de données pluggable ou une racine d'application a un service avec son propre nom, le nom de conteneur doit être unique dans toutes les bases de données Conteneur dont les services sont exposés via un processus d'écoute spécifique. Le premier caractère d'un nom de conteneur créé par l'utilisateur doit être alphabétique, les caractères restants étant alphanumériques ou un trait de soulignement (_). Etant donné que les noms de service ne tiennent pas compte de la casse, les noms de conteneur ne tiennent pas compte de la casse et sont en majuscules même s'ils sont indiqués à l'aide d'identificateurs délimités.
Voir aussi : Référence des services Oracle AI Database Net pour les règles relatives aux noms de service
Liens de base de données entre bases pluggables
Par défaut, un utilisateur connecté à une base de données pluggable doit utiliser des liens de base de données pour accéder aux objets d'une autre base de données pluggable.
Figure 4 : Lien de base de données entre bases pluggables

Description de l'image cncpt384.png
Les exceptions à la règle sont les suivantes :
-
Objet commun lié aux données, accessible par toutes les bases de données pluggables d'application qui contiennent une liaison de données pointant vers cet objet. Par exemple, le conteneur d'application
saas_sales_acpeut contenir la table liée aux donnéesusa_zipcodesdans son application. Dans ce cas, l'utilisateur de base de données Conteneur communc##dbapeut se connecter à une base de données pluggable d'application dans ce conteneur, puis interrogerusa_zipcodesmême si la table réelle réside dans la racine d'application. Dans ce cas, aucun lien de base de données n'est requis. -
Clause
CONTAINERS()dans SQL émise à partir de la racine de base de données Conteneur ou de la racine d'application. A l'aide de cette clause, vous pouvez interroger les données de toutes les bases pluggables connectées à la racine du conteneur.
Lors de la création d'une base de données pluggable proxy, vous devez indiquer un nom de lien de base de données dans la clause FROM de l'instruction CREATE PLUGGABLE DATABASE ... AS PROXY. Si la base de données pluggable proxy et la base de données pluggable référencée résident dans des bases de données Conteneur distinctes, le lien de base de données doit être défini dans la racine de la base de données Conteneur qui contiendra la base de données pluggable proxy. Le lien de base de données doit se connecter à la base de données pluggable référencée distante ou à la racine de la base de données Conteneur distante.
Voir aussi : "Objets communs et locaux"