Plugin an Oracle 12c non-CDB database to an Oracle 12c Container Database (CDB)

PS. This non-CDB database is an Oracle 12g database upgraded from Oracle 11gR2 using DBUA (Database Upgrade Assistant) in the same machine.

1. Restart the non-CDB database (TESTDB) in READ-ONLY mode

[oracle@testsvr ~]$ . oraenv
ORACLE_SID = [TESTDB] ?
The Oracle base remains unchanged with value /oracle/orabase
SQL> sqlplus / as sysdba
SQL> shut immediate
SQL> startup mount
SQL> alter database open read only;
SQL> col open_mode format a20
SQL> col name format a20
SQL> select name,open_mode
from v$database;
>>
NAME                 OPEN_MODE
-------------------- --------------------
TESTDB              READ ONLY

2. Generating an XML file containing the metadata which describes the non-CDB using DBMS_PDB.DESCRIBE package.

SQL> exec DBMS_PDB.DESCRIBE(pdb_descr_file => '/home/oracle/TESTDB.xml');

3. Connect to the CDB and run the DBMS_PDB.CHECK_PLUG_COMPATIBILITY package to check if the non-CDB (TESTDB) is now ready for conversion into a Pluggable Database.
[oracle@testsvr ~]$ . oraenv
ORACLE_SID = [my12c] ?
The Oracle base remains unchanged with value /oracle/orabase
CDB$ROOT@MY12C> show con_name
CON_NAME
------------------------------
CDB$ROOT

set serveroutput on 

declare
v_compatible BOOLEAN default FALSE;
begin
  v_compatible:=DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/home/oracle/TESTDB.xml',pdb_name => 'TESTDB');
  if v_compatible then
     dbms_output.put_line('=> YES');
  else
     dbms_output.put_line('=> NO');
  end if;
end;
/

=> YES

4. Plug the non-CDB (TESTDB) into the CDB 

SQL> CREATE PLUGGABLE DATABASE TESTDB using '/home/oracle/TESTDB.xml' nocopy tempfile reuse;
Pluggable database created.

col con_id format 999
col name format a20
col open_mode format a20
select con_id,name,open_mode
from v$pdbs;
>>
CON_ID NAME                 OPEN_MODE
------ --------------------      --------------------
     2 PDB$SEED             READ ONLY
     3 PDBMY12C             READ WRITE
     4 MYPDB                   READ WRITE
     5 TESTDB                  MOUNTED

col pdb_name format a20  
select pdb_name,dbid,con_id,status
from cdb_pdbs;  
>>
PDB_NAME                   DBID CON_ID STATUS
-------------------- ---------- ------ ---------------------------
PDBMY12C             2146342917      3 NORMAL
PDB$SEED             3124979218      2 NORMAL
MYPDB                   3203928949      4 NORMAL
TESTDB                 1801614260       5 NEW

SQL> ALTER SESSION SET CONTAINER = TESTDB;
SQL> show con_name
CON_NAME
------------------------------
TESTDB

5.  Run the PDB convertion script - noncdb_to_pdb.sql
SQL> @?/rdbms/admin/noncdb_to_pdb.sql

6. Open the new converted PDB in OPEN mode
SQL> alter database open;
SQL> alter session set CONTAINER = CDB$ROOT;
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> col pdb_name format a20  
SQL> select pdb_name,dbid,con_id,status
from cdb_pdbs;
>>
PDB_NAME                   DBID     CON_ID STATUS
-------------------- ---------- ---------- ---------------------------
PDBMY12C             2146342917          3 NORMAL
PDB$SEED             3124979218          2 NORMAL
MYPDB                   3203928949          4 NORMAL
TESTDB                 1801614260          5 NORMAL


7. You can now shutdown, remove the pre-existing Non-CDB database service, and then delete the Non-CDB database entry from /etc/oratab
[oracle@testsvr admin]$ srvctl stop database -d TESTDB
[oracle@testsvr admin]$ srvctl remove database -d TESTDB
[oracle@testsvr admin]$ ps -ef |grep pmon
oracle    6256     1  0 10:11 ?        00:00:00 ora_pmon_my12c
grid      6431     1  0 Jan08 ?        00:00:00 asm_pmon_+ASM
oracle   24679  7306  0 15:14 pts/0    00:00:00 grep pmon




文章標籤
全站熱搜
創作者介紹
創作者 DanBrother 的頭像
DanBrother

DanBrother的部落格

DanBrother 發表在 痞客邦 留言(0) 人氣(38)