Up to Oracle 12.1.0.1,it was only possible to clone PDB's within the local Container database. Since version 12.1.0.2 Oracle
has extended this functionality to remote PDB cloning. From 12.1.0.2
onwards,we can also clone a remote non-CDB as a PDB directly over the
network. Remote Cloning of a Non-CDB is a simple procedure which utilizes
a database link to transfer the data as part of running the
CREATE
PLUGGABLE DATABASE
command. Moreover,
non-CDBs can be hot cloned, i.e. it is not required to put the source
non-CDB in READ ONLY
mode for cloning so that it can be
cloned online. It is a pre-requisite that both the CDB and
the non-CDB must be running Oracle Database 12c Release 1 (12.1.0.2) or
later.
Requirements-
The source must be opened in read-only mode(for cloning PDBs)
CDB that is to accommodate the remote PDB must have the database link defined to the remote database.
It can point either to the CDB that the source PDB belongs to or directly to the source PDB.
User in the source database that the db link points to must have the CREATE PLUGGABLE DATABASE privilege. It can be common or local user (if PDB)
Additionaly databases should have the same options installed, same endianness and character sets
In this demonstration, I am going to clone a remote PDB using database link from the source CDB.In this example MYCDB1 is my source CDB and TDCDB is my destination CDB. TAPDB is a PDB within my MYCDB1 container and I am going to clone this PDB.
Login to source PDB and create some
objects.
[oracle@mydb01]:[]
$ . oraenv
ORACLE_SID
= [oracle] ? MYCDB1
[oracle@mydb01]:[MYCDB1]
$ sqlplus / as sysdba
SQL*Plus:
Release 12.1.0.2.0 Production on Fri Oct 14 16:05:03 2016
Copyright
(c) 1982, 2014, Oracle. All rights
reserved.
Connected
to:
Oracle
Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the
Partitioning, Real Application Clusters, OLAP, Advanced Analytics and Real
Application Testing options
SQL>
select NAME,CON_ID ,OPEN_MODE from
v$containers;
NAME CON_ID OPEN_MODE
------------------------------
---------- ----------
CDB$ROOT 1 READ WRITE
PDB$SEED 2 READ ONLY
TAPDB 3 READ WRITE
SQL>
alter session set container=TAPDB;
Session
altered.
SQL>
show con_name
CON_NAME
------------------------------
TAPDB
SQL>
create user mahi identified by mahi;
User
created.
SQL>
grant dba to mahi;
Grant
succeeded.
SQL>
!hostname -i
10.81.155.146
SQL>
conn mahi/mahi@10.81.155.146:1521/TAPDB
Connected.
SQL>
show con_name
CON_NAME
------------------------------
TAPDB
SQL>
sho user
USER is
"MAHI"
SQL>
create table t1 as select * from dba_users;
Table
created.
SQL>
create table t2 as select * from dba_tables ;
Table
created.
SQL>
select count(1) from t1;
COUNT(1)
----------
37
SQL>
select count(1) from t2;
COUNT(1)
----------
2338
Create one dedicated user for
cloning in the remote pluggable database.
SQL>
show con_name
CON_NAME
------------------------------
TAPDB
SQL>
CREATE USER remote_pdb IDENTIFIED BY remote_pdb;
User
created.
SQL>
GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO
remote_pdb;
Grant
succeeded.
SQL> select NAME,CON_ID ,OPEN_MODE from v$containers;
NAME CON_ID OPEN_MODE
------------------------------
---------- ----------
TAPDB 3 READ WRITE
Close and open your remote PDB in
read-only mode.
SQL> alter pluggable database close immediate
instances=all;
Pluggable
database altered.
SQL>
select NAME,CON_ID ,OPEN_MODE from
v$containers;
NAME CON_ID OPEN_MODE
------------------------------
---------- ----------
TAPDB 3 MOUNTED
SQL>
alter pluggable database open read only instances=all;
Pluggable
database altered.
SQL> select NAME,CON_ID ,OPEN_MODE from v$containers;
NAME CON_ID OPEN_MODE
------------------------------
---------- ----------
TAPDB 3 READ ONLY
SQL>
exit
Disconnected
from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
Production
With the
Partitioning, Real Application Clusters, OLAP, Advanced Analytics and Real
Application Testing options
Now connect to destination database and
clone using the database link.
[oracle@mydb01]:[MYCDB1]
$ . oraenv
ORACLE_SID
= [MYCDB1] ? TDCDB
The
Oracle base remains unchanged with value /u01/app/oracle
[oracle@mydb01]:[TDCDB]
$ ss
SQL*Plus:
Release 12.1.0.2.0 Production on Fri Oct 14 16:18:02 2016
Copyright
(c) 1982, 2014, Oracle. All rights
reserved.
Connected
to:
Oracle
Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the
Partitioning, Real Application Clusters, Oracle Label Security, OLAP, Advanced
Analytics and Real Application Testing options
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
SQL>
exit
Disconnected
from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
Production
With the
Partitioning, Real Application Clusters, Oracle Label Security, OLAP,
Advanced
Analytics and Real Application Testing options
[oracle@mydb01]:[TDCDB]
$ srvctl config scan
SCAN
name: ptgracscan,
Network: 1
Subnet
IPv4: 10.81.155.144/255.255.255.240/bond0.3380, static
Subnet
IPv6:
SCAN 0
IPv4 VIP: 10.81.155.156
SCAN VIP
is enabled.
SCAN VIP
is individually enabled on nodes:
SCAN VIP
is individually disabled on nodes:
[oracle@mydb01]:[TDCDB]
$ ss
SQL*Plus:
Release 12.1.0.2.0 Production on Fri Oct 14 16:19:27 2016
Copyright
(c) 1982, 2014, Oracle. All rights reserved.
Connected
to:
Oracle
Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the
Partitioning, Real Application Clusters, Oracle Label Security, OLAP,
Advanced
Analytics and Real Application Testing options
SQL> CREATE DATABASE LINK link_to_tapdb CONNECT TO remote_pdb
IDENTIFIED BY remote_pdb USING 'ptgracscan:1521/TAPDB';
Database
link created.
SQL>
select sysdate from dual@link_to_tapdb;
SYSDATE
---------
14-OCT-16
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
SQL> CREATE PLUGGABLE DATABASE TAPDBCLONE from TAPDB@link_to_tapdb;
Pluggable
database created.
Note:-
After from caluse in the create
pluggable database syntax you need to mention the remote PDB database name- In
this case I have given TAPDB,ie
my remote pluggable database that we put in read-only mode.
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
5 TAPDBCLONE MOUNTED
SQL>
alter pluggable database TAPDBCLONE open instances=all;
Pluggable
database altered.
SQL> sho pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
5 TAPDBCLONE READ WRITE NO
SQL>
conn mahi/mahi@10.81.155.146:1521/TAPDBCLONE
Connected.
SQL>
select * from tab;
TNAME
----------------
TABTYPE CLUSTERID
-------
----------
T2
TABLE
T1
TABLE
SQL> select count(1) from t1;
COUNT(1)
----------
37
SQL>
select count(1) from t2;
COUNT(1)
----------
2338
SQL>
exit
Disconnected
from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
Production
With the
Partitioning, Real Application Clusters, OLAP, Advanced Analytics and Real
Application Testing options
Lets open the source pluggable
database back to read-write mode
[oracle@mydb01]:[TDCDB]
$ . oraenv
ORACLE_SID
= [TDCDB] ? MYCDB1
The
Oracle base remains unchanged with value /u01/app/oracle
[oracle@mydb01]:[MYCDB1]
$ sqlplus / as sysdba
SQL*Plus:
Release 12.1.0.2.0 Production on Fri Oct 14 16:28:11 2016
Copyright
(c) 1982, 2014, Oracle. All rights
reserved.
Connected
to:
Oracle
Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the
Partitioning, Real Application Clusters, OLAP, Advanced Analytics and Real
Application Testing options
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 TAPDB READ ONLY NO
SQL>
alter pluggable database TAPDB close immediate ;
Pluggable
database altered.
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 TAPDB MOUNTED
SQL>
alter pluggable database TAPDB open;
Pluggable
database altered.
SQL>
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
----------
------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 TAPDB READ WRITE NO
SQL>