Plugging an Unplugged Pluggable Database
- You have to upgrade a PDB to the latest Oracle version, but you do not want to apply it on all PDBs. Instead of upgrading a CDB from one release to another, you can unplug a PDB from one Oracle Database release, and then plug it into a newly created CDB from a later release.
- You want to test the performance of the CDB without a particular PDB. You unplug the PDB, test the performance without the PDB and, if necessary, replug the PDB into the CDB.
- You want to maintain a collection of PDB “gold images” as unplugged PDBs.
Introduction
You can disassociate or unplug a PDB from a CDB and reassociate or plug the PDB into the same CDB or into another CDB. This capability is suitable for the following situations:- Plug the unplugged PDB by using the data files of the unplugged PDB. The unplugged PDB is disassociated from the source CDB.
- The source data files are used with or without any copy.
- The source data files are used after being moved to another location.
- Plug the unplugged PDB as a clone to:
- Allow developers and testers to rapidly and repeatedly provision a well-known starting state
- Support self-paced learning
- Provide a new way to deliver a brand-new application
Scenario
In this tutorial, you perform a PDB unplugging operation from a CDB. Next, you perform a plugging operation of the same PDB into another CDB by using SQL*Plus.Different plugging scenarios are allowed:
Prerequisites
Before starting this tutorial, you should:
- Install Oracle Database 12c.
- Create two CDBs with two PDBs in the first CDB.
-
The environment used in the development of this tutorial is as follows:
- ORACLE_HOME: /u01/app/oracle/product/12.1.0
- TNS Listener port: 1521
- Container databases:
- SID: cdb1
- SID: cdb2
- Pluggable databases (in cdb1):
- pdb1
- pdb2
-
To unplug a PDB, you first close it and then generate an XML manifest file.
The XML file contains information about the names and the full paths of the
tablespaces, as well as data files of the unplugged PDB. The information will be
used by the plugging operation.
In this section, you unplug two PDBs to plug them with different methods.
Use SQL*Plus to close the PDBs before they can be unplugged.
Note: The pdb2 database may not have been opened, so you may
receive an error that the PDB is already closed.
. oraenv
[enter cdb1 at the prompt]
sqlplus / as sysdba
alter pluggable database pdb1 close immediate;
alter pluggable database pdb2 close
immediate;
alter pluggable database pdb1 unplug into
'/u01/app/oracle/oradata/pdb1.xml';
alter pluggable database pdb2 unplug into
'/u01/app/oracle/oradata/pdb2.xml';
drop pluggable database pdb1 keep datafiles;
drop pluggable database pdb2 keep
datafiles;
select pdb_name, status from cdb_pdbs where pdb_name in
('PDB1', 'PDB2');
[you should see no rows]
exit
-
In this section, you plug the unplugged PDB into another CDB by using
different methods.
Checking the Compatibility of the Unplugged PDB with the Host CDB
-
Before starting the plugging operation, make sure that the to-be-plugged-in
PDB is compatible with the new host CDB. Execution of the PL/SQL block raises an
error if it is not compatible.
Execute the following PL/SQL block:
. oraenv
[enter cdb2 at the prompt]
sqlplus / as sysdba
[if cdb2 is not started up, start it up now.]
set serveroutput on
DECLARE
compatible BOOLEAN := FALSE;
BEGIN
compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/u01/app/oracle/oradata/pdb1.xml');
if compatible then
DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES');
else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO');
end if;
END;
/
compatible BOOLEAN := FALSE;
BEGIN
compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/u01/app/oracle/oradata/pdb1.xml');
if compatible then
DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES');
else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO');
end if;
END;
/
DECLARE
compatible BOOLEAN := FALSE;
BEGIN
compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/u01/app/oracle/oradata/pdb2.xml');
if compatible then
DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? YES');
else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? NO');
end if;
END;
/
compatible BOOLEAN := FALSE;
BEGIN
compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/u01/app/oracle/oradata/pdb2.xml');
if compatible then
DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? YES');
else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? NO');
end if;
END;
/
Plugging the Unplugged PDB: NOCOPY Method
Use the data files of the unplugged PDB to plug the PDB into
another CDB without any copy.
create pluggable database pdb_plug_nocopy using
'/u01/app/oracle/oradata/pdb1.xml'
NOCOPY
TEMPFILE REUSE;
NOCOPY
TEMPFILE REUSE;
select pdb_name, status from cdb_pdbs where
pdb_name='PDB_PLUG_NOCOPY';
select open_mode from v$pdbs where
name='PDB_PLUG_NOCOPY';
select name from v$datafile where con_id=3;
exit
Plugging the Unplugged PDB: COPY Method
Create and define a destination for the new data files, plug the
unplugged PDB into the CDB, and then copy the data files of the unplugged
PDB.
mkdir
/u01/app/oracle/oradata/cdb2/pdb_plug_copy
sqlplus / as
sysdba
Use the data files of the unplugged PDB to plug the PDB into the
CDB and copy the data files to a new location.
create pluggable database pdb_plug_copy using
'/u01/app/oracle/oradata/pdb2.xml'
COPY
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_copy');
COPY
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_copy');
select pdb_name, status from cdb_pdbs where
pdb_name='PDB_PLUG_COPY';
select open_mode from v$pdbs where
name='PDB_PLUG_COPY';
select name from v$datafile where con_id=4;
exit
Plugging the Unplugged PDB: AS CLONE MOVE Method
Create and define a destination for the new data files, use the
data files of the unplugged PDB to plug the PDB into another CDB, and then move
the data files to another location.
mkdir
/u01/app/oracle/oradata/cdb2/pdb_plug_move
sqlplus / as sysdba
Plug the PDB into the CDB and move the data files to a new
location.
create pluggable database pdb_plug_move using
'/u01/app/oracle/oradata/pdb2.xml'
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');
An error message is returned because of the non-uniqueness of the
GUID. This is a good example of using the AS CLONE clause.
create pluggable database pdb_plug_move
AS CLONE using '/u01/app/oracle/oradata/pdb2.xml'
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');
AS CLONE using '/u01/app/oracle/oradata/pdb2.xml'
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');
select pdb_name, status from cdb_pdbs where
pdb_name='PDB_PLUG_MOVE';
select open_mode from v$pdbs where
name='PDB_PLUG_MOVE';
select name from v$datafile where
con_id=5;
-
Open and check the availability of the plugged PDB.
Open the plugged-in PDBs.
alter pluggable database pdb_plug_nocopy open;
alter pluggable database pdb_plug_copy open;
alter pluggable database pdb_plug_move
open;
connect sys/oracle@localhost:1521/pdb_plug_nocopy AS
SYSDBA
show con_name
connect sys/oracle@localhost:1521/pdb_plug_copy AS
SYSDBA
show con_name
connect sys/oracle@localhost:1521/pdb_plug_move AS
SYSDBA
show con_name
exit
-
Perform the following steps to reset your environment prior to repeating the
activities covered in this OBE or starting another OBE.
Close all pluggable databases.
. oraenv
[enter cdb2 at the prompt]
[enter cdb2 at the prompt]
sqlplus / as sysdba
alter pluggable database all close immediate;
alter pluggable database all close immediate;
alter pluggable database pdb_plug_nocopy unplug into
'/u01/app/oracle/oradata/pdb_plug_nocopy.xml';
drop pluggable database pdb_plug_nocopy keep datafiles;
alter pluggable database pdb_plug_copy unplug into
'/u01/app/oracle/oradata/pdb_plug_copy.xml';
drop pluggable database
pdb_plug_copy;
drop pluggable database pdb_plug_move;
connect sys/oracle@localhost:1521/cdb1 as
sysdba
create pluggable database pdb2 AS CLONE using '/u01/app/oracle/oradata/pdb_plug_copy.xml'
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb2/pdb_plug_copy','/u01/app/oracle/oradata/cdb1/pdb2');
create pluggable database pdb2 AS CLONE using '/u01/app/oracle/oradata/pdb_plug_copy.xml'
MOVE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb2/pdb_plug_copy','/u01/app/oracle/oradata/cdb1/pdb2');
create pluggable database pdb1 using
'/u01/app/oracle/oradata/pdb_plug_nocopy.xml' nocopy tempfile reuse;
alter pluggable database pdb2 open;
alter pluggable database pdb2 close immediate;
Open the pdb1 database.
alter pluggable database pdb1
open;
exit
exit
rm $ORACLE_BASE/oradata/pdb*.xml
rm -rf $ORACLE_BASE/cdb2/pdb_plug*
rm -rf $ORACLE_BASE/cdb2/pdb_plug*
Comments
Post a Comment
Oracle DBA Information