CDB y PDB
La arquitectura multiinquilino permite que una base de datos Oracle funcione como una base de datos de contenedores multiinquilino (CDB).
A partir de Oracle Database 21c, la única arquitectura soportada es una base de datos de contenedor multi-inquilino. En versiones anteriores, Oracle admitía bases de datos sin contenedor (no CDB).
-
Acerca de los contenedores en una CDB Un contenedor es una recopilación de esquemas, objetos y estructuras relacionadas en una base de datos de contenedores multiinquilino (CDB). Dentro de una CDB, cada contenedor tiene un ID y un nombre únicos.
-
La raíz de CDB y el contenedor del sistema La raíz de CDB, también denominada simplemente raíz, es una recopilación de esquemas, objetos de esquema y objetos no de esquema a los que pertenecen todas las PDB.
-
PDB Un PDB es un juego de esquemas, objetos y estructuras relacionadas creado por el usuario que aparece lógicamente en una aplicación cliente como una base de datos independiente.
Acerca de los contenedores en una CDB
Un contenedor es una recopilación de esquemas, objetos y estructuras relacionadas en una base de datos de contenedor (CDB) multi-inquilino. Dentro de una CDB, cada contenedor tiene un ID y un nombre únicos.
Una CDB incluye cero, una o varias bases de datos conectables (PDB) creadas por el cliente y contenedores de aplicaciones. Una PDB es una recopilación portátil de esquemas, objetos de esquema y objetos no de esquema que aparece en un cliente de Red de Oracle como una base de datos independiente. Un contenedor de aplicación es un componente de CDB opcional creado por el usuario que almacena datos y metadatos para uno o más backends de aplicaciones. Una CDB incluye cero o más contenedores de aplicaciones.
Nota: en "Contenedores de aplicaciones" se explican los contenedores de aplicaciones en detalle.
La siguiente figura representa los posibles contenedores en una CDB.
Figura 1: Contenedores en una CDB

Descripción de la ilustración admin112.png
Cada CDB tiene los siguientes contenedores:
-
Exactamente un contenedor raíz de CDB (también denominado simplemente root)
La raíz de CDB es una recopilación de esquemas, objetos de esquema y objetos no de esquema a los que pertenecen todas las PDB (consulte "CDB y PDB"). La raíz almacena los metadatos proporcionados por Oracle y los usuarios comunes. Un ejemplo de metadatos es el código fuente de los paquetes PL/SQL proporcionados por Oracle. Un usuario común es un usuario de base de datos conocido en cada contenedor (consulte "Cuentas de Usuario Comunes"). El contenedor raíz se denomina
CDB$ROOT. -
Exactamente un contenedor de sistema
El contenedor del sistema incluye la CDB raíz y todas las PDB de la CDB. Por lo tanto, el contenedor del sistema es el contenedor lógico para la propia CDB.
-
Cero o más contenedores de aplicaciones
Un contenedor de aplicación consta de exactamente una raíz de aplicación y las PDB conectadas a esta raíz. Mientras que el contenedor del sistema contiene la raíz de la CDB y todas las PDB dentro de la CDB, un contenedor de aplicaciones incluye solo las PDB conectadas a la raíz de la aplicación. Una raíz de aplicación pertenece a la raíz de CDB y a ningún otro contenedor.
-
Cero o más PDB creadas con el usuario
Una PDB contiene los datos y el código necesarios para un conjunto de funciones específico (consulte "PDB"). Por ejemplo, una PDB puede soportar una aplicación específica, como una aplicación de recursos humanos o de ventas. No existen PDB en la creación de la CDB. Agregue PDB en función de los requisitos de negocio.
Una PDB pertenece exactamente a cero o a un contenedor de aplicaciones. Si una PDB pertenece a un contenedor de aplicación, es una PDB de aplicación. Por ejemplo, las PDB de la aplicación
cust1_pdbycust2_pdbpueden pertenecer al contenedor de la aplicaciónsaas_sales_ac, en cuyo caso no pertenecen a ningún otro contenedor de aplicación. Un inicio de aplicación es una PDB de aplicación opcional que actúa como una plantilla de PDB creada por el usuario, lo que le permite crear nuevas PDB de aplicación rápidamente. -
Exactamente una PDB inicial
La PDB inicial es una plantilla proporcionada por el sistema que la CDB puede utilizar para crear nuevas PDB. La PDB inicial se denomina
PDB$SEED. No puede agregar ni modificar objetos enPDB$SEED.
Ejemplo 2-1 CDB sin contenedores de aplicaciones
En este ejemplo se muestra una CDB simple con cinco contenedores: el contenedor del sistema (la CDB completa), la raíz de la CDB, el valor inicial de la PDB (PDB$SEED) y dos PDB. Cada PDB tiene su propia aplicación dedicada. Un administrador de PDB diferente gestiona cada PDB. Existe un usuario común en una CDB con una única identidad. En este ejemplo, el usuario común SYS puede gestionar la raíz y todas las PDB. En el nivel físico, esta CDB está gestionada por una o más instancias de base de datos y contiene un juego de archivos de datos para cada PDB y para la propia CDB.
Figura 2: CDB sin contenedores de aplicaciones

