Converting non-container DB to Pluggble database.

Converting non-container Database to Pluggable database.

How to convert non-cdb 19c to CDB/PDB 19c database
How to Convert Non-CDB to PDB Database on same localhost

Existing Instance & DB name: ORCLP
CDB Instance & DB name: ORCLPG (new)
PDB name: ORCLPDB

Note: Without changing service names, tnsnames.ora entry , non-CDB will be converted to CDB/PDB.

 

Step 1) Tempfile details in existing DB

select file_id,file_name,tablespace_name,bytes/1024/1024/1024,status from dba_temp_files;SQL> SQL> SQL> SQL> SQL>

FILE_ID FILE_NAME TABLESPACE BYTES/1024/1024/1024 STATUS
——- ————————————————– ———- ——————– ——-
1 +DATA/ORCLP/TEMPFILE/temp.331.1014569485 TEMP 5.078125 ONLINE

 

Step 2) Diskgroup details

Note: Need to makesure that disck group(where tempfile is existing) should have double the amount of existing temp size.

For huge temp tablespace size ,for example 300GB/500GB , capture the temptablespace details and drop it and create new one with 10G or 20G.
Small tempsize 5 or 10 or 20 GB is sufficient for CDB migration.

NAME STATE TOTAL_MB FREE_MB
—————————————- ———– ———- ———-DATA CONNECTED 1310722 785320

 

Step 3) Create CDB database (new skeleton)

Create Container Database

export ORACLE_HOME=/u00/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
cd /u00/app/oracle/product/19c/db_1/bin
./dbca -silent -createDatabase -templateName /u00/app/oracle/product/19c/db_1/assistants/dbca/templates/General_Purpose.dbc
-gdbname ORCLPG -sid ORCLPG -characterSet WE8ISO8859P1 -nationalCharacterSet AL16UTF16 -sysPassword welcome123
-systemPassword welcome123 -storageType ASM -datafileDestination ‘+DATA’ -recoveryAreaDestination ‘+FRA’
-createAsContainerDatabase true -numberOfPDBs 1 -pdbName pdb1 -pdbAdminPassword welcome123 -databaseType MULTIPURPOSE
-memoryMgmtType auto_sga -memoryPercentage 20 -redoLogFileSize 100 -emConfiguration NONE
-initParams nls_language=AMERICAN,nls_calendar=GREGORIAN,db_block_size=8K

 

Step 4) Connect to Source Database and shutdown the database to open in read only

SQL>SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>SQL> startup open read only;
ORACLE instance started.SQL> select name,open_mode from v$database;NAME OPEN_MODE
——— ——————–
ORCLP READ ONLY

 

Step 5) Describe the database and generate the xml file:

BEGIN
DBMS_PDB.DESCRIBE(
pdb_descr_file => ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’);
END;
/

run the above PL/SQL anonymous block.

SQL>
SQL> BEGIN
DBMS_PDB.DESCRIBE(
pdb_descr_file => ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’);
END;
/ 2 3 4 5PL/SQL procedure successfully completed.SQL>

 

Step 6) Check if it is compatible with cdb, run below in target CDB

SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’,
pdb_name => ‘ORCLPX’)
WHEN TRUE THEN ‘YES’
ELSE ‘NO’
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/

run the above anonymous block.

SQL>
SQL> SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’,
pdb_name => ‘ORCLPX’)
WHEN TRUE THEN ‘YES’
ELSE ‘NO’
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
SQL> 2 3 4 5 6 7 8 9 10 11 12 YESPL/SQL procedure successfully completed.SQL>

 

Step 7) Check PDB_PLUG_IN_VIOLATIONS view from cdb database if there are any errors

set line 200
col NAME for a30
col MESSAGE for a30
col ACTION for a30
col CAUSE for a20
select NAME,CAUSE,ERROR_NUMBER,MESSAGE,STATUS,ACTION from PDB_PLUG_IN_VIOLATIONS;NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————
PDB$SEED SQL Patch 0 ‘19.12.0.0.0 Release_Update 21 RESOLVED Call datapatch to install in t
07161418’ is installed in the he PDB or the CDB
CDB but no release updates are
installed in the PDBORCLPX Non-CDB to PDB 0 PDB plugged in is a non-CDB, r PENDING Run noncdb_to_pdb.sql.
equires noncdb_to_pdb.sql be r
un.ORCLPX Parameter 0 CDB parameter processes mismat PENDING Please check the parameter in
ch: Previous 1000 Current 1920 the current CDB

NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————

ORCLPX Parameter 0 CDB parameter cpu_count mismat PENDING Please check the parameter in
ch: Previous 2 Current 24 the current CDB

ORCLPX Parameter 0 CDB parameter sga_target misma PENDING Please check the parameter in
tch: Previous 2512M Current 38 the current CDB
528M

ORCLPX Parameter 0 CDB parameter compatible misma PENDING Please check the parameter in
tch: Previous ‘12.2.0’ Current the current CDB
‘19.0.0’

NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————

ORCLPX Parameter 0 CDB parameter pga_aggregate_ta PENDING Please check the parameter in
rget mismatch: Previous 1G Cur the current CDB
rent 12827M

7 rows selected.

SQL>

 

Step 8 ) Change parameter values and bounce the database

sga_target
pga_aggregate_target
sga_target
processes
cpu_countalter system set processes=1000 scope=spfile;
alter system set cpu_count=2 scope=spfile;
alter system set sga_target=2512M scope=spfile;
alter system set pga_aggregate_target=1g scope=both;

Note: No change for below parameter compatible

SQL>shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>SQL>
SQL> startup
ORACLE instance started.Total System Global Area 2634020296 bytes
Fixed Size 9139656 bytes
Variable Size 553648128 bytes
Database Buffers 2063597568 bytes
Redo Buffers 7634944 bytes
Database mounted.
Database opened.
SQL>

 

Step 9) Check if it is compatible with cdb, run below in target CDB

SQL> SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’,
pdb_name => ‘ORCLPX’)
WHEN TRUE THEN ‘YES’
ELSE ‘NO’
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
SQL> 2 3 4 5 6 7 8 9 10 11 12 YESPL/SQL procedure successfully completed.SQL>
SQL>
SQL> set line 200
col NAME for a30
col MESSAGE for a30
col ACTION for a30
col CAUSE for a20
select NAME,CAUSE,ERROR_NUMBER,MESSAGE,STATUS,ACTION from PDB_PLUG_IN_VIOLATIONS;SQL> SQL> SQL> SQL> SQL>NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————
PDB$SEED SQL Patch 0 ‘19.12.0.0.0 Release_Update 21 RESOLVED Call datapatch to install in t
07161418’ is installed in the he PDB or the CDB
CDB but no release updates are
installed in the PDB

ORCLPX Non-CDB to PDB 0 PDB plugged in is a non-CDB, r PENDING Run noncdb_to_pdb.sql.
equires noncdb_to_pdb.sql be r
un.

ORCLPX Parameter 0 CDB parameter compatible misma PENDING Please check the parameter in
tch: Previous ‘12.2.0’ Current the current CDB

NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————
‘19.0.0’

SQL>

 

Step 10) Connect to the CDB where database has to be plugged in and create pluggable database ORCLPX

. oraen
ORCLPG
sqlplus / as sysdbacreate pluggable database ORCLPX using ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’ NOCOPY tempfile reuse;07:34:40 SQL>
07:34:41 SQL> create pluggable database ORCLPX using ‘/home/oracle/ORCLP/ORCLP_CDB/ORCLPX.xml’ NOCOPY tempfile reuse;Pluggable database created.

07:34:50 SQL>

07:35:12 SQL>
07:35:12 SQL>
07:35:12 SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 ORCLPX MOUNTED
07:35:13 SQL>

 

Step 11) Switch to the PDB container and run the “$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql”

07:35:28 SQL> ALTER SESSION SET CONTAINER=ORCLPX;

Session altered.

Run the script
07:35:35 SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

07:45:01 SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
4 ORCLPX MOUNTED
07:45:04 SQL>
07:45:05 SQL>

 

Step 12) Open the Pluggable database

07:45:05 SQL> ALTER PLUGGABLE DATABASE ORCLPX OPEN;

