Overview

To rename a database, you need to change the header of the database file headers, the controlfiles and god knows what else :) Luckily for us, there is a tool by Oracle “NID” (New ID) which will do all that for us. Historically, I used to change the DB name manually, by: recreating the spfile, controlfile and opening with resetlogs.

So let's see how all that can be done

Using NID

First, we need to shutdown the database and start it in a mount state:

Startup in mount

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 3724541952 bytes
Fixed Size                  8627296 bytes
Variable Size             872418208 bytes
Database Buffers         2835349504 bytes
Redo Buffers                8146944 bytes
Database mounted.

Then we can use the NID tool to change the DB name as follows:

Change DB Name

[oracle@temporaback admin]$ nid target=sys/password DBNAME=newname

DBNEWID: Release 12.2.0.1.0 - Production on Wed May 11 11:44:59 2022

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

Connected to database OLDNAME(DBID=************)

Connected to server version 12.2.0

Control Files in database:
    /app/data/orcltest/control01.ctl
    /app/data/fast_recovery_area/orcltest/control02.ctl

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

Proceeding with operation
Changing database ID from ************* to *********
Changing database name from OLDNAME to NEWNAME
    Control File /app/data/orcltest/control01.ctl - modified
    Control File /app/data/fast_recovery_area/orcltest/control02.ctl - modified
    Datafile /app/data/orcltest/system01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/tbs_data_02.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/sysaux01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/undotbs01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/tbs_data_01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/users01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/tbs_ind_01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/tbs_inx_01.db - dbid changed, wrote new name
    Datafile /app/data/orcltest/temp01.db - dbid changed, wrote new name
    Control File /app/data/orcltest/control01.ctl - dbid changed, wrote new name
    Control File /app/data/fast_recovery_area/orcltest/control02.ctl - dbid changed, wrote new name
    Instance shut down

Database name changed to NEWNAME.
Modify parameter file and generate a new password file before restarting.
Database ID for database ORCLBACK changed to 3567561723.
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@temporaback admin]$ 

Then we can change the pfile and startup the DB with reset logs:

Startup the DB (After changing the init file

[oracle@temporaback dbs]$ vi initorclback.ora
[oracle@temporaback dbs]$ sqlplus

SQL*Plus: Release 12.2.0.1.0 Production on Wed May 11 11:46:45 2022

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

Enter user-name: / as sysdba
Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 3724541952 bytes
Fixed Size                  8627296 bytes
Variable Size             872418208 bytes
Database Buffers         2835349504 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> alter database open resetlogs;

Database altered.

SQL>