Clone PDB

La clonazione di un PDB consiste nel copiare un pdb sorgente da un container e mettere la copia nello stesso Container o in una altro Container.

Le condizioni sono le seguenti:
- accedere al root Contianer come sysdba o comunque avere le grant "create pluggable database"
- il CDB nel quale sarà creato il pdb deve essere in stato Read Write
- è consigliato, ma non necessario, impostare il PDB da clonare in stato Read Only in modo da esportare dati consistenti.

Perchè creare un clone?
Per installare una patch o fare test di performance ad esempio.
Se gli esiti dei test e installazione sono positivi si applicano le modifiche al pdb orginario.


SQL> conn /as sysdba
Connected.

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

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

Cloniamo ORCLPDB.

Accediamo al pdb e controlliamo i tablespace, datafile e gli utenti

SQL> alter session set container=ORCLPDB;

SQL> select  ts#,name,con_id from v$tablespace;

       TS# NAME       CON_ID
---------- ------------------------------ ----------
0 SYSTEM    3
1 SYSAUX    3
2 UNDOTBS1    3
3 TEMP    3
5 USERS    3

SQL> select con_id,file#, name from V$DATAFILE;

    CON_ID FILE#      NAME
---------- ---------- ----------------------------------
3     9         /u01/app/oracle/oradata/ORCL/orclpdb/sys tem01.dbf
3    10       /u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf
3    11      /u01/app/oracle/oradata/ORCL/orclpdb/und otbs01.dbf
         3    12     /u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf

SQL> select count(*) from dba_users;

  COUNT(*)
----------
37

Ad esempio prendiamo una utenza come campione che dovrà essere presente nel pdb clonato:

SQL> select  count(*) from dba_tables where OWNER='HR';

  COUNT(*)
----------
7

Creare una directory contenente i file del nuovo pdb, da linea di comando sotto
/u01/app/oracle/oradata/ORCL
[oracle@test ORCL]$ mkdir pdb5

Assicurarsi che non ci siano transazioni in corso nel pdb da clonare.
Collegarsi nuovamente al CDB.
Mettere il pdb in stato Read only:

SQL> alter pluggable database orclpdb close;
SQL> alter pluggable database orclpdb open read only;

SQL> create pluggable database pdb5 from orclpdb 
file_name_convert = ('/u01/app/oracle/oradata/ORCL/orclpdb/','/u01/app/oracle/oradata/ORCL/pdb5/');


SQL> show pdbs

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

SQL> alter pluggable database pdb5 open;

SQL> alter session set container=pdb5;

Session altered.

SQL> select ts#, NAME, con_id from v$tablespace;

       TS# NAME       CON_ID
---------- ------------------------------ ----------
0 SYSTEM    4
1 SYSAUX    4
2 UNDOTBS1    4
3 TEMP    4
5 USERS    4

SQL> select  count(*) from dba_tables where OWNER='HR';

  COUNT(*)
-----------------
7

SQL> select con_id,file#, name from V$DATAFILE ;

Aggiungere al file tnsnames.ora la stringa di connessione del pdb5

PDB5=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=test.com)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
          (SERVICE_NAME=pdb5.com)
    )
  )


E' possibile aggiungere la nuova tns entry utilizzando il tool netca



Selezionando "Local...." viene modificato il file tnsnames.ora




Selezionare TCP







Click Finish.

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