Table of Contents
Introduction
In this article, I will show a detailed step-by-step guide of an Oracle RAC database upgrade from 12c to 19c manually.
Oracle RAC database upgrade manually
We will perform the Oracle RAC database upgrade in 3 parts.
1) PRECHECK
2) UPGRADE
3) POSTCHECK
Now, let's begin the setup.
PRECHECK
Precheck is the first step in the Oracle RAC database upgrade.
Step 1) Check the database status
[oracle@lab1 ~]$ srvctl status database -d DEVDB
Instance DEVDB1 is running on node lab1
Instance DEVDB2 is running on node lab2
set lines 250 pages 250
col HOST_NAME for a15
col DB_Start_Time for a20
col HOST_NAME for a20
alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';
SELECT NAME as DB_NAME,instance_name,OPEN_MODE,HOST_NAME,database_role,logins FROM gV$INSTANCE,v$database;
DB_NAME INSTANCE_NAME OPEN_MODE HOST_NAME DATABASE_ROLE LOGINS
--------- ---------------- -------------------- -------------------- ---------------- ----------
DEVDB DEVDB2 READ WRITE lab2.localdomain.com PRIMARY ALLOWED
DEVDB DEVDB1 READ WRITE lab1.localdomain.com PRIMARY ALLOWED
Step 2) Spfile and pfile backup
SQL> create pfile='/tmp/initDEVDB1.ora' from spfile;
File created.
Step 3) Database Archive Log mode
Note: – Before performing the Oracle RAC database upgrade, putting the database in Archive log is one of the mandatory steps.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 2
Current log sequence 3
As we can check from the above output Database is in No Archive log mode. First, we need to change the IT mode from No Archive to Archive log mode.
Step 4) Putting the Database in Archive Log Mode
[oracle@lab1 DEVDB]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 22 20:03:05 2025
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 2667577344 bytes
Fixed Size 8624264 bytes
Variable Size 754976632 bytes
Database Buffers 1895825408 bytes
Redo Buffers 8151040 bytes
Database mounted.
SQL>
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 2
Current log sequence 3
SQL>
SQL>
SQL> alter database archivelog;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 2
Next log sequence to archive 3
Current log sequence 3
Node 2 Output
[oracle@lab2 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Aug 22 20:06:42 2025
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
Step 5) Take Oracle DB Backup
Taking an Oracle DB backup is a very important step in an Oracle RAC database upgrade because in case something happens to the Guarantee restore point, then in that case you can restore your database using the Oracle DB backup.
export ORACLE_SID=DEVDB1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$PATH:$ORACLE_HOME/bin
find /u01/backup/DEVDB -name "L0_*.log" -type f | sort | head -n -5 | xargs -r rm -f
rman target / log=/u01/backup/DEVDB/L0_$(date +%Y%m%d_%H_%M).log <<EOF
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
crosscheck backup;
delete noprompt expired backup;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup incremental level 0 database format='/u01/backup/DEVDB/database_L0_%d_%T_%U' plus archivelog format='/u01/backup/DEVDB/archivelog_%d_%T_%U';
backup spfile format='/u01/backup/DEVDB/spfile_%d_%T_%U';
backup current controlfile format='/u01/backup/DEVDB/controlfile_%d_%T_%U';
backup current controlfile for standby format='/u01/backup/DEVDB/stndby_cf_%d_t%t_s%s_p%p';
release channel ch1;
release channel ch2;
}
quit;
EOF
Step 6) Oracle Home Backup
- DB Home backup
tar -cvpzf /u01/backup/DEVDB/OH_backup/Oracle_Home.tar /u01/app/oracle/product/12.2.0/dbhome_1
tar → archive utility (tape archive)
-c → create a new archive
-v → verbose (shows progress on screen)
-p → preserve permissions (keeps file ownership & permissions intact)
-z → compress with gzip (creates .tar.gz file)
-f → filename (specifies the name of the backup file)
Output
[oracle@lab1 OH_backup]$ ls -lrt
total 6922396
-rw-r--r-- 1 oracle oinstall 7088532753 Aug 22 20:58 Oracle_Home.tar
Step 7) Check for Invalid objects
set lines 200 pages 200
col owner for a14
col object_name for a30
col object_type for a30
select count(*) from dba_objects where status='INVALID' and owner like '%SYS%';
COUNT(*)
----------
0
Step 8) Create GRP (Guarantee Restore Point)
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FRA
db_recovery_file_dest_size big integer 15G
recovery_parallelism integer 0
remote_recovery_file_dest string
SQL>
SQL> create restore point pre_upgrade guarantee flashback database;
Restore point created.
SQL> col name for a20
col GUARANTEE_FLASHBACK_DATABASE for a10
col TIME for a60
set lines 190
select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point;
NAME GUARANTEE_ TIME
-------------------- ---------- ------------------------------------------------------------
PRE_UPGRADE YES 23-AUG-25 11.12.12.000000000 AM
Step 9 ) List database object count for APPs Schema
Step 10) Gather dictionary stats and fixed object stats
SET ECHO ON;
SET SERVEROUTPUT ON;
EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
Output
SQL> SET ECHO ON;
SET SERVEROUTPUT ON;
EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
PL/SQL procedure successfully completed.
SQL> EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
PL/SQL procedure successfully completed.
Step 11) Purge the recycle bin
SQL> PURGE DBA_RECYCLEBIN;
DBA Recyclebin purged.
Step 12) Check DBA Registry
col comp_id for a10
col version for a11
col status for a10
col comp_name for a38
select comp_id,comp_name,version,status from dba_registry;
COMP_ID COMP_NAME VERSION STATUS
---------- -------------------------------------- ----------- ----------
CATALOG Oracle Database Catalog Views 12.2.0.1.0 VALID
CATPROC Oracle Database Packages and Types 12.2.0.1.0 VALID
JAVAVM JServer JAVA Virtual Machine 12.2.0.1.0 VALID
XML Oracle XDK 12.2.0.1.0 VALID
CATJAVA Oracle Database Java Packages 12.2.0.1.0 VALID
APS OLAP Analytic Workspace 12.2.0.1.0 VALID
RAC Oracle Real Application Clusters 12.2.0.1.0 VALID
XDB Oracle XML Database 12.2.0.1.0 VALID
OWM Oracle Workspace Manager 12.2.0.1.0 VALID
CONTEXT Oracle Text 12.2.0.1.0 VALID
ORDIM Oracle Multimedia 12.2.0.1.0 VALID
SDO Spatial 12.2.0.1.0 VALID
XOQ Oracle OLAP API 12.2.0.1.0 VALID
OLS Oracle Label Security 12.2.0.1.0 VALID
DV Oracle Database Vault 12.2.0.1.0 VALID
Step 13) DB Links Status
col owner for a20
col host for a20
col db_link for a20
col username for a20
set lines 200 pages 200
select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED HID
-------------------- -------------------- -------------------- -------------------- --------- ---
SYS SYS_HUB SEEDDATA 26-JAN-17 NO
Step 14) Run Oracle prechecks scripts
Download Preupgrade.jar file from MOS 884522.1
Once downloaded unzip it in below path of 19c.
Path : - /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin
Output
[oracle@lab1 u01]$ unzip preupgrade_19_cbuild_13_lf.zip -d /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin
Archive: preupgrade_19_cbuild_13_lf.zip
replace /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade_package.sql? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade_package.sql
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade_driver.sql
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/dbms_registry_extended.sql
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/parameters.properties
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade_messages.properties
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/components.properties
inflating: /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade.jar
Command : - /u01/app/oracle/product/19.0.0.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade.jar TERMINAL TEXT
Output
[oracle@lab1 u01]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin/preupgrade.jar TERMINAL TEXT
Report generated by Oracle Database Pre-Upgrade Information Tool Version
19.0.0.0.0 Build: 13 on 2025-08-23T11:55:25
Upgrade-To version: 19.0.0.0.0
=======================================
Status of the database prior to upgrade
=======================================
Database Name: DEVDB
Container Name: DEVDB
Container ID: 0
Version: 12.2.0.1.0
DB Patch Level: No Patch Bundle applied
Compatible: 12.2.0
Blocksize: 8192
Platform: Linux x86 64-bit
Timezone File: 26
Database log mode: ARCHIVELOG
Readonly: FALSE
Edition: EE
Oracle Component Upgrade Action Current Status
---------------- -------------- --------------
Oracle Server [to be upgraded] VALID
JServer JAVA Virtual Machine [to be upgraded] VALID
Oracle XDK for Java [to be upgraded] VALID
Real Application Clusters [to be upgraded] VALID
Oracle Workspace Manager [to be upgraded] VALID
OLAP Analytic Workspace [to be upgraded] VALID
Oracle Label Security [to be upgraded] VALID
Oracle Database Vault [to be upgraded] VALID
Oracle Text [to be upgraded] VALID
Oracle XML Database [to be upgraded] VALID
Oracle Java Packages [to be upgraded] VALID
Oracle Multimedia [to be upgraded] VALID
Oracle Spatial [to be upgraded] VALID
Oracle OLAP API [to be upgraded] VALID
==============
BEFORE UPGRADE
==============
REQUIRED ACTIONS
================
None
RECOMMENDED ACTIONS
===================
1. Review and remove any unnecessary HIDDEN/UNDERSCORE parameters.
The database contains the following initialization parameters whose name
begins with an underscore:
_ipddb_enable
Remove hidden parameters before database upgrade unless your application
vendors and/or Oracle Support state differently. Changes will need to be
made in the pfile/spfile.
INFORMATION ONLY
================
2. Here are ALL the components in this database registry:
Component Current Current Original Previous Component
CID Version Status Version Version Schema
--------- ----------- ----------- ----------- ----------- -----------
APS 12.2.0.1.0 VALID SYS
CATALOG 12.2.0.1.0 VALID SYS
CATJAVA 12.2.0.1.0 VALID SYS
CATPROC 12.2.0.1.0 VALID SYS
CONTEXT 12.2.0.1.0 VALID CTXSYS
DV 12.2.0.1.0 VALID DVSYS
JAVAVM 12.2.0.1.0 VALID SYS
OLS 12.2.0.1.0 VALID LBACSYS
ORDIM 12.2.0.1.0 VALID ORDSYS
OWM 12.2.0.1.0 VALID WMSYS
RAC 12.2.0.1.0 VALID SYS
SDO 12.2.0.1.0 VALID MDSYS
XDB 12.2.0.1.0 VALID XDB
XML 12.2.0.1.0 VALID SYS
XOQ 12.2.0.1.0 VALID OLAPSYS
Review the information before upgrading.
3. Check the Oracle Backup and Recovery User's Guide for information on how
to manage an RMAN recovery catalog schema.
If you are using a version of the recovery catalog schema that is older
than that required by the RMAN client version, then you must upgrade the
catalog schema.
It is good practice to have the catalog schema the same or higher version
than the RMAN client version you are using.
4. Here is a count of invalid objects by Oracle-maintained users:
Oracle-Maintained User Name Number of INVALID Objects
--------------------------- -------------------------
None None
Review the information before upgrading.
5. Here is a count of invalid objects by Application users:
Application User Name Number of INVALID Objects
--------------------------- -------------------------
None None
Review the information before upgrading.
=============
AFTER UPGRADE
=============
REQUIRED ACTIONS
================
None
RECOMMENDED ACTIONS
===================
6. Upgrade the database time zone file using the DBMS_DST package.
The database is using time zone file version 26 and the target 19 release
ships with time zone file version 32.
Oracle recommends upgrading to the desired (latest) version of the time
zone file. For more information, refer to "Upgrading the Time Zone File
and Timestamp with Time Zone Data" in the 19 Oracle Database
Globalization Support Guide.
7. (AUTOFIXUP) Gather dictionary statistics after the upgrade using the
command:
EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
Oracle recommends gathering dictionary statistics after upgrade.
Dictionary statistics provide essential information to the Oracle
optimizer to help it find efficient SQL execution plans. After a database
upgrade, statistics need to be re-gathered as there can now be tables
that have significantly changed during the upgrade or new tables that do
not have statistics gathered yet.
8. Gather statistics on fixed objects after the upgrade and when there is a
representative workload on the system using the command:
EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
This recommendation is given for all preupgrade runs.
Fixed object statistics provide essential information to the Oracle
optimizer to help it find efficient SQL execution plans. Those
statistics are specific to the Oracle Database release that generates
them, and can be stale upon database upgrade.
For information on managing optimizer statistics, refer to the 12.2.0.1
Oracle Database SQL Tuning Guide.
ORACLE GENERATED FIXUP SCRIPT
=============================
All of the issues in database DEVDB
which are identified above as AFTER UPGRADE "(AUTOFIXUP)" can be resolved by
executing the following
SQL>@/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/postupgrade_fixups.sql
==================
PREUPGRADE SUMMARY
==================
/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/preupgrade.log
/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/preupgrade_fixups.sql
/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/postupgrade_fixups.sql
Execute fixup scripts as indicated below:
Before upgrade:
Log into the database and execute the preupgrade fixups
@/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/preupgrade_fixups.sql
After the upgrade:
Log into the database and execute the postupgrade fixups
@/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/postupgrade_fixups.sql
Preupgrade complete: 2025-08-23T11:55:25
[oracle@lab1 u01]$
UPGRADE
The next step is the Oracle RAC database upgrade.
Step 1) We need to stop the database using the SRVCTL command
srvctl stop database -d devdb
Step 2) Log in from node 1 and start the database in NOMOUNT stage
[oracle@lab1 u01]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Aug 23 12:31:03 2025
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 2667577344 bytes
Fixed Size 8624264 bytes
Variable Size 754976632 bytes
Database Buffers 1895825408 bytes
Redo Buffers 8151040 bytes
Step 3) Make the cluster database parameter FALSE
a)SQL> alter system set cluster_database=false scope=spfile;
System altered.
b)SQL> create pfile from spfile;
File created.
c)shut immediate;
Step 4) Copy the above pfile from 12c to 19c Oracle home and start the DB from one node to perform the Oracle RAC database upgrade
cd /u01/app/oracle/product/12.2.0/dbhome_1/dbs
cp initDEVDB1.ora /u01/app/oracle/product/19.0.0.0/dbhome_1
Step 5) Set the Oracle home for the 19c database
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
env | grep ORA
[oracle@lab1 dbs]$ env | grep ORA
ORACLE_SID=DEVDB1
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
Step 6) Log in to the database and start up the database in UPGRADE mode using the pfile that we copied in 19c home
[oracle@lab1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Aug 23 12:35:18 2025
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup upgrade
pfile='/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/initDEVDB1.ora';
ORACLE instance started.
Total System Global Area 2667574848 bytes
Fixed Size 8943168 bytes
Variable Size 721420288 bytes
Database Buffers 1929379840 bytes
Redo Buffers 7831552 bytes
Database mounted.
Database opened.
Step 7) Now go to the $ORACLE_HOME/bin of the 19c database and perform the Oracle RAC database upgrade
cd $ORACLE_HOME/bin
./dbupgrade
Note:- Oracle RAC database upgrade will start from this moment and it will run from 1 to 107 phases. You will get final output like below.
------------------------------------------------------
Phases [0-107] End Time:[2025_08_25 01:10:48]
------------------------------------------------------
Grand Total Time: 2617s
LOG FILES: (/u01/app/oracle/product/19.0.0.0/dbhome_1/cfgtoollogs/DEVDB/upgrade20250825002711/catupgrd*.log)
Upgrade Summary Report Located in:
/u01/app/oracle/product/19.0.0.0/dbhome_1/cfgtoollogs/DEVDB/upgrade20250825002711/upg_summary.log
Grand Total Upgrade Time: [0d:0h:43m:37s]
POSTCHECK
Postcheck is the last step in the Oracle RAC database upgrade.
Step 8) We have finally performed the Oracle RAC database upgrade, but as we know, the Manual method comes with some drawbacks because we need to perform several things after the upgrade.
a) The database will not come up automatically.
[oracle@lab1 bin]$ ps -ef | grep pmon
oracle 6964 1 0 Aug24 ? 00:00:00 asm_pmon_+ASM1
oracle 9601 6848 0 01:22 pts/1 00:00:00 grep --color=auto pmon
[oracle@lab1 bin]$ srvctl status database -d DEVDB
Instance DEVDB1 is not running on node lab1
Instance DEVDB2 is not running on node lab2
b) When we check the configuration of the database, the Oracle home is still pointing to 12c
[oracle@lab1 bin]$ srvctl config database -d DEVDB
Database unique name: DEVDB
Database name: DEVDB
Oracle home: /u01/app/oracle/product/12.2.0/dbhome_1
Imp Note:- We need to upgrade the database and set the oracle home of 19c
cd /u01/app/oracle/product/19.0.0.0/dbhome_1/bin
srvctl upgrade database -d DEVDB -oraclehome /u01/app/oracle/product/19.0.0.0/dbhome_1
After Upgrade Output (Set the oracle home to 19c)
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
[oracle@lab1 bin]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/srvctl config database -d DEVDB
Database unique name: DEVDB
Database name: DEVDB
Oracle home: /u01/app/oracle/product/19.0.0.0/dbhome_1
c) If we start the database after these steps, then it will not start and give below error as cluster_database is set as FALSE in the beginning when we start our Oracle RAC database upgrade

