¿Cómo abrir la semilla pdb en modo de solo lectura?

Abrir PDB$SEED en Modo Solo Lectura en Oracle

Valoración: 4.82 (8817 votos)

En el mundo de Oracle Database 12c y versiones posteriores, la arquitectura Multitenant introdujo un cambio significativo en cómo gestionamos las bases de datos. En lugar de tener múltiples bases de datos independientes, ahora podemos tener una Base de Datos Contenedora (CDB) que aloja varias Bases de Datos Conectables (PDB). Esta arquitectura simplifica la administración, los parches y las actualizaciones.

Dentro de cada CDB, existe una PDB especial llamada PDB$SEED. Esta base de datos no es para uso directo por parte de los usuarios o aplicaciones. Su propósito fundamental es servir como plantilla. Cada vez que creas una nueva PDB, Oracle utiliza PDB$SEED como base para copiar los archivos de datos y la estructura inicial de la nueva base de datos conectable.

¿Cómo puedo ver el contenido de un archivo PDB?
Para estudiar el contenido de PDB asociado con un ensamblaje, haga clic con el botón derecho en él en la ventana Explorador de ensamblajes y elija Mostrar contenido de PDB . dotPeek generará un archivo XML y lo abrirá en el visor de código.
Índice de Contenido

¿Qué es PDB$SEED y por qué es importante?

Como mencionamos, PDB$SEED es la base para la creación de todas las nuevas PDBs. Piensa en ella como una imagen maestra. Para garantizar la consistencia y evitar problemas durante el proceso de clonación (que es lo que ocurre al crear una nueva PDB), Oracle impone una regla estricta: la base de datos PDB$SEED debe estar en modo READ ONLY (solo lectura) para poder crear nuevas PDBs a partir de ella.

Si intentas crear una nueva PDB cuando PDB$SEED no está en modo READ ONLY, recibirás un error. Este requisito asegura que la plantilla no cambie mientras se está copiando, garantizando que todas las nuevas PDBs creadas a partir de ella tengan la misma estructura base.

El requisito para crear nuevas PDBs

La regla es clara y fundamental en la arquitectura Multitenant: para ejecutar el comando CREATE PLUGGABLE DATABASE utilizando PDB$SEED como origen, la base de datos PDB$SEED debe estar abierta en modo READ ONLY.

Veamos cómo verificar el estado actual y, si es necesario, cómo abrir PDB$SEED en este modo particular.

Proceso Paso a Paso: Abriendo PDB$SEED en Solo Lectura

Para realizar esta operación, debes conectarte a la CDB raíz (CDB$ROOT) como un usuario con privilegios administrativos, típicamente SYSDBA.

Conéctate a la CDB raíz:

SQL> connect sys/oracle@cdb1 as sysdba
Connected.

Verifica en qué contenedor te encuentras. Debería ser CDB$ROOT:

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

Ahora, verifica el modo de apertura de la base de datos actual (que es la CDB raíz):

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE

Esto nos muestra que la CDB raíz está en modo READ WRITE, lo cual es normal. Pero necesitamos verificar el estado de las PDBs, incluida PDB$SEED.

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ WRITE NO
3 CDB1_PDB3 MOUNTED

Aquí vemos que PDB$SEED está actualmente en modo READ WRITE. Si intentáramos crear una PDB ahora, fallaría.

Intentemos cerrar PDB$SEED directamente:

SQL> alter pluggable database pdb$seed close;
alter pluggable database pdb$seed close
ERROR at line 1:
ORA-65017: seed pluggable database may not be dropped or altered

Recibimos el error ORA-65017 indicando que la PDB$SEED no puede ser alterada (ni eliminada) de esta manera estándar. Esto es parte de su protección como plantilla del sistema.

Para realizar operaciones específicas en PDB$SEED que no son el uso estándar (como cerrarla o abrirla en un modo específico), a veces es necesario establecer un parámetro oculto. Es importante usar parámetros ocultos con precaución y solo cuando sea necesario y recomendado.

SQL> alter session set "_oracle_script"=TRUE;
Session altered.

Ahora, intentemos cerrar PDB$SEED nuevamente, esta vez usando la opción immediate instances=all para asegurar que se cierre completamente y en todos los nodos si fuera un entorno RAC:

SQL> alter pluggable database pdb$seed close immediate instances=all;
Pluggable database altered.

La base de datos PDB$SEED ha sido cerrada correctamente. Ahora podemos abrirla en el modo deseado: READ ONLY.

SQL> alter pluggable database pdb$seed open read only;
Pluggable database altered.

¡Excelente! La operación fue exitosa. Ahora PDB$SEED debería estar en modo READ ONLY.

Verificando el Estado

Podemos verificar el estado de PDB$SEED de varias maneras. Primero, podemos cambiar de contenedor para conectarnos directamente a PDB$SEED y verificar su modo de apertura desde dentro:

