PDB Archive Files for Unplug and Plugin

Oracle 12.2 ha introdotto la funzione di unplug/plugin che permette la creazione di “PDB archive files” che sono una copia zippata dei datafiles e del file descrittore xml del PDB interessato.

Supponiamo di dover spostare il pluggable PDL01  dal container CDB19L01 al container CDB19L02.
Questa è la situazione attuale:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDL01                          READ WRITE NO

SQL> alter session set container=PDL01;

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDL01                          READ WRITE NO

SQL> select * from user1.emp;

         X
----------
         1
         2
         2
         3
         4

1) Chiuedere il pdb

SQL> ALTER PLUGGABLE DATABASE PDL01 CLOSE;

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDL01                          MOUNTED


2) Creare il file zip copia dei datafile e del file descrittore xml.

Collegarsi al root container 

SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;

Session altered.

SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT

SQL> ALTER PLUGGABLE DATABASE  PDL01 UNPLUG INTO '/u01/pdl01.pdb';

Pluggable database altered.

SQL> select pdb_name, status  from CDB_PDBS;

PDB_NAME   STATUS
---------- ------------------------
PDL01            UNPLUGGED
PDB$SEED   NORMAL

E' possibile cancellare il pdb inclusi i datafiles perchè è stato creato il file archiviato.

SQL>  DROP PLUGGABLE DATABASE pdl01 INCLUDING DATAFILES


3) Spostare manualmente il file ".pdb" nel server contenente il secondo container e verificare la compatibilità del PDB con il nuovo container.

$ export ORACLE_SID=CDB19L02
$ sqlplus
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> 
SET SERVEROUTPUT ON
DECLARE
  l_result BOOLEAN;
BEGIN
  l_result := DBMS_PDB.check_plug_compatibility(
                pdb_descr_file => '/u01/pdl01.pdb',
                pdb_name       => 'pdl01');

  IF l_result THEN
    DBMS_OUTPUT.PUT_LINE('compatible');
  ELSE
    DBMS_OUTPUT.PUT_LINE('incompatible');
  END IF;
END;
/

compatible
PL/SQL procedure successfully completed.

Per visualizzare il motivo della incompatibilità interrogare la tabella PDB_PLUG_IN_VIOLATIONS.


4) Effettuare il plug del pdb

SQL> CREATE PLUGGABLE DATABASE pdl01 
USING '/u01/pdl01.pdb' CREATE_FILE_DEST='/u01/app/oracle/oradata/CDB19L02/' ;

Pluggable database created.

5) Verifica

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         5 PDL01                              MOUNTED

SQL> ALTER PLUGGABLE DATABASE  PDL01 OPEN READ WRITE;

Pluggable database altered.

SQL> alter session set container=PDL01 ;

Session altered.

SQL> select * from user1.emp;

         X
----------
         1
         2
         2
         3
         4

Verificare che sotto /u01/app/oracle/oradata/CDB19L02 sia stata creata la directory PDL01.


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database