Back to Research & Articles
Latest Insights
Upgrade
July 4, 2026
31 min read
51 views

Upgrade Oracle 12c database to Oracle 19c on different hosts

Upgrade Oracle 12c database to Oracle 19c on different hosts.

Overview:
Upgrading an Oracle Database from 12c to 19c on a different host is a common approach adopted by organizations during hardware refreshes, data center migrations, operating system upgrades, cloud transformation projects, and infrastructure modernization initiatives. Unlike in-place upgrades, upgrading on a new host allows database administrators to build a clean Oracle 19c environment, perform extensive testing, minimize risks to the production system, and establish a reliable fallback strategy.

A manual Oracle database upgrade on a different host involves several stages, including provisioning the target server, installing Oracle 19c software, migrating database files, performing prerequisite checks, executing upgrade scripts, validating the upgraded database, and completing post-upgrade activities. Although the manual method offers greater flexibility and control over each phase of the upgrade process, it requires detailed planning, execution, and validation to ensure a successful migration.

In this blog, I will walk through the end-to-end process of manually upgrading an Oracle 12c database to Oracle 19c on a different host. The article covers environment preparation, backup requirements, Oracle 19c installation, database migration techniques, upgrade execution, post-upgrade validation, and best practices to help database administrators perform a smooth and reliable upgrade with minimal business disruption.

Key Activities Involved

1. Install Oracle 19c software on the new host.
2. Perform a full backup of the Oracle 12c database.
3. Execute Oracle pre-upgrade checks on 12c database.
4. Copy the backup, PFILE and password file from Oracle 12 to Oracle 19c hosts and restore the backup.
5. Upgrade the database using manual scripts.
6. Upgrade database components and timezone files.
7. Perform post-upgrade tasks.
8. Validate database functionality and application connectivity.


1. Install Oracle 19c software on the new host.

./runInstaller -responsefile /u01/app/oracle/product/19c/dbhome_1/install/response/ora19c_db_install.rsp -silent

oracle.install.responseFileVersion=/u01/app/oracle/install/rspfmt_dbinstall_response_schema_v19. 0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=dba
INVENTORY_LOCATION=/u01/app/oracle/oraInventory ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1/ ORACLE_BASE=/u01/app/oracle/product/dbhome_1oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=dba oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba oracle.install.db.rootconfig.executeRootScript=false
ORAHOST1- CORP-NONEC : ORADB > ./runInstaller - silent -responsefile /u01/app/oracle/product/19c/dbhome_1/install/response/db_install.rsp Launching Oracle Database Setup Wizard...
[WARNING] [INS-13014] Target environment does not meet some optional requirements. CAUSE: Some of the optional prerequisites are not met. See logs for details.
/u01/app/oracle/oracle/oraInventory/logs/InstallActions2026-03-12_05-00-26PM/installActions2026-03-12_05-00-26PM.log
ACTION: Identify the list of failed prerequisite checks from the log: /u01/app/oracle/oracle/oraInventory/logs/InstallActions2026-03-12_05-00-26PM/installActions2026-03-12_05-00-26PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually
The response file for this session can be found at:
/u01/app/oracle/oracle/product/dbhome_1/19.3.0.0/install/response/db_2026-03-12_05-00-26PM.rsp
You can find the log of this install session at: /u01/app/oracle/oraInventory/logs/InstallActions2026-03-12_05-00-26PM/installAction 2026-03-12_05-00-26.log
As a root user, execute the following script(s):
1. /u01/app/oracle/product/19c/dbhome_1/root.sh
Execute /u01/app/oracle/product/19c/dbhome_1/root.sh on the following nodes: CIK035249]
Successfully Setup Software with warning(s).

2. Perform a full backup of the Oracle 12c database.

2.1 Shut down the listener and take a full RMAN backup of the database using the following command:

$rman target /

RMAN> RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE disk;
ALLOCATE CHANNEL c2 DEVICE TYPE disk;
backup as compressed backupset full database tag ORADB_FULL format '/u02/db_backup/ORADBBKP/%d_%T_%s_%p_FULL.bkp’ ;
sql 'alter system switch logfile';
sql 'alter system archive log current';
backup tag ORADB_ARCHIVE format '/u02/backup/ORADBBKP/%d_%T_%s_%p_archive.bkp' archivelog all ;
backup tag ORADB_CONTROL current controlfile format '/u02/backup/ORADBBKP/%d_%T_%s_%p_control.bkp';
release channel c1;
release channel c2;
}

nohup rman target =/ cmdfile=/u02/backup/ORADBBKP/oradb_backup.rcv logfile=/u02/backup/ORADBBKP/oradb_backup.log &

3. Execute Oracle pre-upgrade checks on 12c database.

spool preupgrade.log

select name,open_mode,log_mode,database_role,force_logging from gv$database;
select count(*) from dba_objects where status='INVALID';
select owner,object_name,object_type from dba_objects where status='INVALID' order by 1;
select * from registry$history;
select COMP_ID,COMP_NAME,VERSION,STATUS from dba_registry ;
select patch_id,status,ACTION_TIME,description from dba_registry_sqlpatch;
select owner,object_type,status,count(status) from dba_objects group by owner,object_type,status order by owner;

spool off;

spool allinitparam.log
col NAME for a60
col DISPLAY_VALUE for a20
col DEFAULT_VALUE for a25
col ISDEFAULT for a30
col DESCRIPTION for a30
col VALUE for a40

select NAME,VALUE,DISPLAY_VALUE,DEFAULT_VALUE,ISDEFAULT,DESCRIPTION from v$parameter order by 1;

spool off;

3.1 Run the preupgrade.jar tool from the 12c database and resolve all issues listed under the recommended actions in the preupgrade.log file located in the preupgrade folder.

When 12c database upgrade to 19c on different hosts then:

3.1.1 Copy the Jar File from Target to Source Because the target 19c home is located on a different host, you must transfer the preupgrade.jar file across the network. Go to your target 19c host. Locate the file at $ORACLE_HOME/rdbms/admin/preupgrade.jar. Securely copy (scp) the jar file to a temporary staging directory on source 12c host:

scp /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/preupgrade.jar oracle@12c_hosts:/tmp/

3.1.2 Set Environment Variables on the Source host. Log into the source 12c host as the oracle user and set your environment variables to point explicitly to the 12c database.

export ORACLE_HOME=/u01/app/oracle/product/12c/dbhome_1
export ORACLE_SID=ORADB
export PATH=$ORACLE_HOME/bin:$PATH

3.1.3 Execute the Preupgrade Tool. Run the jar file using the 12c Java executable located within your 12c $ORACLE_HOME/jdk/bin directory. Provide a directory path (dir) where the generated fixup scripts and text logs should be saved:

/u01/app/oracle/product/12c/dbhome_1/jdk/bin/java -jar /tmp/preupgrade.jar dir /u02/backup/ORADBBKP

==================
PREUPGRADE SUMMARY
==================
/u02/backup/ORADBBKP/preupgrade.log
/u02/backup/ORADBBKP/preupgrade_fixups.sql
/u02/backup/ORADBBKP/postupgrade_fixups.sql

Execute fixup scripts as indicated below:

Before upgrade:

Log into the database and execute the preupgrade fixups
@/u02/backup/ORADBBKP/preupgrade_fixups.sql

After the upgrade:

Log into the database and execute the postupgrade fixups
@/u02/backup/ORADBBKP/postupgrade_fixups.sql

Preupgrade complete: 2026-03-12T22:10:12

################################################
If upgrading the database on the same server use below command. But for this blog its out of scope.
/u01/app/oracle/product/12c/dbhome_1/jdk/bin/java -jar /u01/app/oracle/product/19c/dbhome_1/rdbms/admin/preupgrade.jar FILE DIR /u02/backup/ORADBBKP/
################################################

3.1.4 Gather dictionary statistics for the database.
SQL> EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;

PL/SQL procedure successfully completed.

3.1.5 Purge the recycle bin to remove unused objects from the database.
SQL> PURGE DBA_RECYCLEBIN;

DBA Recyclebin purged.

3.1.6 Refresh all materialized views (MVs) in the database.

SQL>select count(1) from sys.sumdelta$;

COUNT(1)
---------
103

declare
list_failures integer(3) :=0;
begin
DBMS_MVIEW.REFRESH_ALL_MVIEWS(list_failures,'C','', TRUE, FALSE);
end;
/
PL/SQL procedure successfully completed.

SQL>select count(1) from sys.sumdelta$;

COUNT(1)
--------
0

3.1.7 Execute the preupgrade_fixups.sql script from the preupgrade directory.
SQL>@/u02/backup/ORADBBKP/preupgrade_fixups.sql;

Executing Oracle PRE-Upgrade Fixup Script

Auto-Generated by: Oracle Preupgrade Script
Version: 19.0.0.0.0 Build: 13
Generated on: 2026-03-12 22:19:58

For Source Database: ORADB
Source Database Version: 12.2.0.1.0
For Upgrade to Version: 19.0.0.0.0

Preup Preupgrade
Action Issue Is
Number Preupgrade Check Name Remedied Further DBA Action
------ ------------------------ ---------- --------------------------------
1. purge_recyclebin YES None.
2. pending_dst_session NO Manual fixup required.
3. invalid_objects_exist NO Manual fixup recommended.
4. uniaud_records_in_file NO Unexpected failure. Manual fixu
p required. FIXUP reports succe
ss, but a RECHECK indicated the
problem still exists.
5. streams_setup NO Manual fixup recommended.
6. hidden_params NO Informational only.
Further action is optional.
7. dictionary_stats YES None.
8. component_info NO Informational only.
Further action is optional.
9. parameter_deprecated NO Informational only.
Further action is optional.
10. min_archive_dest_size NO Informational only.
Further action is optional.
11. rman_recovery_version NO Informational only.
Further action is optional.
12. pre_disable_bct_upg NO Informational only.
Further action is optional.
13. invalid_ora_obj_info NO Informational only.
Further action is optional.
14. invalid_app_obj_info NO Informational only.
Further action is optional.

The fixup scripts have been run and resolved what they can. However,there are still issues originally identified by the preupgrade that have not been remedied and are still present in the database.Depending on the severity of the specific issue, and the nature of the issue itself, that could mean that your database is not ready for upgrade. To resolve the outstanding issues, start by reviewing the preupgrade_fixups.sql and searching it for the name of the failed CHECK NAME or Preupgrade Action Number listed above. There you will find the original corresponding diagnostic message from the preupgrade which explains in more detail what still needs to be done.

PL/SQL procedure successfully completed.

3.2 Ensure the database is running in ARCHIVELOG mode.

SQL> select name,open_mode,log_mode from v$database;

NAME OPEN_MODE LOG_MODE

--------- ----------------------
ORADB READWRITE ARCHIVELOG

