top of page
DBAGenesis_png.png

Clone PDB or Non-CDB in Oracle 19c

With Oracle multi-tenant architecture, you get flexibility to clone pluggable databases from one container to another containers easily. The process of cloning PDB is way more simple than RMAN cloning process.

If version of source and target CDB is different and you want to clone PDB then, you must use Unplug and Plug PDB cloning method.

Clone PDB on Same CDB


For testing purpose, application team might want you to create a clone of single PDB. Simply put PDB that you want to clone into read only mode

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

With one single command, you can start cloning PDB

SQL> create pluggable database HRPDB_TEST from HRPDB FILE_NAME_CONVERT= ('/u01/CDB/HRPDB', '/u01/CDB/HRPDB_TEST');

That's it!



Clone PDB on Remote CDB


Set the DB_CREATE_FILE_DEST parameter on target so you don't have to worry about FILE_NAME_CONVERT parameter during cloning or migration. Your target CDB will auto create the datafiles for cloned PDB into DB_CREATE_FILE_DEST parameter location

On target CDB:
==============
SQL> alter system set DB_CREATE_FILE_DEST='/u01/CDB/';

On the source CDB, create a user inside PDB (you want to clone) and give permissions

On source PDB:
==============
SQL> create user migrate identified by migrate#123;
SQL> grant connect, resource, create pluggable database to migrate;

On the target CDB, setup tns entries to connect source PDB

On target CDB:
==============
SOURCE_HRPDB =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 3.19.61.169)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = HRPDB)
 )
)

Create database link which allows us to connect source PDB inside sqlplus on target

On target CDB:
==============
SQL> create database link HRPDB connect to migrate identified by migrate#123 using 'SOURCE_HRPDB';

Clone pdb from source to target

On target CDB:
==============
SQL> create pluggable database HRPDB_NEW from HRPDB@HRPDB;

SQL> create pluggable database {new-pdb} from {old-pdb}@{db-link};


Clone Non-CDB to CDB


Set the DB_CREATE_FILE_DEST parameter on target so you don't have to worry about FILE_NAME_CONVERT parameter during cloning or migration. Your target CDB will auto create the datafiles for cloned PDB into DB_CREATE_FILE_DEST parameter location

On target CDB:
==============
SQL> alter system set DB_CREATE_FILE_DEST='/u01/CDB/';

On the source Non-CDB, create a user inside database and give permissions

On source Non-CDB:
==================
SQL> create user migrate identified by migrate#123;
SQL> grant connect, resource, create pluggable database to migrate;

On the target CDB, setup tns entries to connect source Non-CDB

On target CDB:
==============
NONCDB =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 3.19.61.169)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = ORCL)
 )
)

Create database link which allows us to connect source DB inside sqlplus on target

On target CDB:
==============
SQL> create database link clone_link connect to migrate identified by migrate#123 using 'NONCDB';

Clone DB from source to target

On target CDB:
==============
SQL> create pluggable database ORCL from NON$CDB@clone_link;

SQL> create pluggable database {new-pdb} from {non$cdb}@{db-link};
Since there is no PDB to name, we use "NON$CDB" as the PDB name

Enjoy! 😉

Become a top notch dba with DBA Genesis
Become a DBA with DBA Genesis.png
bottom of page