Note:- We need to first set the cluster_database parameter is TRUE and then we can start the database
a)srvctl stop database -d DEVDB
b)sqlplus / as sysdba
c)startup nomount;
d)alter system set cluster_database=TRUE scope=spfile;
e)Shut immediate;
f)srvctl status database -d DEVDB
g)srvctl start database -d DEVDB
d) If we check the DBA registry components, their status will show as UPGRADED instead of VALID, so to make them VALID, we need to run the UTLRP scripts.
set lines 200 pages 200
col owner for a14
col object_name for a30
col object_type for a30
select count(*) from dba_objects where status='INVALID' and owner like '%SYS%';
COMP_ID COMP_NAME VERSION STATUS
---------- -------------------------------------- ----------- ----------
CATALOG Oracle Database Catalog Views 19.0.0.0.0 UPGRADED
CATPROC Oracle Database Packages and Types 19.0.0.0.0 UPGRADED
JAVAVM JServer JAVA Virtual Machine 19.0.0.0.0 UPGRADED
XML Oracle XDK 19.0.0.0.0 UPGRADED
CATJAVA Oracle Database Java Packages 19.0.0.0.0 UPGRADED
APS OLAP Analytic Workspace 19.0.0.0.0 UPGRADED
RAC Oracle Real Application Clusters 19.0.0.0.0 UPGRADED
XDB Oracle XML Database 19.0.0.0.0 UPGRADED
OWM Oracle Workspace Manager 19.0.0.0.0 UPGRADED
CONTEXT Oracle Text 19.0.0.0.0 UPGRADED
ORDIM Oracle Multimedia 19.0.0.0.0 UPGRADED
COMP_ID COMP_NAME VERSION STATUS
---------- -------------------------------------- ----------- ----------
SDO Spatial 19.0.0.0.0 UPGRADED
XOQ Oracle OLAP API 19.0.0.0.0 UPGRADED
OLS Oracle Label Security 19.0.0.0.0 UPGRADED
DV Oracle Database Vault 19.0.0.0.0 UPGRADED
Utlrp script Output
@?/rdbms/admin/utlrp.sql
SQL> select comp_id,comp_name,version,status from dba_registry;
COMP_ID COMP_NAME VERSION STATUS
---------- -------------------------------------- ----------- ----------
CATALOG Oracle Database Catalog Views 19.0.0.0.0 VALID
CATPROC Oracle Database Packages and Types 19.0.0.0.0 VALID
JAVAVM JServer JAVA Virtual Machine 19.0.0.0.0 VALID
XML Oracle XDK 19.0.0.0.0 VALID
CATJAVA Oracle Database Java Packages 19.0.0.0.0 VALID
APS OLAP Analytic Workspace 19.0.0.0.0 VALID
RAC Oracle Real Application Clusters 19.0.0.0.0 VALID
XDB Oracle XML Database 19.0.0.0.0 VALID
OWM Oracle Workspace Manager 19.0.0.0.0 VALID
CONTEXT Oracle Text 19.0.0.0.0 VALID
ORDIM Oracle Multimedia 19.0.0.0.0 VALID
COMP_ID COMP_NAME VERSION STATUS
---------- -------------------------------------- ----------- ----------
SDO Spatial 19.0.0.0.0 VALID
XOQ Oracle OLAP API 19.0.0.0.0 VALID
OLS Oracle Label Security 19.0.0.0.0 VALID
DV Oracle Database Vault 19.0.0.0.0 VALID
e) Run the Post fixup script after the Oracle RAC database upgrade
SQL> @/u01/app/oracle/cfgtoollogs/DEVDB/preupgrade/postupgrade_fixups.sql
Preup Preupgrade
Action Issue Is
Number Preupgrade Check Name Remedied Further DBA Action
------ ------------------------ ---------- --------------------------------
6. old_time_zones_exist NO Manual fixup recommended.
7. post_dictionary YES None.
8. post_fixed_objects NO Informational only.
Further action is optional.
Note: - The above output is saying we also need to upgrade the TIMEZONE as well.
f) Upgrade the Timezone
SQL> SELECT version FROM v$timezone_file;
VERSION
----------
26
[oracle@lab1 admin]$ cd /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin
[oracle@lab1 admin]$
[oracle@lab1 admin]$ ls -ltr utltz_countstats.sql utltz_countstar.sql utltz_upg_check.sql utltz_upg_apply.sql
-rw-r--r-- 1 oracle oinstall 8317 Feb 25 2017 utltz_countstats.sql
-rw-r--r-- 1 oracle oinstall 7423 Feb 25 2017 utltz_countstar.sql
-rw-r--r-- 1 oracle oinstall 35322 Apr 15 11:36 utltz_upg_check.sql
-rw-r--r-- 1 oracle oinstall 21793 Apr 15 11:36 utltz_upg_apply.sql
Note: - Timezone upgrade will only work in when the database is in Statup upgrade mode. When you run below command it will fail with error.
SQL> @utltz_upg_check.sql
WARNING: This RAC database is not started in single instance mode.
WARNING: Set cluster_database = false and start as single instance
WARNING: BEFORE running utltz_upg_apply.sql!
WARNING: This is REQUIRED!
So first need to put the database im upgrade mode then perform the timezone upgrade. You can do it by follow below steps.
a) srvctl stop database -d DEVDB
b) sqlplus / as sysdba
c) startup nomount;
d) alter system set cluster_database=FALSE scope=spfile;
e) shut immediate;
f) startup upgrade;
g) cd /u01/app/oracle/product/19.0.0.0/dbhome_1/rdbms/admin
h) @utltz_upg_check.sql
After output
INFO: A newer RDBMS DST version than the one currently used is found.
INFO: Note that NO DST update was yet done.
INFO: Now run utltz_upg_apply.sql to do the actual RDBMS DST update.
INFO: Note that the utltz_upg_apply.sql script will
INFO: restart the database 2 times WITHOUT any confirmation or prompt.
Execute the Timezone upgrade script
@utltz_upg_apply.sql
INFO: Total failures during update of TSTZ data: 0 .
An upgrade window has been successfully ended.
INFO: Your new Server RDBMS DST version is DSTv44 .
INFO: The RDBMS DST update is successfully finished.
INFO: Make sure to exit this SQL*Plus session.
INFO: Do not use it for timezone related selects.
Session altered.
SQL> select version from v$timezone_file;
VERSION
----------
44
g) Execution of utlusts.sql script
Oracle Database Release 19 Post-Upgrade Status Tool 08-25-2025 03:03:5
Database Name: DEVDB
Component Current Full Elapsed Time
Name Status Version HH:MM:SS
Oracle Server VALID 19.27.0.0.0 00:20:50
JServer JAVA Virtual Machine VALID 19.27.0.0.0 00:01:48
Oracle XDK VALID 19.27.0.0.0 00:01:55
Oracle Database Java Packages VALID 19.27.0.0.0 00:00:31
OLAP Analytic Workspace VALID 19.27.0.0.0 00:00:13
Oracle Label Security VALID 19.27.0.0.0 00:00:13
Oracle Database Vault VALID 19.27.0.0.0 00:00:50
Oracle Text VALID 19.27.0.0.0 00:00:59
Oracle Workspace Manager VALID 19.27.0.0.0 00:00:41
Oracle Real Application Clusters VALID 19.27.0.0.0 00:00:00
Oracle XML Database VALID 19.27.0.0.0 00:01:30
Oracle Multimedia VALID 19.27.0.0.0 00:02:38
Spatial VALID 19.27.0.0.0 00:08:49
Oracle OLAP API VALID 19.27.0.0.0 00:00:22
Datapatch 00:00:41
Final Actions 00:00:48
Post Upgrade 00:00:00
Post Compile 00:07:44
Total Upgrade Time: 00:50:03
Database time zone version is 44. It meets current release needs.
h) Execution of catuppst.sql script
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATUPPST 2025-08-25 03:04:40
DBUA_TIMESTAMP CATUPPST FINISHED 2025-08-25 03:04:40
DBUA_TIMESTAMP CATUPPST NONE 2025-08-25 03:04:40
From this point, you can hand over the database to the application team for the sanity checks as we have completed our Oracle RAC database upgrade part, and if all looks good from the app team, then you can change the compatibility parameter from 12.2.0 to 19.0.0
Note: – Best practice is to change this parameter after 1 month so that database performance can be checked properly, because if you change this parameter, then DBA cannot downgrade the database to a lower version in case of any issues.
SQL> show parameter compatible;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 12.2.0
noncdb_compatible boolean FALSE
alter system set compatible='19.0.0' scope=spfile sid='*';
You can delete the restore point as well after the app team confirmation to avoid any storage issues.
col name for a20
col GUARANTEE_FLASHBACK_DATABASE for a10
col TIME for a60
set lines 190
select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point;
NAME GUARANTEE_ TIME
-------------------- ---------- ------------------------------------------------------------
PRE_UPGRADE YES 23-AUG-25 11.12.12.000000000 AM
DROP RESTORE POINT PRE_UPGRADE;
Note: – Manual Method has some drawbacks because all the steps you need manually throughout the process, but if you don't want to perform those manual steps, in that case you can go for Oracle RAC Database Upgrade through the DBUA method.
Conclusion
Finally, we have completed our Oracle RAC database upgrade from 12c to 19c using the Manual method.
Note: – If you want to practice this whole activity in your home lab, then you'll need a platform to perform the installation. To set that up, you first need to download and install Oracle VirtualBox, followed by the operating system, the Oracle binary software, and finally, create the database.
If you enjoyed the article, please leave a comment and share it with your friends. Also, let me know which Oracle and MySQL topics you'd like to see covered in future articles.