SQL> alter session set container=PDB$SEED;
Session altered.

Verificamos que estamos en el contenedor correcto:

SQL> show con_name
CON_NAME
------------------------------
PDB$SEED

Y ahora verificamos el modo de apertura de la base de datos actual (PDB$SEED):

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY

Esto confirma que PDB$SEED está en modo READ ONLY, tal como lo necesitábamos.

Podemos volver a la CDB raíz para ver el estado de todas las PDBs:

SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB3 MOUNTED

El listado de PDBs confirma que PDB$SEED está en READ ONLY. Ya podemos crear nuevas PDBs.

Creación de una Nueva PDB (Demostración)

Ahora que PDB$SEED está en el estado requerido (READ ONLY), podemos proceder a crear una nueva PDB. Anteriormente, si hubiéramos intentado esto con PDB$SEED en READ WRITE, habríamos obtenido el error ORA-65081: database or pluggable database is not open in read only mode (o similar, dependiendo de la versión y el contexto del intento fallido).

Desactivamos el parámetro oculto que usamos antes, ya que no es necesario para la creación estándar de PDBs:

SQL> alter session set "_oracle_script"=FALSE;
Session altered.

Y procedemos a crear la nueva PDB:

SQL> create pluggable database cdb1_pdb4 admin user user1 identified by oracle;
Pluggable database created.

La creación fue exitosa porque PDB$SEED estaba en el estado correcto.

Después de crear una PDB, generalmente la abrimos para poder usarla:

SQL> alter pluggable database cdb1_pdb4 open;
Pluggable database altered.

Verifiquemos el estado final de todas las PDBs:

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB3 MOUNTED
4 CDB1_PDB4 READ WRITE NO

Como se esperaba, PDB$SEED permanece en READ ONLY, mientras que la nueva PDB (CDB1_PDB4) se abre en READ WRITE por defecto.

Modos de Apertura de PDBs

Las PDBs, al igual que las bases de datos no-CDB, pueden estar en diferentes estados o modos de apertura. Aquí hay una breve tabla resumen:

Modo de AperturaDescripciónUso Típico
MOUNTEDLa PDB está montada pero no abierta. Los archivos de control están leídos.Recuperación, ciertas operaciones de administración.
READ ONLYLa PDB está abierta y se pueden leer datos, pero no modificar.Como plantilla (PDB$SEED), acceso de sólo lectura a datos.
READ WRITELa PDB está abierta y se pueden leer y modificar datos.Uso normal por aplicaciones y usuarios.
MIGRATEModo especial para realizar upgrades de la PDB.Procesos de actualización.

Consideraciones Finales

Es importante recordar que PDB$SEED es una base de datos del sistema y no debe ser modificada directamente por los usuarios. Oracle gestiona internamente las actualizaciones de PDB$SEED durante los parches o upgrades de la CDB.

Mantener PDB$SEED en modo READ ONLY es el estado por defecto y recomendado cuando no se están aplicando parches o realizando otras operaciones de mantenimiento de Oracle sobre ella misma. Solo se requiere abrirla en READ WRITE en escenarios muy específicos, generalmente indicados por la documentación de Oracle para procesos de mantenimiento del sistema.

Preguntas Frecuentes (FAQ)

¿Por qué obtengo ORA-65081 al crear una PDB?

Este error (ORA-65081: database or pluggable database is not open in read only mode) ocurre porque la base de datos plantilla (generalmente PDB$SEED) no está abierta en modo READ ONLY, que es un requisito para crear nuevas PDBs a partir de ella.

¿Puedo modificar PDB$SEED?

No, en general no debes modificar PDB$SEED. Es una plantilla del sistema. Cualquier personalización de PDBs debe hacerse después de su creación, en la nueva PDB misma. Intentar modificarla directamente puede causar el error ORA-65017.

¿Qué significa el parámetro _oracle_script?

_oracle_script es un parámetro de sesión oculto. A veces es necesario establecerlo a TRUE para permitir ciertas operaciones privilegiadas del sistema, como cerrar PDB$SEED. Debe usarse con precaución y solo cuando sea estrictamente necesario, entendiendo sus implicaciones.

¿Debo dejar PDB$SEED siempre en READ ONLY?

Sí, el estado por defecto y recomendado para PDB$SEED es READ ONLY. Solo se abre en READ WRITE para propósitos específicos de mantenimiento del sistema por parte de Oracle, como la aplicación de parches que afectan a la semilla misma.

Dominar la gestión de PDB$SEED y comprender por qué debe estar en modo READ ONLY para la creación de nuevas PDBs es un conocimiento esencial para cualquier administrador de bases de datos Oracle que trabaje con la arquitectura Multitenant.

Si quieres conocer otros artículos parecidos a Abrir PDB$SEED en Modo Solo Lectura en Oracle puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir