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.
Creare una directory contenente i file del nuovo pdb, da linea di comando sotto
/u01/app/oracle/oradata/ORCL
[oracle@test ORCL]$ mkdir pdb5
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
/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.