Rename a PDB in Oracle Database Multitenant Architecture

I am sharing a step-by-step guide to help you rename a PDB. This approach uses SQL commands.

Without TDE or encryption Wallet


Initial Check

Check the Current Database Name and Open Mode:


SQL> SELECT NAME, OPEN_MODE FROM V$DATABASE; NAME OPEN_MODE --------- -------------------- BEECDB READ WRITE


List Current PDBs:


SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 FUAT READ WRITE NO
We need to RENAME FUAT to BEE 

Steps to Rename the PDB

Step 1: Export ORACLE_SID

Set the Oracle SID to the Container Database (CDB):


export ORACLE_SID=BEECDB

Step 2: Verify Target PDB Name Availability

If the target PDB name is different from the current PDB name, ensure no service exists with the target PDB name.

Run SQL to Check Existing Services:


$ sqlplus / as sysdba SQL> ALTER SESSION SET CONTAINER="FUAT"; SQL> SELECT COUNT(*) FROM CDB_SERVICES C, SERVICE$ S WHERE UPPER(S.NAME) = UPPER('<TARGET PDB_NAME>') AND S.DELETION_DATE IS NULL AND S.NAME = C.NAME;

If the result is 0, proceed to the next step. Otherwise, delete the service.

Delete Existing Service (if needed):


SQL> DBMS_SERVICE.DELETE_SERVICE('<TARGET PDB_NAME>');

Step 3: Rename the PDB

Close the Source PDB:


SQL> ALTER PLUGGABLE DATABASE "FUAT" CLOSE;

Unplug the PDB:


SQL> ALTER PLUGGABLE DATABASE "FUAT"  
UNPLUG INTO '<ORACLE_HOME>/dbs/FUAT.xml';

Drop the PDB:


SQL> DROP PLUGGABLE DATABASE "FUAT";

Create the New PDB: Use the NOCOPY option to reuse the existing data files:


SQL> CREATE PLUGGABLE DATABASE "BEE" USING '<ORACLE_HOME>/dbs/FUAT.xml' NOCOPY SERVICE_NAME_CONVERT=('ebs_FUAT','ebs_BEE', 'FUAT_ebs_patch','BEE_ebs_patch');

Open the New PDB in Read/Write Mode:


SQL> ALTER PLUGGABLE DATABASE "BEE" OPEN READ WRITE;

Step 4: Verify the Renamed PDB

List the PDBs to Confirm the Name Change:


SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 BEE READ WRITE NO

Ensure the PDB Name Adheres to Restrictions:

PDB names should not exceed 8 characters.

Step 5: Save the State of the PDB

Start the PDB and Save its State: For a single-node database:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;

For an Oracle RAC database:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN INSTANCES=ALL;

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE INSTANCES=ALL;

Run the library update script against the Oracle Database.

Where <libext> should be set to sl for HP-UX, so for any other UNIX platform, or dll for Windows.

$ cd <ORACLE_HOME>/appsutil/install/<CONTEXT_NAME>
$ sqlplus / as sysdba @adupdlib.sql <libext>



Output Execution

Below is an example of the process in action:


[oracle@funebs122 dbs]$ export ORACLE_SID=BEECDB [oracle@funebs122 dbs]$ sqlplus '/as sysdba' SQL> ALTER PLUGGABLE DATABASE "FUAT" CLOSE; Pluggable database altered. SQL> ALTER PLUGGABLE DATABASE "FUAT" UNPLUG INTO
'/oraapps122/DATABASE/BEE/19c/dbs/FUAT.xml'; Pluggable database altered. SQL> DROP PLUGGABLE DATABASE "FUAT"; Pluggable database dropped. SQL> CREATE PLUGGABLE DATABASE "BEE" USING
'/oraapps122/DATABASE/BEE/19c/dbs/FUAT.xml' NOCOPY SERVICE_NAME_CONVERT=
('ebs_FUAT','ebs_BEE','FUAT_ebs_patch','BEE_ebs_patch'); Pluggable database created. SQL> ALTER PLUGGABLE DATABASE "BEE" OPEN READ WRITE; Pluggable database altered. SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 BEE READ WRITE NO


SQL> @adupdlib.sql so PL/SQL procedure successfully completed.

With TDE or encryption Wallet

Step 1: Close the Auto-login Wallet

Verify Wallet Location:


SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET; WRL_PARAMETER ---------------------------------------------- <wallet_location>

Backup and Disable Auto-login:


$ cd <wallet_location> $ mv cwallet.sso cwallet.sso.bkp

Close the Wallet:


SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE;

Open the Wallet with Password:


SQL> ADMINISTER KEY MANAGEMENT SET
KEYSTORE OPEN IDENTIFIED BY <keystore_pwd>;

Verify Wallet Status:


SQL> SELECT * FROM V$ENCRYPTION_WALLET;

Step 2: Export Encryption Keys

Set the Target PDB Container:


SQL> ALTER SESSION SET CONTAINER="FUAT";

Open the Wallet in the Target PDB:


SQL> ADMINISTER KEY MANAGEMENT SET
KEYSTORE OPEN IDENTIFIED BY <keystore_pwd>;

Export Encryption Keys:


SQL> ADMINISTER KEY MANAGEMENT EXPORT
ENCRYPTION KEYS WITH SECRET "<secret_pwd>" TO '<wallet_location>/exp_tde.exp'
IDENTIFIED BY <keystore_pwd>;

Note: Provide a secret_pwd to protect the exported keys.


Step 3: Rename the PDB

Close and Unplug the Source PDB:


SQL> ALTER PLUGGABLE DATABASE "FUAT" CLOSE; SQL> ALTER PLUGGABLE DATABASE "FUAT" UNPLUG
INTO '<ORACLE_HOME>/dbs/FUAT.xml';

Drop the Source PDB:


SQL> DROP PLUGGABLE DATABASE "FUAT";

This step removes the PDB metadata without deleting its contents.

Create the New PDB:


SQL> CREATE PLUGGABLE DATABASE "BEE" USING '<ORACLE_HOME>/dbs/FUAT.xml' NOCOPY SERVICE_NAME_CONVERT=
('ebs_FUAT','ebs_BEE','FUAT_ebs_patch','BEE_ebs_patch');

Open the New PDB:


SQL> ALTER PLUGGABLE DATABASE "BEE" OPEN READ WRITE;

A warning will be displayed because the encryption keys are not yet imported.


Check Errors in PDB_PLUG_IN_VIOLATIONS:


SQL> SELECT NAME, CAUSE, TYPE, STATUS, ACTION, MESSAGE, TIME FROM PDB_PLUG_IN_VIOLATIONS;

Step 4: Import Encryption Keys

Set the Target PDB Container:


SQL> ALTER SESSION SET CONTAINER="BEE";
SQL> ADMINISTER KEY MANAGEMENT SET
KEYSTORE OPEN IDENTIFIED BY <keystore_pwd>;

Import Encryption Keys:


SQL> ADMINISTER KEY MANAGEMENT IMPORT
ENCRYPTION KEYS WITH SECRET "<secret_pwd>" FROM '<wallet_location>/exp_tde.exp'
IDENTIFIED BY <keystore_pwd> WITH BACKUP;

SQL> SHUT IMMEDIATE; SQL> STARTUP;

Verify the PDB:


SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 BEE. READ WRITE NO

Step 5: Re-enable Auto-login Wallet

Create Auto-login Wallet:

SQL> ADMINISTER KEY MANAGEMENT CREATE
AUTO_LOGIN KEYSTORE FROM KEYSTORE '<wallet_location>'
IDENTIFIED BY <keystore_pwd>;

Save the PDB State:

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE INSTANCES=ALL;

Restart the Database:


SQL> SHUT IMMEDIATE; SQL> STARTUP;

Step 6: Update Libraries

Run the library update script to ensure the database operates correctly with the updated PDB name:


$ cd <ORACLE_HOME>/appsutil/install/<CONTEXT_NAME> $ sqlplus / as sysdba @adupdlib.sql <libext>

Post-verification


SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 BEE READ WRITE NO


Notes

  • Always take a full backup before making significant changes.
  • Ensure all applications are updated to point to the new PDB name.
  • Adjust TNS entries if necessary.


Please do like and subscribe to my youtube channel: https://www.youtube.com/@foalabs If you like this post please follow,share and comment