Step-by-Step Guide: Converting a Non-CDB to PDB with an Existing CDB

In this comprehensive guide, we’ll walk you through the process of converting a Non-CDB (Non-Container Database) to a Pluggable Database (PDB) using an existing CDB (Container Database). Follow these clear and concise steps for a seamless transformation:

Assumption: Before converting a Non-CDB oracle instance into CDB , it is assumed an oracle CDB instance is already running.

Step 1: Cleanly Shutdown the Non-CDB Database(orcl)

  • Execute the following commands to gracefully shut down the Non-CDB Database named “orcl”:

Invoke environment for orcl

[oracle@ocisoumya ~]$ . oraenv
ORACLE_SID = [orcl] ? orcl
The Oracle base remains unchanged with value /u01/app
[oracle@ocisoumya ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Jan 15 15:45:10 2024
Version 19.21.0.0.0
 
Copyright (c) 1982, 2022, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
 
SQL> show pdbs
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Step 2: Open the Database in Read-Only Mode

  • Once the database is cleanly shutdown, open it in read-only mode
SQL> startup open read only
ORACLE instance started.
 
Total System Global Area 4949276544 bytes
Fixed Size                  8935296 bytes
Variable Size             973078528 bytes
Database Buffers         3959422976 bytes
Redo Buffers                7839744 bytes
Database mounted.
Database opened.

Step 3: Describe the Database and Generate the XML File

  • Generate an XML file describing the database:
SQL> BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => ‘/u01/orcl.xml’);
END;
/
 
PL/SQL procedure successfully completed.

Step 4: Shutdown the Database

  • Shutdown the database again:
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Step 5: Check Compatibility and Resolve Issues

  • Verify compatibility with the target CDB and address any issues:

Invoke CDB environment and login to sqlplus

[oracle@ocisoumya ~]$ . oraenv
ORACLE_SID = [orcl] ? orclcdb
The Oracle base remains unchanged with value /u01/app
 
SQL> SET SERVEROUTPUT ON;
DECLARE
  compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => ‘/u01/orcl.xml’)
    WHEN TRUE THEN ‘YES’
    ELSE ‘NO’
  END;
BEGIN
  DBMS_OUTPUT.PUT_LINE(compatible);
END;
/

Check the PDB_PLUG_IN_VIOLATIONS view from the CDB for any errors.

SQL> select NAME,ERROR_NUMBER,type,MESSAGE,STATUS from PDB_PLUG_IN_VIOLATIONS;
 
NAME            ERROR_NUMBER TYPE      MESSAGE                                                      STATUS
————— ———— ——— ———————————————————— ———
PDB$SEED                   0 ERROR     ‘19.21.0.0.0 Release_Update 2309301519’ is installed in the  RESOLVED
                                       CDB but no release updates are installed in the PDB
 
ORCL                       0 WARNING   PDB plugged in is a non-CDB, requires noncdb_to_pdb.sql be r PENDING
                                       un.
 
ORCL                       0 WARNING   Undo mode mismatch: PDB using LOCAL undo.  CDB using SHARED  PENDING
                                       undo.

Step 6: Connect to the Target CDB

[oracle@ocisoumya ~]$ . oraenv
ORACLE_SID = [orcl] ? orclcdb
The Oracle base remains unchanged with value /u01/app

Step 7: Create a Pluggable Database

  • Execute the following SQL command to create a Pluggable Database:
SQL> CREATE PLUGGABLE DATABASE ORCLPDB USING ‘/u01/orcl.xml’
COPY FILE_NAME_CONVERT = (‘/u01/app/oradata/ORCL/’, ‘/u01/app/oradata/ORCLCDB/ORCLPDB/’); 
 
Pluggable database created.

Step 8: Run the noncdb_to_pdb.sql Script

·       Switch to the PDB container and run the script for the conversion:

sql> ALTER SESSION SET CONTAINER=ORCLPDB;
sql> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

Step 9: Startup the PDB and Verify

·       Start up the PDB and confirm its open mode:

SQL> ALTER PLUGGABLE DATABASE OPEN;
Pluggable database altered.
 
SQL> SELECT name, open_mode FROM v$pdbs;
 
NAME            OPEN_MODE
————— ———-
ORCLPDB         READ WRITE

Categories

Leave a Reply

Your email address will not be published. Required fields are marked *