Monday, April 19, 2021

Renaming PDB



 Renaming the PDBS is very easy in the CDB / PDB architure. 

With 18c onwards , we can have 3 pdbs with the regular oracle license. 

Please refer to the documentation for further details. 

In my example , I have 3 pdbs. We will be renaming one of the pdbs ( from PDB1 to  pdb_lx). 


Here are my list of PBS

SQL> select name  from v$pdbs;

NAME

--------------------------------

PDB$SEED

PDB1

PDB2

PDB3


Let us confirm if we are in the correct container. 

SQL> alter session set container=PDB1;

Session altered.

SQL> show con_id

CON_ID

------------------------------

3

SQL> show con_name

CON_NAME

------------------------------

PDB1


PDB needs to be restricted state for it to be renamed. 

So , we will close and reopen in the restricted mode. 


SQL> alter pluggable database rename global_name to pdb_lx;

alter pluggable database rename global_name to pdb_lx

*

ERROR at line 1:

ORA-65045: pluggable database not in a restricted mode


SQL> alter pluggable database PDB1 close;

Pluggable database altered.

SQL> alter pluggable database PDB1 open restricted;

Pluggable database altered.

SQL> alter pluggable database rename global_name to pdb_lx;

Pluggable database altered.


Just to confirm , we will select the old name for the PDB. 

As expected , this will fail. 


SQL> alter session set container=PDB1;

ERROR:

ORA-65011: Pluggable database PDB1 does not exist.


Even though the renaming of the PDB is successful , the underlying file structure still has pdb1. 


$ ls -lrt /ora01/oradata/CDBLX/pdb1

total 640088

-rw-r-----. 1 oracle oinstall  37756928 Apr 19 11:32 temp01.dbf

-rw-r-----. 1 oracle oinstall   5251072 Apr 19 11:39 users01.dbf

-rw-r-----. 1 oracle oinstall 104865792 Apr 19 11:39 undotbs01.dbf

-rw-r-----. 1 oracle oinstall 283123712 Apr 19 11:39 system01.dbf

-rw-r-----. 1 oracle oinstall 262152192 Apr 19 11:39 sysaux01.dbf


We will create directory and move the datafiles ONLINE ( hey , we are in 19c) . 

mkdir -p / /ora01/oradata/CDBLX/pdb_lx

$ ls -lrt /ora01/oradata/CDBLX/pdb_lx/

total 0

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 19 11:47:46 2021

Version 19.3.0.0.0

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

SQL> alter session set container=pdb_lx;

Session altered.

SQL>  alter database move datafile '/ora01/oradata/CDBLX/pdb1/undotbs01.dbf' to '/ora01/oradata/CDBLX/pdb_lx/undotbs01.dbf';

Database altered.

SQL> alter database move datafile '/ora01/oradata/CDBLX/pdb1/sysaux01.dbf' to '/ora01/oradata/CDBLX/pdb_lx/sysaux01.dbf';

Database altered.

SQL> alter database move datafile '/ora01/oradata/CDBLX/pdb1/system01.dbf' to '/ora01/oradata/CDBLX/pdb_lx/system01.dbf';

Database altered.

SQL> alter database move datafile '/ora01/oradata/CDBLX/pdb1/users01.dbf' to '/ora01/oradata/CDBLX/pdb_lx/users01.dbf';

Database altered.


We will drop the temp tablespace datafile from the old directory and recreate it in the new directory.


SQL> alter database tempfile '/ora01/oradata/CDBLX/pdb1/temp01.dbf' drop including datafiles;

Database altered.

SQL> alter tablespace TEMP add tempfile '/ora01/oradata/CDBLX/pdb_lx/temp01.dbf' size 1G reuse;

Tablespace altered.


Let us confirm the contents of the  directory structure


SQL> ! ls -lrt /ora01/oradata/CDBLX/pdb1/

total 0

SQL> ! ls -lrt /ora01/oradata/CDBLX/pdb_lx

total 641056

-rw-r-----. 1 oracle oinstall  104865792 Apr 19 11:48 undotbs01.dbf

-rw-r-----. 1 oracle oinstall  262152192 Apr 19 11:49 sysaux01.dbf

-rw-r-----. 1 oracle oinstall  283123712 Apr 19 11:49 system01.dbf

-rw-r-----. 1 oracle oinstall    5251072 Apr 19 11:49 users01.dbf

-rw-r-----. 1 oracle oinstall 1073750016 Apr 19 11:49 temp01.dbf


Let us say close the PDB and open it in the normal mode. 

SQL> alter pluggable database pdb_lx close;

Pluggable database altered.

SQL> alter pluggable database pdb_lx open;

Pluggable database altered.


We are back in business with the new name for the PDB. 

For the databases in non-CDB architecture , we will be using DBNEWID (nid) utility.