导航

Upgrade a Non-CDB To a PDB on CDB

Posted on 2017-04-20 15:33  张鑫的园子  阅读(486)  评论(0编辑  收藏  举报
1、Stop the cluster database and start database on one node with read noly
[oracle@raca1 admin]$ srvctl stop database -d racdb
[oracle@raca1 admin]$ 
[oracle@raca1 admin]$ 
[oracle@raca1 admin]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Apr 19 10:58:17 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 7.8920E+10 bytes
Fixed Size                 12169704 bytes
Variable Size            7516196376 bytes
Database Buffers         4.5366E+10 bytes
Redo Buffers              256262144 bytes
In-Memory Area           2.5770E+10 bytes
Database mounted.
SQL> alter database open read only;

Database altered.

2Create XML for PDB,and you can choose any path to locate you XML file,this XML depends on you source database.
SQL> exec DBMS_PDB.DESCRIBE('/home/oracle/racdb.xml');

PL/SQL procedure successfully completed.

3close your source database.
SQL> shutdown immediate

4、change the environment to new cdb,and check the pdb is or not compatible
[oracle@raca1 ~]$ export ORACLE_SID=raca1
[oracle@raca1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Apr 19 16:18:36 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name  

CON_NAME
------------------------------
CDB$ROOT

SQL> set serveroutput on
SQL> DECLARE
  2     compatible CONSTANT VARCHAR2(3) :=
  3  CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
  4   pdb_descr_file => '/home/oracle/racdb.xml',
  5  pdb_name       => 'RACDB')
  6  WHEN TRUE 
  7  THEN 'YES'
  8  ELSE 'NO'
  9   END;
 10   BEGIN
 11     DBMS_OUTPUT.PUT_LINE(compatible);
 12   END;
 13  /
YES

PL/SQL procedure successfully completed.

5Thencreate the pluggable database, and to plug the database into the CDB
###ERROE
SQL> CREATE PLUGGABLE DATABASE racdb USING '/home/oracle/racdb.xml' NOCOPY TEMPFILE REUSE;
CREATE PLUGGABLE DATABASE racdb USING '/home/oracle/racdb.xml' NOCOPY TEMPFILE REUSE
*
ERROR at line 1:
ORA-65139: Mismatch between XML metadata file and data file
+DATA/racdb/datafile/system01.dbf for value of fcpsb (180939629 in the plug XML
file, 181038820 in the data file)

6Some metadata file and data file is not correct,I prefer to generate a new XML:
[oracle@raca1 ~]$ export ORACLE_SID=racdb1
[oracle@raca1 ~]$ echo $ORACLE_SID
racdb1
[oracle@raca1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Apr 19 16:47:51 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 7.8920E+10 bytes
Fixed Size                 12169704 bytes
Variable Size            7516196376 bytes
Database Buffers         4.5366E+10 bytes
Redo Buffers              256262144 bytes
In-Memory Area           2.5770E+10 bytes
Database mounted.
SQL> alter database open read only;

Database altered.

SQL> exec DBMS_PDB.DESCRIBE('/home/oracle/racdb.xml');

PL/SQL procedure successfully completed.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


7、change the environment to new ORACLE_HOME and ORACLE_SID,Use the following command syntax to create the pluggable database, and to plug the database into the CDB:
[oracle@raca1 ~]$ export ORACLE_SID=raca1
[oracle@raca1 ~]$ sqlplus / as sysdba
SQL>  CREATE PLUGGABLE DATABASE racdb USING '/home/oracle/racdb.xml' NOCOPY TEMPFILE REUSE;

Pluggable database created.

SQL> alter session set container=racdb;

Session altered.

SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

8、remove the source non-cdb from crs,you must use root account
[grid@racd2 ~]$ srvctl remove database -d racdb
Remove the database racdb? (y/[n]) y
PRKO-3077 : Failed to remove database racdb: PRCD-1032 : Failed to remove database resource racdb
PRCR-1028 : Failed to remove resource ora.racdb.db
PRCR-1072 : Failed to unregister resource ora.racdb.db
CRS-0245:  User does not have enough privilege to perform the operation
[grid@racd2 ~]$ exit
logout
[root@racd2 ~]# cd /u01/grid/app/12.2.0/bin/
[root@racd2 bin]# ./srvctl remove database -d racdb

[root@racd2 bin]# su - grid
Last login: Thu Apr 20 15:35:31 CST 2017
[grid@racd2 ~]$ crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....SM.lsnr ora....er.type ONLINE    ONLINE    racd1       
ora.DATA.dg    ora....up.type ONLINE    ONLINE    racd1       
ora....ER.lsnr ora....er.type ONLINE    ONLINE    racd1       
ora....AF.lsnr ora....er.type OFFLINE   OFFLINE               
ora....N1.lsnr ora....er.type ONLINE    ONLINE    racd1       
ora.MGMT.dg    ora....up.type ONLINE    ONLINE    racd1       
ora.MGMTLSNR   ora....nr.type ONLINE    ONLINE    racd1       
ora.VOTE.dg    ora....up.type ONLINE    ONLINE    racd1       
ora.asm        ora.asm.type   ONLINE    ONLINE    racd1       
ora.chad       ora.chad.type  ONLINE    ONLINE    racd1       
ora.cvu        ora.cvu.type   ONLINE    ONLINE    racd1       
ora.mgmtdb     ora....db.type ONLINE    ONLINE    racd1       
ora....network ora....rk.type ONLINE    ONLINE    racd1       
ora.ons        ora.ons.type   ONLINE    ONLINE    racd1       
ora.qosmserver ora....er.type ONLINE    ONLINE    racd1       
ora.racd.db    ora....se.type ONLINE    ONLINE    racd1       
ora....D1.lsnr application    ONLINE    ONLINE    racd1       
ora.racd1.ons  application    ONLINE    ONLINE    racd1       
ora.racd1.vip  ora....t1.type ONLINE    ONLINE    racd1       
ora....D2.lsnr application    ONLINE    ONLINE    racd2       
ora.racd2.ons  application    ONLINE    ONLINE    racd2       
ora.racd2.vip  ora....t1.type ONLINE    ONLINE    racd2       
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    racd1       


[oracle@racd2 ~]$ echo $ORACLE_SID
racdb2
[oracle@racd2 ~]$ export ORACLE_SID=racd2
[oracle@racd2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Apr 20 15:46:33 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> alter session set container=racdb;

Session altered.

SQL> select instance_name,status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
racd2            MOUNTED
racd1            MOUNTED

SQL> alter pluggable database racdb open;

Pluggable database altered.

SQL> alter pluggable database racdb save state;

Pluggable database altered.