Unplugging and Plugging PDB

 Unplugging e Plugging PDB consiste nello sganciare un pdb e agganciarlo su un altro container o sullo stesso.

1) Collegarsi al root container come sysdba e aprire tutti i pdb.

SQL> show con_name

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

SQL> alter pluggable database all open;

Pluggable database altered.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------------------ ----------
2 PDB$SEED    READ ONLY       NO
3 ORCLPDB     READ WRITE    NO
4 PDB5              READ WRITE    NO



2) Chiudere il pdb che si vuole sganciare. In questo caso è pdb5.

SQL> alter pluggable database pdb5 close immediate;

SQL> show pdbs

    CON_ID CON_NAME OPEN MODE  RESTRICTED
---------- -------------------------------------------------------------
4           PDB5          MOUNTED


3) Creare un file xml che contiene i metadati del pdb da unplugged. Attenzione i file xml non contiene i dati (datafiles) ma solo la struttura del pdb.

SQL> alter pluggable database pdb5 unplug into '/u01/app/oracle/oradata/pdb5.xml';

Pluggable database altered.


4) Spostare manualmente il file ".xml" e tutti i corrispondenti datafiles nel server di destinazine se diverso dalla sorgente.

Se si vuole cancellare il pdb5 mantenere i datafile fino al termine dell'operazione di plug.

SQL> drop pluggable database pdb5 keep datafiles;

Pluggable database dropped.

SQL> select con_id,name,open_mode from v$pdbs;

    CON_ID NAME OPEN_MODE
------------------------- ------------------------- ----------
2 PDB$SEED              READ ONLY
3 ORCLPDB      READ WRITE

Il pdb5 non è più presente ma se si accede alla sua direcorty sono ancora presente i datafile.

[oracle@test pdb5]$ cd $ORACLE_BASE/oradata/ORCL/pdb5
[oracle@test pdb5]$ ls -lrt
total 793632
-rw-r----- 1 oracle oinstall   5251072 Sep  3 15:24 users01.dbf
-rw-r----- 1 oracle oinstall 104865792 Sep  3 15:24 undotbs01.dbf
-rw-r----- 1 oracle oinstall 408952832 Sep  3 15:24 sysaux01.dbf
-rw-r----- 1 oracle oinstall 293609472 Sep  3 15:24 system01.dbf

[oracle@test pdb5]$ scp * oralce@server2: $ORACLE_BASE/oradata/ORCL/pdb5/

[oracle@test pdb5]$  scp /u01/app/oracle/oradata/pdb5.xml   oralce@server2: /u01/app/oracle/oradata/

Attenzione sul server di destinazione creare la stessa directory del server sorgente.
Se invece il pdb viene creato sotto lo stesso server non c'è bisogno di spostare i datafiles e il file xml.


5) Verificare la compatibilità: se lo spostamento fatto sullo stesso container root non è necessaria.

DECLARE
  l_result BOOLEAN;
BEGIN
  l_result := DBMS_PDB.check_plug_compatibility(
                pdb_descr_file => '/u01/app/oracle/oradata/pdb5.xml',
                pdb_name => 'PDB5');

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



5) Effettuare il plug del pdb5 che sarà rinominato in pdbtest usando il file xml generato.

SQL> CREATE PLUGGABLE DATABASE pdbtest
USING '/u01/app/oracle/oradata/pdb5.xml'
COPY
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/ORCL/pdb5/',
                  '/u01/app/oracle/oradata/ORCL/pdbtest/')


6) Verifica

SQL> select name,con_id,open_mode from v$pdbs ;

NAME       CON_ID OPEN_MODE
------------------------- ---------- --------------------
PDB$SEED    2     READ ONLY
ORCLPDB    3     READ WRITE
PDBTEST    5     MOUNTED

Viene creata in automatico la directory pdbtest su filesystem.

SQL> alter session set container=pdbtest;

SQL> alter pluggable database pdbtest open;

Come ulteriore verifica controllare che ci siano le tabelle di un utente definito in pdb5. Nel nostro caso è hr:

SQL> select * from dba_tables where owner='HR';

SQL>  select con_id,file#,name from v$datafile;

CON_ID FILE#           NAME
---------- ---------- --------------------------------------------------------------------
5    33      /u01/app/oracle/oradata/ORCL/pdbtest/system01.dbf
5    34      /u01/app/oracle/oradata/ORCL/pdbtest/sysaux01.dbf
5    35      /u01/app/oracle/oradata/ORCL/pdbtest/undotbs01.dbf
5    36      /u01/app/oracle/oradata/ORCL/pdbtest/users01.dbf



Post popolari in questo blog

Create e Drop Pluggable Database

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