viernes, 26 de julio de 2013

Plug a non-CDB in to CDB

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


No hay comentarios:

Publicar un comentario

Oracle ACE Director Award - Deiby Gómez

Thanks #OracleACE Program for this awesome certificate recognizing the work I have done in the community for the last year. Looking forwa...