Pluggable database altered.

07:45:28 SQL> SELECT name, open_mode FROM v$pdbs;

NAME OPEN_MODE
—————————— ———-
ORCLPX READ WRITE

1 row selected.

07:45:34 SQL>

Step 13) Verify if any compatiblity issues

SQL>
SQL> set line 200
col NAME for a30
col MESSAGE for a30
col ACTION for a30
col CAUSE for a20
select NAME,CAUSE,ERROR_NUMBER,MESSAGE,STATUS,ACTION from PDB_PLUG_IN_VIOLATIONS;SQL> SQL> SQL> SQL> SQL>

NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————
PDB$SEED SQL Patch 0 ‘19.12.0.0.0 Release_Update 21 RESOLVED Call datapatch to install in t
07161418’ is installed in the he PDB or the CDB
CDB but no release updates are
installed in the PDB

ORCLPX Parameter 0 CDB parameter compatible misma RESOLVED Please check the parameter in
tch: Previous ‘12.2.0’ Current the current CDB
‘19.0.0’

ORCLPX Non-CDB to PDB 0 PDB plugged in is a non-CDB, r RESOLVED Run noncdb_to_pdb.sql.
equires noncdb_to_pdb.sql be r

NAME CAUSE ERROR_NUMBER MESSAGE STATUS ACTION
—————————— ——————– ———— —————————— ——— ——————————
un.

 

Step 14) Verify Service names and configuration

SQL> select name from v$services;

NAME
——————————
SYS$BACKGROUND
SYS$USERS
ORCLPGXDB
pdb1
ORCLPx
ORCLPG

6 rows selected.

[oracle@ORCL_SRVR ~]$ srvctl config database -d ORCLPG
Database unique name: ORCLPG
Database name: ORCLPG
Oracle home: /u00/app/oracle/product/19c/db_1
Oracle user: oracle
Spfile: +XML_CLOB_LOG/ORCLPG/PARAMETERFILE/spfile.622.1119186559
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: FRA,DATA,DATA06
Services:
OSDBA group: dba
OSOPER group:
Database instance: ORCLPG
[oracle@ORCL_SRVR ~]$

 

Step 15) Adding service name ( name from old non-cdb) for PDB

srvctl add service -s ORCLP -d ORCLPG -pdb ORCLPX
srvctl start service -s ORCLP -d ORCLPG
srvctl status service -s ORCLP -d ORCLPG[oracle@ORCL_SRVR ~]$ srvctl add service -s ORCLP -d ORCLPG -pdb ORCLPX
[oracle@ORCL_SRVR ~]$ srvctl start service -s ORCLP -d ORCLPG
[oracle@ORCL_SRVR ~]$ srvctl status service -s ORCLP -d ORCLPG
Service ORCLP is running
[oracle@ORCL_SRVR ~]$

 

Step 16) Verify service configuration

[oracle@ORCL_SRVR ~]$ srvctl config database -d ORCLPG
Database unique name: ORCLPG
Database name: ORCLPG
Oracle home: /u00/app/oracle/product/19c/db_1
Oracle user: oracle
Spfile: +XML_CLOB_LOG/ORCLPG/PARAMETERFILE/spfile.622.1119186559
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: FRA,DATA,DATA06
Services: ORCLP
OSDBA group: dba
OSOPER group:
Database instance: ORCLPG
[oracle@ORCL_SRVR ~]$SQL> sho parameter serviceNAME TYPE VALUE
———————————— ———– ——————————
service_names string ORCLPG
SQL>
SQL>
SQL>
SQL> select name from v$services;NAME
—————————————————————-
ORCLP
ORCLPx

 

Verify service configuration

[oracle@ORCL_SRVR ~]$ sqlplus TEST19@ORCLP

SQL*Plus: Release 19.0.0.0.0 – Production on Fri Oct 28 07:52:52 2022
Version 19.12.0.0.0

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

Enter password:
Last Successful login time: Thu Oct 20 2022 12:58:51 -04:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.12.0.0.0

SQL> show user
USER is “TEST19”
SQL>

 

Step 17) Take full backup after converting to PDB

 

See Also: