блог Oracle на испанском языке

Convertir una base de datos non cdb a pdb

En esta entrada vamos a explicar cómo convertir una base de datos noncdb y convertirla en una base de datos PDB dentro de un contenedor existente usando el método «Plugging a Non-CDB into a CDB».

Partimos de la siguiente siguación:

En uma máquina tenemos una base de datos «test» noncdb que vamos a migrar a una PDB en una base de datos multitenat (CDBORCL) instalada en la misma máquina y en la misma versión.

Máquina: oracle19cdb1
Origen: Oracle 19c (19.3.0.0.0) -> Non-CDB (test)
Destino: Oracle 19c (2(19.3.0.0.0) ) -> CDB (CDBORCL) ->

1- Prerequisitos y validaciones previas

Antes de comezar, revisamos que los parámetros de base de datos son compatibles.
Verificamos que el juego de caracteres origen / destino es compatible.

Base de datos: test

SQL > select *from v$nls_parameters where parameter in (‘NLS_CHARACTERSET’,’NLS_NCHAR_CHARACTERSET’);

PARAMETER VALUE
—————————————————————- ————————-
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16

Base de datos contenedora: CDBORCL




SQL > select *from v$nls_parameters where parameter in (‘NLS_CHARACTERSET’,’NLS_NCHAR_CHARACTERSET’);

PARAMETER VALUE
—————————————————————- ————————-
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16

Comprobamos que no haya componentes / opciones que no están soportadas por las bases de datos PDB.




SQL > select comp_id, version,status from dba_registry:

COMP_ID VERSION STATUS
—————————— —————————— ——————————————–
CATALOG 19.0.0.0.0 VALID
CATPROC 19.0.0.0.0 VALID
RAC 19.0.0.0.0 OPTION OFF
JAVAVM 19.0.0.0.0 VALID
XML 19.0.0.0.0 VALID
CATJAVA 19.0.0.0.0 VALID
APS 19.0.0.0.0 VALID
XDB 19.0.0.0.0 VALID
OWM 19.0.0.0.0 VALID
CONTEXT 19.0.0.0.0 VALID
ORDIM 19.0.0.0.0 VALID
SDO 19.0.0.0.0 VALID
XOQ 19.0.0.0.0 VALID
OLS 19.0.0.0.0 VALID
DV 19.0.0.0.0 VALID

2 – Dejar la base de datos no-CDB en modo lectura

Es recomendable dejar la base de datos en modo read-only, para evitar cambios mientras generasmos el XML.

SHUTDOWN IMMEDIATE;

STARTUP OPEN READ ONLY;

3 – Generar archivo XML descriptivo (non CDB)

Generamos el fichero xml, que guardará la descripción de la base de datos non-cdb que serán utilizados para importar en la base de datos CDB.

BEGIN
DBMS_PDB.DESCRIBE(
pdb_descr_file => ‘/tmp/oracleconraultest.xml’);
END;

/

4 – Verificar compatibilidad (BBDD CDB)

Antes de añadir la base de datos al contenedor CDB (CDBORCL), es necesario saber si es compatible. Para ello ejecutamos.

SET SERVEROUTPUT ON

DECLARE

compatible VARCHAR2(3);

BEGIN

compatible :=

CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(

pdb_descr_file => ‘tmp/oracleconraultest.xml‘)

WHEN TRUE THEN ‘YES’

ELSE ‘NO’

END;

DBMS_OUTPUT.PUT_LINE(compatible);

END;

/

Antes de pasar al siguiente paso, bajamos la base de datos Non CDB.

SHUTDOWN IMEDIATE;

5. Crear el PDB

Hay dos formas de crear la PDB.

Una sería reuitilzando los datafiles actuales. Sin hacer una copia de la base de datos (opcion NOCOPY). Otra con opción COPY, donde se realiza una copia de seguridad de los datafiles de la BBDD.

Al estar en la mísma máquina. Utilizaremos NOCOPY, que obviamente hará que el proceso sea más rápido, ya que no tiene que realizar una copia de los datafiles.
Si se opta por esta opción es muy recomendable realizar un backup anterior al lanzamiento del proceso.

CREATE PLUGGABLE DATABASE test
USING ‘tmp/oracleconraultest.xml
NOCOPY
TEMPFILE REUSE;

Si quieres copiar los datafiles a una nueva ubicación ASM

SCREATE PLUGGABLE DATABASE test
USING ‘/tmp/noncdb.xml’
COPY
FILE_NAME_CONVERT =
(
‘+DATA/NONCDB/’,
‘+DATA/CDB19/TEST/’
);

En la misma máquina ASM normalmente se utiliza NOCOPY, minimizando espacio y tiempo.

CREATE PLUGGABLE DATABASE test
USING ‘tmp/oracleconraultest.xml
NOCOPY
TEMPFILE REUSE;

6. Abrir base de datos modo restricted.

Abrimos la base de datos en modo restricted en la CDB.

ALTER PLUGGABLE DATABASE TEST OPEN RESTRICTED;

Verificamos los errores y vemos que se trata de que aún falta la ejecuíon del script

SELECT name, cause, type, message, status
FROM pdb_plug_in_violations
WHERE name = ‘TEST’
ORDER BY time;

7. Ejecución del script de conversión NonCdb to CDB

Cambiamos la sesión a la pdb que vamos a convertir «test».

ALTER SESSION SET CONTAINER=TEST;

Y ejecutamos la conversión:

@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

Una vez finalizada podemos ver que la conversión se ha realizado correctamente.

Para evitar que en el próximo reinicio la base de datos TEST arranque en modo mounted, con la base de datos abierta ejecutamos.

ALTER PLUGGABLE DATABASE TEST SAVE STATE;

Con esto ya habríamos convertido nuestra BBDD Non CDB a PDB.

Теги:
Предыдущая статья
Oracle ACE