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 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:

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:

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 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:

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:

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:

Consulte además:

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:

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:

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:

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"