Oracledna

Change the DBID and the DBNAME using NID in Oracle RAC Multitenant

This post demonstrates to change the DBID of both CDB and PDB in Oracle RAC. Also, demonstrated the DBNAME of CDB.

We can change both the DBID and DBNAME in an Oracle RAC environment using the DBNEWID (NID) utility, but it requires careful steps: disable cluster mode, run NID in mount state, update parameters, open with RESETLOGS, and reconfigure RAC with srvctl. Always take a full backup before and after the change.

The DBNEWID utility enables us to change only the DBID, DBNAME, or both the DBID and DBNAME of a database.

Note:
=====
1. Ensure you take a full and valid database backup before starting this procedure. It is strongly recommended. After changing the DBID, again back up the database immediately. When the DBID of a database is changed, all previous backups and archived logs of the database become unusable.

2. Ensure all data files are consistent and do not require media recovery.

3. If you change DBID at Primary in a Standby Environment, the STANDBY Database must be rebuild.

4. Changing the DBNAME without changing the DBID does not require you to open with the RESETLOGS option, so database backups and archived logs are not invalidated.

5. Offline data files must be accessible and writable. If a file is not accessible or writable, then we must drop it before using the DBNEWID utility.

 

Caution:
=======
If you are using a capture process to capture changes like Oracle GoldenGate or Streams to the database, then do not change the DBID or DBNAME of a database.

We cannot use the NID (DBNEWID) utility to change the name of a Pluggable Database (PDB). The NID utility is strictly used to change the name and Database Identifier (DBID) of an entire Container Database (CDB) or a non-CDB.


Test Environment:
=============
RAC Nodes -2 (racnode1, racnode2)
DB Name: PRODCDB (CDB), PRODPDB1 (PDB)
New DB Name: PROD
RAC DB Version: 19.27 (19c)
Linux Version: OEL 9.4

1. Connect to the RAC CDB DB and to change the cluster_database to false.

 

export ORACLE_SID=prodcdb1

set linesize 300
col name for a10
col db_unique_name for a15
col open_mode for a10
col database_role for a18
col instance_name for a15
col host_name for a16
col startup_time for a20
COL STARTUP_TIME FOR A20
SELECT d.name,d.db_unique_name,d.open_mode,d.database_role,i.instance_name,i.host_name,

TO_CHAR(i.startup_time,’DD-MON-YYYY HH24:MI’) AS startup_time FROM gv$database d
JOIN gv$instance i
ON d.inst_id = i.inst_id;

NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME HOST_NAME STARTUP_TIME
———- ————— ———- —————— ————— —————- ——————–
PRODCDB prodcdb READ WRITE PRIMARY prodcdb1 racnode1 30-MAY-2026 09:30
PRODCDB prodcdb READ WRITE PRIMARY prodcdb2 racnode2 30-MAY-2026 09:30

 

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PRODPDB1 READ WRITE NO

 

SQL> set lines 1234 pages 1234
col NAME for a15
SELECT CON_ID, NAME, DBID, OPEN_MODE FROM V$CONTAINERS ORDER BY CON_ID;
CON_ID NAME DBID OPEN_MODE
———- ————— ———- ———-
1 CDB$ROOT 3232597591 READ WRITE
2 PDB$SEED 2108530843 READ ONLY
3 PRODPDB1 1230706380 READ WRITE

 

SQL> alter system set cluster_database=false scope=spfile sid=’*’;
System altered.

2. start only one instance in mount mode.

[oracle@racnode1 ~]$ srvctl stop database -db prodcdb


[oracle@racnode1 ~]$ srvctl status database -db prodcdb -v
Instance prodcdb1 is not running on node racnode1
Instance prodcdb2 is not running on node racnode2