Descripción de la ilustración cncpt345.png
Ejemplo 2-2 CDB con un contenedor de aplicaciones
En esta variación, la CDB contiene un contenedor de aplicación denominado saas_sales_ac. En el contenedor de aplicación, la PDB de aplicación cust1_pdb soporta una aplicación para un cliente, y la PDB de aplicación cust2_pdb soporta una aplicación para un cliente diferente. La CDB también contiene una PDB denominada hrpdb, que soporta una aplicación HR, pero no pertenece a un contenedor de aplicaciones.
Figura 3: CDB con un contenedor de aplicaciones

Descripción de la ilustración cncpt383.png
En este ejemplo, varios DBA gestionan el entorno de CDB:
-
Un administrador de CDB gestiona la propia CDB.
-
Un administrador del contenedor de aplicaciones gestiona el contenedor
saas_sales_ac, incluidas la instalación y las actualizaciones de la aplicación. -
Un administrador de PDB de aplicación gestiona las dos PDB en el contenedor
saas_sales_ac:cust1_pdbycust2_pdb. -
Un administrador de PDB gestiona
hrpdb.
La raíz de la CDB y el contenedor del sistema
La raíz de CDB, también denominada simplemente raíz, es una recopilación de esquemas, objetos de esquema y objetos no de esquema a los que pertenecen todas las PDB.
Cada CDB tiene un único contenedor raíz denominado CDB$ROOT. La raíz almacena los metadatos del sistema necesarios para gestionar PDB. Todas las PDB pertenecen a la raíz. El contenedor del sistema es la raíz de la CDB y todas las PDB que pertenecen a esta raíz.
La raíz de CDB no almacena datos de usuario. Oracle recomienda que no agregue objetos comunes a la raíz ni modifique los esquemas proporcionados por Oracle en la raíz. Sin embargo, puede crear usuarios y roles comunes para la administración de bases de datos. Un usuario común con los privilegios necesarios puede cambiar entre contenedores.
Oracle recomienda AL32UTF8 para el juego de caracteres raíz. Las PDB con distintos juegos de caracteres pueden residir en la misma CDB sin necesidad de convertir los juegos de caracteres.
Ejemplo 2-3 Todos los contenedores de una CDB
La siguiente consulta, emitida por un usuario administrativo conectado a la raíz de CDB, muestra todos los contenedores de la CDB (incluidas la raíz de CDB e inicial), ordenados por 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
Consulte también: "Cuentas de Usuario Comunes"
PDB
Un PDB es un juego de esquemas, objetos y estructuras relacionadas creado por el usuario que aparece de forma lógica en una aplicación cliente como una base de datos independiente.
Cada PDB es propiedad de SYS, independientemente del usuario que haya creado la PDB. SYS es un usuario común en la CDB, lo que significa que este usuario que tiene la misma identidad en la raíz y en cada PDB existente y futura dentro de la CDB.
-
Tipos de PDB Todas las PDB se crean mediante la sentencia
CREATE PLUGGABLE DATABASE, exceptoPDB$SEED, que es proporcionada por Oracle. -
Propósito de las PDB Para una aplicación, una PDB es una base de datos Oracle autónoma y totalmente funcional. Puede consolidar PDB en una única CDB para lograr economías de escala, al tiempo que mantiene el aislamiento entre las PDB.
-
PDB de proxy Una PDB de proxy hace referencia a una PDB remota, denominada PDB de referencia.
-
Los contenedores de nombres para PDB en una CDB comparten el mismo espacio de nombres, lo que significa que deben tener nombres únicos dentro de este espacio de nombres.
-
Enlaces de Base de Datos entre PDB Por defecto, un usuario conectado a una PDB debe utilizar enlaces de base de datos para acceder a objetos de una PDB diferente.
Tipos de PDB
Todas las PDB se crean con la sentencia CREATE PLUGGABLE DATABASE, excepto PDB$SEED, que es proporcionada por Oracle.
Puede crear los siguientes tipos de PDB.
PDB estándar
Este tipo de PDB resulta de la ejecución de CREATE PLUGGABLE DATABASE sin especificar la PDB como una base de datos inicial, PDB de proxy o raíz de aplicación. Sus capacidades dependen del contenedor en el que se cree:
-
PDB conectada a la raíz de CDB
Esta PDB pertenece al contenedor raíz de CDB y no a un contenedor de aplicación. Este tipo de PDB no puede utilizar objetos comunes de aplicación. Consulte "Objetos comunes de aplicación".
-
PDB de aplicación
Una PDB de aplicación pertenece exactamente a un contenedor de aplicación. A diferencia de las PDB conectadas a la raíz de CDB, las PDB de aplicación pueden compartir una definición de aplicación maestra dentro de un contenedor de aplicación. Por ejemplo, una tabla
usa_zipcodesen una raíz de aplicación puede ser un objeto común enlazado a datos, lo que significa que contiene datos a los que pueden acceder todas las PDB de aplicación conectadas a esta raíz. Las PDB que no residen en el contenedor de aplicaciones no pueden acceder a los objetos comunes de su aplicación.
Raíz de Aplicación
Considere una raíz de aplicación como un contenedor raíz específico de la aplicación. Sirve como repositorio para una definición maestra de un backend de aplicación, incluidos los datos y metadatos comunes. Para crear una raíz de aplicación, conéctese a la raíz de CDB y especifique la cláusula AS APPLICATION CONTAINER en una sentencia CREATE PLUGGABLE DATABASE. Consulte "Application Root".
PDB iniciales
A diferencia de una PDB estándar, una PDB inicial no está pensada para soportar una aplicación. En su lugar, el valor inicial es una plantilla para la creación de PDB que soportan aplicaciones. Un valor inicial puede ser uno de los siguientes:
-
Predefinir PDB conectada en la raíz de CDB (
PDB$SEED)Puede utilizar esta plantilla proporcionada por el sistema para crear nuevas PDB en un contenedor de aplicaciones o en el contenedor del sistema. El contenedor del sistema contiene exactamente un valor inicial de PDB. No puede borrar
PDB$SEEDni agregar ni modificar objetos en él. -
PDB inicial de aplicación
Para acelerar la creación de PDB de aplicación en un contenedor de aplicación, puede crear un inicio de aplicación opcional. Un contenedor de aplicación contiene cero o un valor inicial de aplicación.
Puede crear un valor inicial de aplicación conectándose al contenedor de aplicación y ejecutando la sentencia
CREATE PLUGGABLE DATABASE ... AS SEED. Consulte "Application Seed".
PDB de proxy
Una PDB de proxy es una PDB que utiliza un enlace de base de datos para hacer referencia a una PDB en una CDB remota. Cuando emite una sentencia en una PDB de proxy mientras la PDB está abierta, la sentencia se ejecuta en la PDB a la que se hace referencia.
Debe crear una PDB de proxy mientras está conectada a la raíz de CDB o a la raíz de aplicación. Puede modificar o borrar una PDB de proxy del mismo modo que una PDB estándar.
Objetivo de las PDB
Para una aplicación, una PDB es una base de datos Oracle autónoma y totalmente funcional. Puede consolidar PDB en una única CDB para lograr economías de escala, al tiempo que mantiene el aislamiento entre las PDB.
Puede utilizar PDB para lograr los siguientes objetivos específicos:
-
Almacenar datos específicos de una aplicación
Por ejemplo, una aplicación de ventas puede tener su propia PDB dedicada y una aplicación de recursos humanos puede tener su propia PDB dedicada. También puede crear un contenedor de aplicación, que es una recopilación con nombre de PDB, para almacenar un backend de aplicación que contenga datos y metadatos comunes.
-
Mover datos a una CDB diferente
Una base de datos es "conectable" porque puede empaquetarla como una unidad autónoma, denominada PDB desconectada y, a continuación, moverla a otra CDB.
-
Realizar actualizaciones rápidas
Puede desconectar una PDB de una CDB en una versión inferior de la base de datos Oracle y, a continuación, conectarla a una CDB en una versión superior.
-
Copiar datos rápidamente sin perder disponibilidad
Para pruebas y desarrollo, puede clonar una PDB mientras permanece abierta, almacenando la clonación en la misma CDB o en otra diferente. Opcionalmente, puede especificar la PDB como PDB de clonación de refrescamiento. También puede utilizar la PDB inicial proporcionada por Oracle o un inicio de aplicación creado por el usuario para copiar nuevas PDB.
-
Datos de referencia en una CDB diferente
Puede crear una PDB de proxy que haga referencia a una PDB diferente, ya sea en la misma CDB o en una CDB independiente. Al emitir sentencias en la PDB de proxy, se ejecutan en la PDB a la que se hace referencia.
-
Aislar permisos en PDB
Un usuario local o común con los privilegios adecuados puede otorgar privilegios
EXECUTEen un objeto de esquema aPUBLICen una PDB individual.
Consulte además:
-
Oracle AI Database Security Guide para aprender a otorgar roles y privilegios en una CDB
PDB de proxy
Una PDB de proxy hace referencia a una PDB remota, denominada PDB de referencia.
Aunque emita sentencias SQL en la PDB de proxy (de referencia), las sentencias se ejecutan en la PDB de referencia. En este sentido, una PDB de proxy es vagamente análoga a un archivo de enlace simbólico en Linux.
Las PDB de proxy proporcionan las siguientes ventajas:
-
Agregar datos de varios modelos de aplicación
Las PDB de proxy permiten crear aplicaciones transparentes de ubicación que pueden agregar datos de varios orígenes. Estas fuentes pueden estar en el mismo centro de datos o distribuidas entre centros de datos.
-
Activar una raíz de aplicación en una CDB para propagar los cambios de aplicación a una raíz de aplicación diferente
Supongamos que las CDB
cdb_prodycdb_testtienen el mismo modelo de aplicación. Puede crear una PDB de proxy en un contenedor de aplicación encdb_prodque haga referencia a una raíz de aplicación encdb_test. Al ejecutar scripts de instalación y cambio de versión en la raíz de aplicación encdb_prod, Oracle AI Database propaga estas sentencias a la PDB de proxy, que a su vez las envía de forma remota a la raíz de aplicación encdb_test. De esta forma, la raíz de aplicación encdb_testse convierte en una réplica de la raíz de aplicación encdb_prod.
Para crear una PDB de proxy, ejecute CREATE PLUGGABLE DATABASE con la cláusula AS PROXY FROM, donde FROM especifica el nombre de PDB de referencia y un enlace de base de datos. La sentencia de creación solo copia los archivos de datos que pertenecen a los tablespaces SYSTEM y SYSAUX.
Ejemplo 2-4 Creación de una PDB de proxy
Este ejemplo se conecta al contenedor saas_sales_ac en una CDB de producción local. El usuario común sales_admin crea una PDB de proxy denominada sales_sync_pdb. Esta PDB de aplicación hace referencia a una raíz de aplicación denominada saas_sales_test_ac en una CDB de desarrollo remoto, a la que accede mediante el enlace de base de datos cdb_dev_rem. Cuando se produce una actualización de aplicación en saas_sales_ac en la CDB de producción, la actualización se propaga automáticamente a la raíz de aplicación saas_sales_test_ac en la CDB de desarrollo remoto.
CONNECT sales_admin@saas_sales_ac
Password: ***********
CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;
Nombres para PDB
Los contenedores de una CDB comparten el mismo espacio de nombres, lo que significa que deben tener nombres únicos dentro de este espacio de nombres.
Los nombres de los siguientes contenedores no deben entrar en conflicto dentro de la misma CDB:
-
La raíz de CDB
-
PDB conectadas a la raíz de CDB
-
Raíces de la aplicación
-
PDB de Aplicación
Por ejemplo, si la misma CDB contiene los contenedores de aplicación saas_sales_ac y saas_sales_test_ac, dos PDB de aplicación con el nombre cust1 no pueden residir simultáneamente en ambos contenedores. Las reglas de espacio de nombres también impiden la creación de una PDB denominada cust1pdb en la raíz de la CDB y una PDB denominada cust1pdb en una raíz de aplicación.
Los nombres de las PDB y los contenedores raíz de aplicaciones deben seguir las mismas reglas que los nombres de servicio de red. Además, dado que una PDB o una raíz de aplicación tiene un servicio con su propio nombre, el nombre de contenedor debe ser único en todas las CDB cuyos servicios se exponen a través de un listener específico. El primer carácter de un nombre de contenedor creado por el usuario debe ser alfabético, con el resto de caracteres alfanuméricos o de subrayado (_). Puesto que los nombres de servicio no distinguen entre mayúsculas y minúsculas, los nombres de contenedor no distinguen entre mayúsculas y minúsculas, incluso si se especifican mediante identificadores delimitados.
Consulte también: Referencia de servicios de red de Oracle AI Database para conocer las reglas para los nombres de servicio
Enlaces de Base de Datos entre PDB
Por defecto, un usuario conectado a una PDB debe utilizar enlaces de base de datos para acceder a objetos de una PDB diferente.
Figura 4: Enlace de base de datos entre PDB