3.3 Take the backup of file from spfile.

Create a PFILE and shut down the database.
SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ——————————--------------—————
spfile string /u01/app//oracle/product/12c/dbhome_1/dbs/spfileORADB.ora

SQL> create pfile='/u02/backup/ORADBBKP/pfile_ORADB.ora' from spfile;

File created.

SQL> alter system switch logfile ;

System altered.

SQL> /
System altered.

SQL> /
System altered.

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

4. Copy the backup, PFILE and password file from Oracle 12 to Oracle 19c hosts and restore the backup.

scp /path/to/source/file.txt remote_user@destination_ip:/path/to/destination/dir/
scp /u01/app//oracle/product/12c/dbhome_1/dbs/orapwORADB oracle@dest_host:/u01/app/oracle/product/19c/dbhome_1/dbs/orapwORADB
scp /u01/app//oracle/product/12c/dbhome_1/dbs/initORADB.ora oracle@dest_host:/u01/app/oracle/product/19c/dbhome_1/dbs/initORADB.ora
scp /u02/db_backup/ORADBBKP/*.* oracle@dest_host@:/migration/RMAN_BACKUP

on the target host create ORADB_UPGRADE folder
cd /migration/RMAN_BACKUP
mkdir ORADB_UPGRADE
scp -r /u02/backup/ORADBBKP/*.* oracle@19c_host:/migration/RMAN_BACKUP/ORADB_UPGRADE

4.1 Set the environment variable and start the database in upgrade mode.
export ORACLE_SID=ORADB
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1

SQL> startup nomount;

rman target /

RMAN> restore controlfile from '/migration/RMAN_BACKUP/control.bkp';
RMAN> alter database mount;
RMAN> catalog start with '/migration/RMAN_BACKUP';

Restore & Recover in the target:

4.2 Backup restore script:
nohup rman target / cmdfile=/migration/RMAN_BACKUP/restore_backup.rcv log=/migration/RMAN_BACKUP/restore_backup.log &

RMAN> run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
restore database;
recover database;
release channel c1;
release channel c2;
}

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

SQL>

5. Upgrade the database using manual scripts.

SQL> startup upgrade;
ORACLE instance started.

Total System Global Area 7516134056 bytes
Fixed Size 9116328 bytes
Variable Size 1677721600 bytes
Database Buffers 5804916736 bytes
Redo Buffers 24379392 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
Process ID: 52691360
Session ID: 1444 Serial number: 12021


SQL> startup upgrade;
ORACLE instance started.

Total System Global Area 7516134056 bytes
Fixed Size 9116328 bytes
Variable Size 1677721600 bytes
Database Buffers 5804916736 bytes
Redo Buffers 24379392 bytes
Database mounted.
Database opened.

SQL> select name,open_mode,cdb,version,status from v$database,v$instance;

NAME OPEN_MODE CDB VERSION STATUS
--------- -------------------- --- ----------------- ------------
ORADB READ WRITE NO 19.0.0.0.0 OPEN MIGRATE

SQL> show parameter pfile

NAME TYPE VALUE
----------------------------------- ----------- ———————————————
spfile string /u01/app/oracle/product/19c/dbhome_1/dbs/spfileORADB.ora

5.1 Run the DBUpgrade utility to upgrade the database to Oracle 19c.

cd /u01/app/oracle/product/19c/dbhome_1/rdbms/admin


nohup /u01/app/oracle/product/19c/dbhome_1/perl/bin/perl catctl.pl -l /u02/backup/ORADBBKP/upgrade -n 4 catupgrd.sql &

tail -100f nohup.out

Argument list for [catctl.pl]
For Oracle internal use only A = 0
Run in c = 0
Do not run in C = 0
Input Directory d = 0
Echo OFF e = 1
Simulate E = 0
Forced cleanup F = 0
Log Id i = 0
Child Process I = 0
Log Dir l = /u02/backup/ORADBBKP/upgrade
Priority List Name L = 0
Upgrade Mode active M = 0
SQL Process Count n = 4
SQL PDB Process Count N = 0
Open Mode Normal o = 0
Start Phase p = 0
End Phase P = 0
Reverse Order r = 0
AutoUpgrade Resume R = 0
Script s = 0
Serial Run S = 0
RO User Tablespaces T = 0
Display Phases y = 0
Debug catcon.pm z = 0
Debug catctl.pl Z = 0

catctl.pl VERSION: [19.0.0.0.0]
STATUS: [Production]

/u01/app/oracle/product/19c/dbhome_1/rdbms/admin/orahome = [/u01/app/oracle/product/19c/dbhome_1]
/u01/app/oracle/product/19c/dbhome_1/bin/orabasehome = [/u01/app/oracle/product/19c/dbhome_1]
catctlGetOraBaseLogDir = [/u01/app/oracle/product/19c/dbhome_1]

Analyzing file /u01/app/oracle/product/19c/dbhome_1/rdbms/admin/catupgrd.sql

Log file directory = [/u02/backup/ORADBBKP/upgrade]

catcon::set_log_file_base_path: ALL catcon-related output will be written to [/u02/backup/ORADBBKP/upgrade/catupgrd_catcon_34668872.lst]

catcon::set_log_file_base_path: catcon: See [/u02/backup/ORADBBKP/upgrade/catupgrd*.log] files for output generated by scripts

catcon::set_log_file_base_path: catcon: See [/u02/backup/ORADBBKP/upgrade/catupgrd_*.lst] files for spool files, if any

Number of Cpus = 8
Database Name = ORADB
DataBase Version = 12.2.0.1.0
Parallel SQL Process Count = 4
Components in [ORADB]
Installed [APS CATALOG CATJAVA CATPROC CONTEXT JAVAVM OLS ORDIM OWM SDO XDB XML XOQ]
Not Installed [APEX DV EM MGW ODM RAC WK]
DataBase Version = 12.2.0.1.0

------------------------------------------------------
Phases [0-107] Start Time:[2026-03-12 22:44:53]
------------------------------------------------------
*********** Executing Change Scripts ***********
Serial Phase #:0 [ORADB] Files:1 Time: 24s
*************** Catalog Core SQL ***************
Serial Phase #:1 [ORADB] Files:5 Time: 52s
Restart Phase #:2 [ORADB] Files:1 Time: 1s
*********** Catalog Tables and Views ***********
Parallel Phase #:3 [ORADB] Files:19 Time: 19s
Restart Phase #:4 [ORADB] Files:1 Time: 1s
************* Catalog Final Scripts ************
Serial Phase #:5 [ORADB] Files:7 Time: 15s
***************** Catproc Start ****************
Serial Phase #:6 [ORADB] Files:1 Time: 8s
***************** Catproc Types ****************
Serial Phase #:7 [ORADB] Files:2 Time: 10s
Restart Phase #:8 [ORADB] Files:1 Time: 0s
**************** Catproc Tables ****************
Parallel Phase #:9 [ORADB] Files:72 Time: 15s
Restart Phase #:10 [ORADB] Files:1 Time: 1s
************* Catproc Package Specs ************
Serial Phase #:11 [ORADB] Files:1 Time: 60s
Restart Phase #:12 [ORADB] Files:1 Time: 1s
************** Catproc Procedures **************
Parallel Phase #:13 [ORADB] Files:95 Time: 3s
Restart Phase #:14 [ORADB] Files:1 Time: 1s
Parallel Phase #:15 [ORADB] Files:122 Time: 7s
Restart Phase #:16 [ORADB] Files:1 Time: 0s
Serial Phase #:17 [ORADB] Files:30 Time: 4s
Restart Phase #:18 [ORADB] Files:1 Time: 0s
***************** Catproc Views ****************
Parallel Phase #:19 [ORADB] Files:31 Time: 11s
Restart Phase #:20 [ORADB] Files:1 Time: 0s
Serial Phase #:21 [ORADB] Files:3 Time: 9s
Restart Phase #:22 [ORADB] Files:1 Time: 0s
Parallel Phase #:23 [ORADB] Files:25 Time: 117s
Restart Phase #:24 [ORADB] Files:1 Time: 0s
Parallel Phase #:25 [ORADB] Files:12 Time: 75s
Restart Phase #:26 [ORADB] Files:1 Time: 1s
Serial Phase #:27 [ORADB] Files:1 Time: 0s
Serial Phase #:28 [ORADB] Files:8 Time: 2s
Serial Phase #:29 [ORADB] Files:1 Time: 0s
Restart Phase #:30 [ORADB] Files:1 Time: 0s
*************** Catproc CDB Views **************
Serial Phase #:31 [ORADB] Files:1 Time: 1s
Restart Phase #:32 [ORADB] Files:1 Time: 0s
Serial Phase #:34 [ORADB] Files:1 Time: 0s
***************** Catproc PLBs *****************
Serial Phase #:35 [ORADB] Files:300 Time: 16s
Serial Phase #:36 [ORADB] Files:1 Time: 0s
Restart Phase #:37 [ORADB] Files:1 Time: 0s
Serial Phase #:38 [ORADB] Files:11 Time: 3s
Restart Phase #:39 [ORADB] Files:1 Time: 0s
*************** Catproc DataPump ***************
Serial Phase #:40 [ORADB] Files:3 Time: 35s
Restart Phase #:41 [ORADB] Files:1 Time: 0s
****************** Catproc SQL *****************
Parallel Phase #:42 [ORADB] Files:13 Time: 74s
Restart Phase #:43 [ORADB] Files:1 Time: 0s
Parallel Phase #:44 [ORADB] Files:11 Time: 6s
Restart Phase #:45 [ORADB] Files:1 Time: 0s
Parallel Phase #:46 [ORADB] Files:3 Time: 1s
Restart Phase #:47 [ORADB] Files:1 Time: 0s
************* Final Catproc scripts ************
Serial Phase #:48 [ORADB] Files:1 Time: 10s
Restart Phase #:49 [ORADB] Files:1 Time: 0s
************** Final RDBMS scripts *************
Serial Phase #:50 [ORADB] Files:1 Time: 16s
************ Upgrade Component Start ***********
Serial Phase #:51 [ORADB] Files:1 Time: 1s
Restart Phase #:52 [ORADB] Files:1 Time: 0s
********** Upgrading Java and non-Java *********
Serial Phase #:53 [ORADB] Files:2 Time: 242s
***************** Upgrading XDB ****************
Restart Phase #:54 [ORADB] Files:1 Time: 0s
Serial Phase #:56 [ORADB] Files:3 Time: 8s
Serial Phase #:57 [ORADB] Files:3 Time: 2s
Parallel Phase #:58 [ORADB] Files:10 Time: 1s
Parallel Phase #:59 [ORADB] Files:25 Time: 3s
Serial Phase #:60 [ORADB] Files:4 Time: 6s
Serial Phase #:61 [ORADB] Files:1 Time: 0s
Serial Phase #:62 [ORADB] Files:32 Time: 3s
Serial Phase #:63 [ORADB] Files:1 Time: 0s
Parallel Phase #:64 [ORADB] Files:6 Time: 5s
Serial Phase #:65 [ORADB] Files:2 Time: 14s
Serial Phase #:66 [ORADB] Files:3 Time: 22s
**************** Upgrading ORDIM ***************
Restart Phase #:67 [ORADB] Files:1 Time: 0s
Serial Phase #:69 [ORADB] Files:1 Time: 1s
Parallel Phase #:70 [ORADB] Files:2 Time: 53s
Restart Phase #:71 [ORADB] Files:1 Time: 1s
Parallel Phase #:72 [ORADB] Files:2 Time: 0s
Serial Phase #:73 [ORADB] Files:2 Time: 1s
***************** Upgrading SDO ****************
Restart Phase #:74 [ORADB] Files:1 Time: 0s
Serial Phase #:76 [ORADB] Files:1 Time: 29s
Serial Phase #:77 [ORADB] Files:2 Time: 2s
Restart Phase #:78 [ORADB] Files:1 Time: 0s
Serial Phase #:79 [ORADB] Files:1 Time: 40s
Restart Phase #:80 [ORADB] Files:1 Time: 0s
Parallel Phase #:81 [ORADB] Files:3 Time: 35s
Restart Phase #:82 [ORADB] Files:1 Time: 0s
Serial Phase #:83 [ORADB] Files:1 Time: 5s
Restart Phase #:84 [ORADB] Files:1 Time: 0s
Serial Phase #:85 [ORADB] Files:1 Time: 9s
Restart Phase #:86 [ORADB] Files:1 Time: 0s
Parallel Phase #:87 [ORADB] Files:4 Time: 66s
Restart Phase #:88 [ORADB] Files:1 Time: 0s
Serial Phase #:89 [ORADB] Files:1 Time: 1s
Restart Phase #:90 [ORADB] Files:1 Time: 0s
Serial Phase #:91 [ORADB] Files:2 Time: 15s
Restart Phase #:92 [ORADB] Files:1 Time: 0s
Serial Phase #:93 [ORADB] Files:1 Time: 1s
Restart Phase #:94 [ORADB] Files:1 Time: 0s
******* Upgrading ODM, WK, EXF, RUL, XOQ *******
Serial Phase #:95 [ORADB] Files:1 Time: 12s
Restart Phase #:96 [ORADB] Files:1 Time: 0s
*********** Final Component scripts ***********
Serial Phase #:97 [ORADB] Files:1 Time: 1s
************* Final Upgrade scripts ************
Serial Phase #:98 [ORADB] Files:1 Time: 80s
******************* Migration ******************
Serial Phase #:99 [ORADB] Files:1 Time: 6s
*** End PDB Application Upgrade Pre-Shutdown ***
Serial Phase #:100 [ORADB] Files:1 Time: 0s
Serial Phase #:101 [ORADB] Files:1 Time: 0s
Serial Phase #:102 [ORADB] Files:1 Time: 32s
***************** Post Upgrade *****************
Serial Phase #:103 [ORADB] Files:1 Time: 2s
**************** Summary report ****************
Serial Phase #:104 [ORADB] Files:1 Time: 1s
*** End PDB Application Upgrade Post-Shutdown **
Serial Phase #:105 [ORADB] Files:1 Time: 0s
Serial Phase #:106 [ORADB] Files:1 Time: 0s
Serial Phase #:107 [ORADB] Files:1 Time: 15s

------------------------------------------------------
Phases [0-107] End Time:[2026-03-12 23:06:47]
------------------------------------------------------

Grand Total Time: 1315s

LOG FILES: (/u02/backup/ORADBBKP/upgrade/catupgrd*.log)

Upgrade Summary Report Located in:
/u02/backup/ORADBBKP/upgrade/upg_summary.log

Grand Total Upgrade Time: [0d:0h:22m:55s]

5.2 Verify that the upgrade completed successfully and start the database using the Oracle 19c environ

sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 26 23:08:12 2026
Version 19.3.0.0.0

SQL> startup
ORACLE instance started.

Total System Global Area 6442389152 bytes
Fixed Size 9113248 bytes
Variable Size 2046820352 bytes
Database Buffers 4378853376 bytes
Redo Buffers 7602176 bytes
Database mounted.
Database opened.

SQL>

SQL> select name,open_mode,cdb,version,status from v$database,v$instance;

NAME OPEN_MODE CDB VERSION STATUS
--------- -------------------- --- ----------------- ------------
ORADB READ WRITE NO 19.0.0.0.0 OPEN

SQL> col COMP_ID for a10
col COMP_NAME for a40
col VERSION for a15
set lines 180
set pages 999
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 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 OPTION OFF
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
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

14 rows selected.

5.3 Execute the utlrp.sql script to recompile invalid database objects

SQL> select count(*) from dba_objects where status='INVALID';

COUNT(*)
--------
1569

SQL> select count(*) from dba_objects where status='INVALID' and owner in ('SYS','SYSTEM');

COUNT(*)
--------
989

SQL>@/u01/app/oracle/product/19c/dbhome_1/rdbms/admin/utlrp.sql;

Session altered.

TIMESTAMP
------------------------------ --------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN 2026-03-12 23:15:51
DOC> ThefollowingPL/SQLblockinvokesUTL_RECOMPtorecompileinvalid
DOC> objectsinthedatabase.Recompilationtimeisproportionaltothe
DOC> numberofinvalidobjectsinthedatabase,sothiscommandmaytake
DOC> alongtimetoexecuteonadatabasewithalargenumberofinvalid
DOC> objects.
DOC>
DOC> Usethefollowingqueriestotrackrecompilationprogress:
DOC>
DOC>1.Queryreturningthenumberofinvalidobjectsremaining.This
DOC> number should decrease with time.
DOC> SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC> 2.Queryreturningthenumberofobjectscompiledsofar.Thisnumber
DOC> should increase with time.
DOC> SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
DOC> Thisscriptautomaticallychoosesserialorparallelrecompilation
DOC> basedonthenumberofCPUsavailable(parametercpu_count)multiplied
DOC> bythenumberofthreadsperCPU(parameterparallel_threads_per_cpu).
DOC> OnRAC,thisnumberisaddedacrossallRACnodes.
DOC> UTL_RECOMPusesDBMS_SCHEDULERtocreatejobsforparallel
DOC> recompilation.Jobsarecreatedwithoutinstanceaffinitysothatthey
DOC> canmigrateacrossRACnodes.Usethefollowingqueriestoverify
DOC> whetherUTL_RECOMPjobsarebeingcreatedandruncorrectly:
DOC> 1.QueryshowingjobscreatedbyUTL_RECOMP
DOC> SELECT job_name FROM dba_scheduler_jobs
DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC> 2.QueryshowingUTL_RECOMPjobsthatarerunning
DOC> SELECT job_name FROM dba_scheduler_running_jobs
DOC> WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#
PL/SQL procedure successfully completed.

TIMESTAMP
----------------------------------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END 2026-03-12 23:18:1

DOC> The following query reports the number of invalid objects.
DOC>
DOC> If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they DOC> point to system misconfiguration or resource constraints that must be DOC> fixed before attempting to recompile these objects.
DOC>#

OBJECTS WITH ERRORS
-------------------
10

DOC> The following query reports the number of exceptions caught during DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC> Note: Typical compilation errors (due to coding errors) are not
DOC> DOC>#
logged into this table: they go into DBA_ERRORS instead.

ERRORS DURING RECOMPILATION ---------------------------

3 Function created.
PL/SQL procedure successfully completed.
Function dropped.
PL/SQL procedure successfully completed.

SQL> select count(*) from dba_objects where status='INVALID';

COUNT(*)
--------
10

SQL> select count(*) from dba_objects where status='INVALID' and owner in ('SYS','SYSTEM');

COUNT(*)
--------
0

5.4 Execute the postupgrade_fixups.sql script to complete post-upgrade tasks and resolve remaining issues.

SQL>@/u02/backup/ORADBBKP/postupgrade_fixups.sql;

Session altered

PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.

Package created.
No errors.
Package body created.

PL/SQL procedure successfully completed. No errors.
Package created.
No errors.

Package body created.
No errors.
Executing Oracle POST-Upgrade Fixup Script
Auto-Generated by: Oracle Preupgrade Script Version: 19.0.0.0.0 Build: 1
Generated on: 2026-03-12 23:22:03
For Source Database: ORADB Source Database Version: 12.2.0.1.0 For Upgrade to Version: 19.0.0.0.0

Preup Preupgrade
Action Issue Is
Number Preupgrade Check Name
------ ------------------------ ---------- --------------------------------
8. old_time_zones_exist NO Manual fixup recommended. 9. dir_symlinks YES None.
Remedied

Further DBA Action
10. post_dictionary YES None.
11. post_fixed_objects NO Informational only.
Further action is optional.
The fixup scripts have been run and resolved what they can. However, there are still issues originally identified by the preupgrade that have not been remedied and are still present in the database. Depending on the severity of the specific issue, and the nature of the issue itself, that could mean that your database upgrade is not fully complete. To resolve the outstanding issues, start by reviewing the postupgrade_fixups.sql and searching it for the name of the failed CHECK NAME or Preupgrade Action Number listed above. There you will find the original corresponding diagnostic message from the preupgrade which explains in more detail what still needs to be done.
PL/SQL procedure successfully completed. Session altered.

6. Upgrade database components and timezone files.


SQL> @$ORACLE_HOME/rdbms/admin/utltz_upg_check.sql;


Session altered.

INFO: Starting with RDBMS DST update preparation.
INFO: NO actual RDBMS DST update will be done by this script.
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: Doing checks for known issues ...
INFO: Database version is 19.0.0.0 .
INFO: Database RDBMS DST version is DSTv26 .
INFO: No known issues detected.
INFO: Now detecting new RDBMS DST version.
A prepare window has been successfully started.
INFO: Newest RDBMS DST version detected is DSTv32 .
INFO: Next is checking all TSTZ data.
INFO: It might take a while before any further output is seen ...
A prepare window has been successfully ended.
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.

Session altered.

6.1 Check the Timezone of the database
SQL> SELECT version FROM v$timezone_file;

VERSION
--------
26

1 row selected.

SQL> @$ORACLE_HOME/rdbms/admin/utltz_upg_apply.sql;

Session altered.

INFO: If an ERROR occurs, the script will EXIT SQL*Plus.
INFO: The database RDBMS DST version will be updated to DSTv32 . WARNING: This script will restart the database 2 times
WARNING: WITHOUT asking ANY confirmation.
WARNING: Hit control-c NOW if this is not intended.
INFO: Restarting the database in UPGRADE mode to start the DST upgrade.

Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.

Total System Global Area 9663673928 bytes
12445256 bytes 5804916736 bytes

Fixed Size
Variable Size
Database Buffers
Redo Buffers
Database mounted.
Database opened.
INFO: Starting the RDBMS DST upgrade.
INFO: Upgrading all SYS owned TSTZ data.
INFO: It might take time before any further output is seen ...
An upgrade window has been successfully started.
INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data. Database closed.
Database dismounted.
ORACLE instance shut down.

ORACLE instance started.

Total System Global Area 9663673928 bytes
Fixed Size
Variable Size Database Buffers Redo Buffers Database mounted.
3758096384 bytes 88215552 bytes
12445256 bytes 5804916736 bytes
3758096384 bytes 88215552 bytes

Database opened.
INFO: Upgrading all non-SYS TSTZ data.
INFO: It might take time before any further output is seen ...
INFO: Do NOT start any application yet that uses TSTZ data!
INFO: Next is a list of all upgraded tables:
Table list: "APP_SCHEMA"."AQ$_LOG_QUEUE_TABLE_A" Number of failures: 0
Table list: "APP_SCHEMA"."AQ$_LOG_QUEUE_TABLE_D" Number of failures: 0
INFO: Total failures during update of TSTZ data: 0 .
An upgrade window has been successfully ended.
INFO: Your new Server RDBMS DST version is DSTv32 .
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
--------
32

1 row selected.

7. Perform post-upgrade tasks.

7.1 Execute the utlusts.sql script to gather and report database statistics.

SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql TEXT

Oracle Database Release 19 Post-Upgrade Status Tool 03-12-2026 23:30:5 Database Name: ORADB

Component Current Full Elapsed Time
Name Status Version HH:MM:SS

Oracle Server VALID 19.30.0.0.0 00:09:58
JServer JAVA Virtual Machine VALID 19.30.0.0.0 00:01:10
Oracle XDK VALID 19.30.0.0.0 00:01:06
Oracle Database Java Packages VALID 19.30.0.0.0 00:00:13
OLAP Analytic Workspace VALID 19.30.0.0.0 00:00:11
Oracle Label Security VALID 19.30.0.0.0 00:00:07
Oracle Text VALID 19.30.0.0.0 00:00:31
Oracle Workspace Manager VALID 19.30.0.0.0 00:00:40
Oracle Real Application Clusters OPTION OFF 19.30.0.0.0 00:00:00
Oracle XML Database VALID 19.30.0.0.0 00:01:02
Oracle Multimedia VALID 19.30.0.0.0 00:00:55
Spatial VALID 19.30.0.0.0 00:03:21
Oracle OLAP API VALID 19.30.0.0.0 00:00:11
Datapatch 00:01:16
Final Actions 00:01:25
Post Upgrade 00:00:00
Post Compile 00:01:57

Total Upgrade Time: 00:23:00

Database time zone version is 44. It meets current release needs.

7.2 Execute the catuppst.sql script to complete post-upgrade catalog processing tasks.

SQL> @$ORACLE_HOME/rdbms/admin/catuppst.sql

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP DBRESTART 2026-03-12 23:39:48
DBUA_TIMESTAMP DBRESTART FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP DBRESTART NONE 2026-03-12 23:39:48

TIMESTAMP
--------------------------------------------------------------------------------
DBUA_TIMESTAMP CATUPPST STARTED 2026-03-12 23:39:48

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP POSTUP_BGN 2026-03-12 23:39:48
DBUA_TIMESTAMP POSTUP_BGN FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP POSTUP_BGN NONE 2026-03-12 23:39:48

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATREQ_BGN 2026-03-12 23:39:48
DBUA_TIMESTAMP CATREQ_BGN FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP CATREQ_BGN NONE 2026-03-12 23:39:48

sPrvVersion = 12.2.0.1.0 nPrevMajorVer = 12
sRetFunc = ?/rdbms/admin/catupshd.sql
catrequtlmg: utlmmig.sql (bootstrap objects migration) not called
catrequtlmg: Gathering statistics not required returning

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATREQ_END 2026-03-12 23:39:48
DBUA_TIMESTAMP CATREQ_END FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP CATREQ_END NONE 2026-03-12 23:39:48

catuppst: Dropping library DBMS_DDL_INTERNAL_LIB
catuppst: Dropping view _CURRENT_EDITION_OBJ_MIG
catuppst: Dropping view _CURRENT_EDITION_STUB_MIG
catuppst: Dropping view _ACTUAL_EDITION_OBJ_MIG
catuppst: Dropping view DBA_PART_KEY_COLUMNS_V$_MIG
catuppst: Dropping view DBA_SUBPART_KEY_COLUMNS_V$_MIG
catuppst: Dropping table OBJ$MIG
catuppst: Dropping table USER$MIG
catuppst: Dropping table COL$MIG
catuppst: Dropping table CLU$MIG
catuppst: Dropping table CON$MIG
catuppst: Dropping table BOOTSTRAP$MIG
catuppst: Dropping table TAB$MIG
catuppst: Dropping table TS$MIG
catuppst: Dropping table IND$MIG
catuppst: Dropping table ICOL$MIG
catuppst: Dropping table LOB$MIG
catuppst: Dropping table COLTYPE$MIG
catuppst: Dropping table SUBCOLTYPE$MIG
catuppst: Dropping table NTAB$MIG
catuppst: Dropping table REFCON$MIG
catuppst: Dropping table OPQTYPE$MIG
catuppst: Dropping table ICOLDEP$MIG
catuppst: Dropping table VIEWTRCOL$MIG
catuppst: Dropping table ATTRCOL$MIG
catuppst: Dropping table TYPE_MISC$MIG
catuppst: Dropping table LIBRARY$MIG
catuppst: Dropping table ASSEMBLY$MIG
catuppst: Dropping table TSQ$MIG
catuppst: Dropping table FET$MIG

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP POSTUP_END 2026-03-12 23:39:48
DBUA_TIMESTAMP POSTUP_END FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP POSTUP_END NONE 2026-03-12 23:39:48

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATUPPST 2026-03-12 23:39:48
DBUA_TIMESTAMP CATUPPST FINISHED 2026-03-12 23:39:48
DBUA_TIMESTAMP CATUPPST NONE 2026-03-12 23:39:48

7.3 Execute the postupgrade_fixups.sql.

sqlplus / as sysdba

SQL> @postupgrade_fixups.sql;

Session altered.


Session altered.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


Package created.

No errors.

Package body created.


PL/SQL procedure successfully completed.

No errors.


Package created.

No errors.

Package body created.

No errors.
Executing Oracle POST-Upgrade Fixup Script

Auto-Generated by: Oracle Preupgrade Script
Version: 19.0.0.0.0 Build: 13
Generated on: 2026-03-12 23:45:05

For Source Database: ORADB
Source Database Version: 12.2.0.1.0
For Upgrade to Version: 19.0.0.0.0

Preup Preupgrade
Action Issue Is
Number Preupgrade Check Name Remedied Further DBA Action
------ ------------------------ ---------- --------------------------------
15. depend_usr_tables YES None.
16. old_time_zones_exist YES None.
17. dir_symlinks YES None.
18. post_disable_bct_upg NO Manual fixup recommended.
19. post_dictionary YES None.
20. post_fixed_objects NO Informational only.
Further action is optional.

The fixup scripts have been run and resolved what they can. However,
there are still issues originally identified by the preupgrade that
have not been remedied and are still present in the database.
Depending on the severity of the specific issue, and the nature of
the issue itself, that could mean that your database upgrade is not
fully complete. To resolve the outstanding issues, start by reviewing
the postupgrade_fixups.sql and searching it for the name of
the failed CHECK NAME or Preupgrade Action Number listed above.
There you will find the original corresponding diagnostic message
from the preupgrade which explains in more detail what still needs
to be done.

PL/SQL procedure successfully completed.


7.3 Reverify the count of invalid database objects to ensure all have been successfully recompiled.


SQL> select count(*) from dba_objects where status='INVALID';

COUNT(*)
--------
10

7.4 Set the COMPATIBLE parameter value to 19.0.0 after completing the upgrade.
Note:
Warning: Changing the COMPATIBLE parameter to 19.0.0 makes it impossible to downgrade the database back to 12.2.0.1 using standard methods; the only fallback option would be a full export/import. It is recommended to retain the existing COMPATIBLE value for some time after the Oracle 19c upgrade to validate database stability and performance, allowing a quick downgrade if required. Once the COMPATIBLE parameter is updated, restore points become unusable, as Flashback Database cannot revert across a compatibility change.

SQL> show parameter COMPATIBLE

NAME TYPE VALUE
----------------------------------- ----------- ------------------------------
compatible string 12.2.0 noncdb_compatible boolean FALSE
SQL> ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE;
System altered.

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

SQL> startup;
ORACLE instance started.

Total System Global Area 1560277408 bytes
Fixed Size
Variable Size
Database Buffers
Redo Buffers
Database mounted.
Database opened.

SQL> show parameter COMPATIBLE

NAME TYPE VALUE
------------------------------------ ----------- -----------------
compatible string 19.0.0 <---- noncdb_compatible boolean FALSE

5.9 Verify the DBA_REGISTRY view to ensure all database components are valid after the upgrade.
SQL> col COMP_ID for a10
col COMP_NAME for a40
col VERSION for a15
set lines 180
set pages 999

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 catalog views 19.0.0.0.0 VALID
JAVAVM Server 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 OPTION OFF
OWM Oracle Workspace Manager 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
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

15 rows selected.

8. Validate database functionality and application connectivity.

8.1 Copy Listener.ora, tnsnames.ora and silent.ora fromm source 12 database to target Oracle 19c hosts.
scp /u01/app//oracle/product/12c/dbhome_1/rdbms/admin/listener.ora oracle@dest_host:/u01/app/oracle/product/19c/dbhome_1/network/admin
scp /u01/app//oracle/product/12c/dbhome_1/rdbms/admin/tnsnames.ora oracle@dest_host:/u01/app/oracle/product/19c/dbhome_1/network/admin
scp /u01/app//oracle/product/12c/dbhome_1/rdbms/admin/sqlnet.ora oracle@dest_host:/u01/app/oracle/product/19c/dbhome_1/network/admin

Update the new Oracle 19c ORACLE_HOME in listener.ora.

8.2 Modify the oratab file to reflect the Oracle 19c home.

$ cat /etc/oratab

ORADB:/u01/app/oracle/product/19c/dbhome_1:N

8.3 Take a final full backup of the database after the upgrade.

Community Discussion

Post a thought as Guest
Be the first to share your thoughts on this technical deep dive.

Read Next

More articles you might find interesting