En el siguiente ejemplo enseñaré como pasar una base de datos Oracle 12.1 que no es un Contenedor e introducirla en un Contenedor, es decir, convertirla en un PDB y luego agregarla a un Contenedor utilizando el nuevo paquete DBMS_PDB.
Para este ejemplo se tienen las siguientes instancias:
[oracle@orcl12c ~]$ ps -ef |grep pmon
grid 2151 1 0 09:03 ? 00:00:03 asm_pmon_+ASM
oracle 2221 1 0 09:03 ? 00:00:03 ora_pmon_orcl
oracle 2448 1 0 09:04 ? 00:00:04 ora_pmon_cdb1
oracle 9360 1980 0 15:27 pts/0 00:00:00 grep pmon
ORCL: Es la base de datos non-CDB
CDB1: Es la base de datos Contenedor
+ASM: Es la instanca de ASM donde las 2 bases de datos guardan sus archivos.
Poner la base de datos non-CDB en modo READ-ONLY:
[oracle@orcl12c ~]$ export ORACLE_SID=orcl
sqlplus / as sysdba
SQL> startup mount;
SQL> alter database open read only;
Generar un archivo que describe la actual base de datos non-CDB como un PDB:
SQL> exec dbms_pdb.describe ('/home/oracle/orcl.xml');
PL/SQL procedure successfully completed.
Verificar que el actual non-CDB pueda conectarse como PDB a un Contenedor:
SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/home/oracle/orcl.xml',
pdb_name => 'PDB2')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
YES
PL/SQL procedure successfully completed.
Nota: Si el resultado es "NO" consultar la vista "PDB_PLUG_IN_VIOLATIONS" para ver los errores.
Conectarse a al contenedor con un usuario común que contenga el privilegio "CREATE PLUGGABLE DATABASE":
SQL> CREATE PLUGGABLE DATABASE pdb2 USING '/home/oracle/orcl.xml';
Pluggable database created.
Creación de un servicio en el tnsnames.ora que apunte al PDB que estamos creando (pdb2):
[oracle@orcl12c ~]$ cd $ORACLE_HOME/network/admin
[oracle@orcl12c admin]$ vi tnsnames.ora
Agregar lo siguiente:
PDB2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dgomez12c.oraclefromguatemala)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME =pdb2 )
)
)
Conectarse a la nueva base de datos PDB utilizando el servicio en el tnsnames.ora:
[oracle@orcl12c admin]$ sqlplus sys@pdb2 as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Fri Jul 26 15:35:13 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
SQL>
Verificar que estemos conectados al correcto PDB:
SQL> show con_name
CON_NAME
------------------------------
PDB2
Ejecutar el script "noncdb_to_pdb": Este script sirve para eliminar toda la Metadata que existe en el PDB y que ya no se necesita, recuerde que antes el PDB era un non-CDB por lo cual necesitaba tener la metadata de los objetos proporcionados por Oracle y que ahora ya no se necesitan pues esa información la contiene el diccionario del CDB:
SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb
Nota: Este procedimiento puede durar mucho tiempo por lo que se recomienda ejecutarlo como con una herramienta como "nohup".
Abrir el PDB:
SQL> alter pluggable database pdb2 open;
Pluggable database altered.
Verificar que el PDB esté creado:
SQL> select con_id, name from v$pdbs;
CON_ID NAME
---------- ------------------------------
2 PDB$SEED
3 PDB1
4 PDB2