In this article, we will see converting regular PDB to Application PDB.

Step 1: Check regular PDB

SQL> SELECT con_id, name, open_mode, application_root,application_pdb, application_seed
from v$containers
where application_root = 'NO' and application_PDb = 'NO'
and application_seed = 'NO';  2    3    4  

    CON_ID NAME 															    OPEN_MODE  APP APP APP
---------- -------------------------------------------------------------------------------------------------------------------------------- ---------- --- --- ---
	 1 CDB$ROOT															    READ WRITE NO  NO  NO
	 2 PDB$SEED															    READ ONLY  NO  NO  NO
	 3 TESTPDB1															    MOUNTED    NO  NO  NO
	 7 PDB1 															    READ WRITE NO  NO  NO

I have two pdbs which are not associated with any application container.

Step 2: Now I will check which application container is available in my CDB$ROOT

SQL> SELECT con_id, name, open_mode, application_root,application_pdb, application_seed
from v$containers
where application_root = 'YES';  2    3  

    CON_ID NAME 															    OPEN_MODE  APP APP APP
---------- -------------------------------------------------------------------------------------------------------------------------------- ---------- --- --- ---
	 4 APP_PDB															    READ WRITE YES NO  NO
	 6 F348281081_21_1														    READ ONLY  YES YES NO

I have two application containers available F348281081_21_1 PDB is a clone of APP_PDB which was created while upgrading APP_PDB application.

Step 3: You can clone or unplug-plug regular pdb to create it as an Application PDB :

We will create a clone of PDB1 in the application container.

Step 4: Connect to application pdb

SQL> alter session set container=app_pdb;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
APP_PDB

Check application PDBs available with app_pdb

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 4 APP_PDB			  READ WRITE NO
	 5 APP_SAL			  MOUNTED

Step 5: Close PDB1 by connecting it from pdb1 service or connecting with CDB$ROOT

SQL> alter pluggable database pdb1 close immediate;

Pluggable database altered.

Step 6: Open pluggable database in a read-only state

SQL> alter pluggable database pdb1 open read only;

Pluggable database altered.

Step 7: Clone pdb1 to orapdb1

SQL> CREATE PLUGGABLE DATABASE ORAPDB1 FROM PDB1;

Pluggable database created.

Step 8: check show pdbs

SQL> SHOW PDBS;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 4 APP_PDB			  READ WRITE NO
	 5 APP_SAL			  MOUNTED
	 8 ORAPDB1			  MOUNTED

Step 9: Open orapdb1

SQL> alter pluggable database orapdb1 open ;

Warning: PDB altered with errors.

Step 10: Opening orapdb1 gives warning that PDB altered with errors so let us check pdb_plug_in_violations view to view errors associated with this PDB

SQL> SELECT NAME,CAUSE,ERROR_NUMBER,MESSAGE,STATUS FROM PDB_PLUG_IN_VIOLATIONS WHERE NAME='ORAPDB1';

NAME		     CAUSE							      ERROR_NUMBER MESSAGE					      STATUS
-------------------- ---------------------------------------------------------------- ------------ -------------------------------------------------- ---------
ORAPDB1 	     Non-Application PDB to Application PDB					 0 Non-Application PDB plugged in as an Application P PENDING
												   DB, requires pdb_to_apppdb.sql be run.

It says we need to run a pdb_to_apppdb.sql file to resolve this error.

Step 11: Connect to orapdb1 and run pdb_to_apppdb.sql

SQL> alter session set container=orapdb1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORAPDB1

Step 12: run pdb_to_apppdb SQL file

SQL> @?/rdbms/admin/pdb_to_apppdb

Step 13 : Check v$pdbs :

SQL> SELECT con_id, name, open_mode, application_root,application_pdb, application_seed from v$containers where application_pdb='YES';

    CON_ID NAME 															    OPEN_MODE  APP APP APP
---------- -------------------------------------------------------------------------------------------------------------------------------- ---------- --- --- ---
	 5 APP_SAL															    MOUNTED    NO  YES NO
	 6 F348281081_21_1														    READ ONLY  YES YES NO
	 8 ORAPDB1															    READ WRITE NO  YES NO

We can see here ORAPDB1 is listed as application pdb.

Stay tuned for More articles on Oracle Multitenant

Thank you for giving your valuable time to read the above information.

If you want to be updated with all our articles send us the Invitation or Follow us:

Telegram Channel: https://t.me/helporacle

Skant Gupta’s LinkedIn: www.linkedin.com/in/skantali/

Joel Perez’s LinkedIn: Joel Perez’s Profile

LinkedIn Group: Oracle Cloud DBAAS

Facebook Page: OracleHelp

About The Author

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.