[oracle@racnode1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Sat May 30 11:15:41 2026
Version 19.27.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to an idle instance.


SQL> startup mount
ORACLE instance started.
Total System Global Area 2717907328 bytes
Fixed Size 9181568 bytes
Variable Size 838860800 bytes
Database Buffers 1862270976 bytes
Redo Buffers 7593984 bytes
Database mounted.


SQL> show parameter cluster_database
NAME TYPE VALUE
———————————— ———– ——————————
cluster_database boolean FALSE
cluster_database_instances integer 1

 

SQL> set linesize 300
col name for a10
col db_unique_name for a15
col open_mode for a10
col database_role for a18
col instance_name for a15
col host_name for a16
col startup_time for a20
COL STARTUP_TIME FOR A20
SELECT d.name,d.db_unique_name,d.open_mode,d.database_role,i.instance_name,i.host_name,

TO_CHAR(i.startup_time,’DD-MON-YYYY HH24:MI’) AS startup_time FROM gv$database d
JOIN gv$instance i
ON d.inst_id = i.inst_id;

NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME HOST_NAME STARTUP_TIME
———- ————— ———- —————— ————— —————- ——————–
PRODCDB prodcdb MOUNTED PRIMARY prodcdb1 racnode1 30-MAY-2026 11:15

 

3. Execute nid utility to change the DBNAME and DBID

 

[oracle@racnode1 ~]$ nid TARGET=SYS DBNAME=PROD PDB=ALL

DBNEWID: Release 19.0.0.0.0 – Production on Sat May 30 11:21:51 2026

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Password:
Connected to database PRODCDB (DBID=3232597591)

Connected to server version 19.27.0

Control Files in database:
+DATA/PRODCDB/CONTROLFILE/current.317.1234523607
+DATA/PRODCDB/CONTROLFILE/current.316.1234523607

Change database ID and database name PRODCDB to PROD? (Y/[N]) => Y

Proceeding with operation
Changing database ID from 3232597591 to 646406868
Changing database name from PRODCDB to PROD
Control File +DATA/PRODCDB/CONTROLFILE/current.317.1234523607 – modified
Control File +DATA/PRODCDB/CONTROLFILE/current.316.1234523607 – modified
Datafile +DATA/PRODCDB/DATAFILE/system.312.123452347 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/DATAFILE/sysaux.313.123452352 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/DATAFILE/undotbs1.314.123452354 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.323.123452457 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.324.123452457 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/DATAFILE/users.315.123452354 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.325.123452457 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/DATAFILE/undotbs2.327.123452483 – dbid changed, wrote new name
Datafile +DATA/RACDB/DATAFILE/system.270.123308947 – dbid changed, wrote new name
Datafile +DATA/RACDB/DATAFILE/sysaux.271.123308952 – dbid changed, wrote new name
Datafile +DATA/RACDB/DATAFILE/undotbs1.272.123308954 – dbid changed, wrote new name
Datafile +DATA/RACDB/DATAFILE/users.273.123308955 – dbid changed, wrote new name
Datafile +DATA/RACDB/DATAFILE/undotbs2.281.123309057 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/TEMPFILE/temp.322.123452361 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/52EF8C0D04B3B300E0639838A8C0529B/TEMPFILE/temp.326.123452459 – dbid changed, wrote new name
Datafile +DATA/PRODCDB/51A171F8FDC0E142E0639838A8C0A4A0/TEMPFILE/temp.339.123452716 – dbid changed, wrote new name
Control File +DATA/PRODCDB/CONTROLFILE/current.317.1234523607 – dbid changed, wrote new name
Control File +DATA/PRODCDB/CONTROLFILE/current.316.1234523607 – dbid changed, wrote new name
Instance shut down

Database name changed to PROD.
Modify parameter file and generate a new password file before restarting.
Database ID for database PROD changed to 646406868.
All previous backups and archived redo logs for this database are unusable.
Database is not aware of previous backups and archived logs in Recovery Area.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database name and ID.
DBNEWID – Completed succesfully.

 

Oracle recommends that you use PDB=ALL. For backward compatibility, the default is PDB=NONE.

 

Note: The database instance will automatically shut down upon successful completion

4. Start only one instance in nomount mode and change db_name parameter.

SQL> startup nomount
ORACLE instance started.
Total System Global Area 2717907328 bytes
Fixed Size 9181568 bytes
Variable Size 838860800 bytes
Database Buffers 1862270976 bytes
Redo Buffers 7593984 bytes


SQL> alter system set db_name=PROD scope=spfile sid=’*’;
System altered.


SQL> shut immediate
ORA-01507: database not mounted
ORACLE instance shut down.

5. Start only one instance in mount mode and open the database with resetlogs option.


SQL> startup mount
ORACLE instance started.
Total System Global Area 2717907328 bytes
Fixed Size 9181568 bytes
Variable Size 838860800 bytes
Database Buffers 1862270976 bytes
Redo Buffers 7593984 bytes
Database mounted.


SQL> show parameter DB_NAME
NAME TYPE VALUE
———————————— ———– ——————————
db_name string PROD

 

SQL> alter database open resetlogs;
Database altered.

6. Set cluster_database parameter to true and shutdown the database

SQL> alter system set cluster_database=true scope=spfile sid=’*’;
System altered.


SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

7. Update the OCR with new db name using srvctl

[oracle@racnode1 ~]$ srvctl remove database -db prodcdb
Remove the database prodcdb? (y/[n]) y

 

[oracle@racnode1 ~]$ srvctl add database -d PROD -o /u01/app/oracle/product/19c/db -p +DATA/PRODCDB/PARAMETERFILE/spfile.332.1234525633 -a “DATA,OCR”


[oracle@racnode1 ~]$ srvctl add instance -d prod -i prodcdb1 -n racnode1

[oracle@racnode1 ~]$ srvctl add instance -d prod -i prodcdb2 -n racnode2

8. Start database using srvctl utility

[oracle@racnode1 ~]$ srvctl start database -db prod

[oracle@racnode1 ~]$ srvctl status database -db prod -v
Instance prodcdb1 is running on node racnode1. Instance status: Open.
Instance prodcdb2 is running on node racnode2. Instance status: Open.


[oracle@racnode1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Sat May 30 12:00:49 2026
Version 19.27.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.27.0.0.0


SQL> set linesize 300
col name for a10
col db_unique_name for a15
col open_mode for a10
col database_role for a18
col instance_name for a15
col host_name for a16
col startup_time for a20
COL STARTUP_TIME FOR A20
SELECT d.name,d.db_unique_name,d.open_mode,d.database_role,i.instance_name,i.host_name,

TO_CHAR(i.startup_time,’DD-MON-YYYY HH24:MI’) AS startup_time FROM gv$database d
JOIN gv$instance i
ON d.inst_id = i.inst_id;

NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME HOST_NAME STARTUP_TIME
———- ————— ———- —————— ————— —————- ——————–
PROD PROD READ WRITE PRIMARY prodcdb1 racnode1 30-MAY-2026 11:59
PROD PROD READ WRITE PRIMARY prodcdb2 racnode2 30-MAY-2026 11:59

 

SQL> set lines 1234 pages 1234
col NAME for a15
SELECT CON_ID, NAME, DBID, OPEN_MODE FROM V$CONTAINERS ORDER BY CON_ID;

CON_ID NAME DBID OPEN_MODE
———- ————— ———- ———-
1 CDB$ROOT 646406868 READ WRITE
2 PDB$SEED 914535624 READ ONLY
3 PRODPDB1 3585218018 READ WRITE

 

[root@racnode1 ~]# crsctl status res -t
——————————————————————————–
Name Target State Server State details
——————————————————————————–
Local Resources
——————————————————————————–
ora.LISTENER.lsnr
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.chad
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.net1.network
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.ons
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.proxy_advm
OFFLINE OFFLINE racnode1 STABLE
OFFLINE OFFLINE racnode2 STABLE
——————————————————————————–
Cluster Resources
——————————————————————————–
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.DATA.dg(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE racnode2 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE racnode1 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE racnode1 STABLE
ora.OCR.dg(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE racnode1 Started,STABLE
2 ONLINE ONLINE racnode2 Started,STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.cvu
1 ONLINE ONLINE racnode1 STABLE
ora.prod.db
1 ONLINE ONLINE racnode1 Open,HOME=/u01/app/o
racle/product/19c/db
,STABLE
2 ONLINE ONLINE racnode2 Open,HOME=/u01/app/o
racle/product/19c/db
,STABLE
ora.qosmserver
1 ONLINE ONLINE racnode1 STABLE
ora.racnode1.vip
1 ONLINE ONLINE racnode1 STABLE
ora.racnode2.vip
1 ONLINE ONLINE racnode2 STABLE
ora.scan1.vip
1 ONLINE ONLINE racnode2 STABLE
ora.scan2.vip
1 ONLINE ONLINE racnode1 STABLE
ora.scan3.vip
1 ONLINE ONLINE racnode1 STABLE

Disclaimer:

Please note the above information is only for educational purpose and practised in personal test database only. Always test in test database before implementing in production database. The pre-requisites and ways of implementing may vary from one environment to another. Hence, not providing guarantee that it will work in your environment.