Descripción de la ilustración cncpt384.png
Entre las excepciones a la regla se incluyen:
-
Un objeto común enlazado a datos, al que pueden acceder todas las PDB de aplicación que contienen un enlace de datos que apunta a este objeto. Por ejemplo, el contenedor de aplicación
saas_sales_acpuede contener la tabla enlazada a datosusa_zipcodesen su aplicación. En este caso, el usuario de CDB comúnc##dbapuede conectarse a una PDB de aplicación en este contenedor y, a continuación, consultarusa_zipcodesaunque la tabla real resida en la raíz de la aplicación. En este caso, no es necesario ningún enlace de base de datos. -
La cláusula
CONTAINERS()en SQL emitida desde la raíz de la CDB o la raíz de la aplicación. Mediante esta cláusula, puede consultar datos en todas las PDB conectadas a la raíz de contenedor.
Al crear una PDB de proxy, debe especificar un nombre de enlace de base de datos en la cláusula FROM de la sentencia CREATE PLUGGABLE DATABASE ... AS PROXY. Si la PDB de proxy y la PDB de referencia residen en CDB independientes, el enlace de base de datos se debe definir en la raíz de la CDB que contendrá la PDB de proxy. El enlace de base de datos debe conectarse a la PDB a la que se hace referencia remota o a la raíz de CDB de la CDB remota.
Consulte también: "Objetos Comunes y Locales"