Mir Sayeed Hassan – Oracle Blog

Oracle DBA – Tips & Techniques | Learn with real-time examples

Oracle 19c Upgrade from 12c with Migration Planning and Execution in Real-time

Posted by Mir Sayeed Hassan on April 5th, 2026

Oracle 19c Upgrade from 12c with Migration Planning and Execution in Real-time.

Overview 

Upgrading from Oracle Database 12c to 19c is essential for improved performance, security, and long-term support. Oracle 19c, as the long-term release, provides enhanced stability, better resource management, and advanced optimization features.

This overview covers the key stages of the Oracle 12c to 19c upgrade, including migration planning, pre-upgrade checks, upgrade execution and post-upgrade validation. It also highlights best practices such as minimizing downtime, ensuring data integrity, and performing performance tuning after the upgrade.

A well-planned upgrade approach helps DBAs execute a smooth, efficient transition to Oracle 19c while reducing risks and ensuring system reliability.

Step 1:  Compatibility check for before upgrading oracle database.

Step 2: Prepare the Environment.

Source

Hostname: MIRHOST1
DB Name: MIRDB
DB Version: 12.2.0.1.0

Target 

Hostname: MIRHOST1
DB Name: MIRDB
DB Version: 19.3.0.0.0

PRE-UPGRADE TASK 

Step 3: Install Oracle 19c software on the target server.

./runInstaller -silent -responsefile /u01/app/oracle/product/dbhome_1/19.3.0.0/install/response/db_install.rsp 

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/dbhome_1/19.3.0.0/ 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 
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/base19c/19.3.0.0/> ./runInstaller - silent -responsefile /u01/app/oracle/product/dbhome_1/19.3.0.0/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-02-23_05-00-26PM/installActions2026-02- 23_05-00-26PM.log 
ACTION: Identify the list of failed prerequisite checks from the log: /u01/app/oracle/oracle/oraInventory/logs/InstallActions2026-02-23_05-00-26PM/installActions2026-02- 23_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-04-03_03-00-16PM.rsp 
You can find the log of this install session at: /u01/app/oracle/oraInventory/logs/InstallActions2026-02-23_05-00-26PM/installAction 2026-04-03_03-00-16.log 
As a root user, execute the following script(s):
1. /u01/app/oracle/product/dbhome_1/19.3.0.0/root.sh 
Execute /u01/app/oracle/product/dbhome_1/19.3.0.0/root.sh on the following nodes: CIK035249]
Successfully Setup Software with warning(s). 

Step 4: 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; 
ALLOCATE CHANNEL c3 DEVICE TYPE disk; 
ALLOCATE CHANNEL c4 DEVICE TYPE disk; 
backup AS COMPRESSED BACKUPSET full database tag MIRDB_FULL format ‘/u02/backup/MIRDBFBKP/%d_%T_%s_%p_FULL.bkp’ ; 
sql 'alter system switch logfile'; 
sql 'alter system switch logfile'; 
sql 'alter system archive log current'; 
backup tag MIRDB_ARCHIVE format '/u02/backup/MIRDBFBKP/%d_%T_%s_%p_archive.bkp' archivelog all ; 
backup tag MIRDB_CONTROL current controlfile format '/u02/backup/MIRDBFBKP/%d_%T_%s_%p_control.bkp'; 
release channel c1; 
release channel c2; 
release channel c3;
release channel c4; 
} 
nohup rman target =/ cmdfile=rman2.cmd & 

Step 5 : Take the details of the following parameters and commands:

spool pre_upgrade_Details.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;

spool off; 
spool obj_count.log set line 200 pages 200 
select owner,object_type,status,count(status) from dba_objects group by owner,object_type,status order by owner; 

spool off; 
spool hidden_param_all.log
col "Parameter" for a70
col "Session Value" for a30
col "Instance Value" for a30 

SELECT x.ksppinm "Parameter", Y.ksppstvl "Session Value", Z.ksppstvl "Instance Value" FROM x$ksppiX, x$ksppcv Y, x$ksppsv Z WHERE x.indx = Y.indx AND x.indx = z.indx AND x.ksppinm LIKE '/_%' escape '/' order by x.ksppinm;

spool off; 
spool all_param.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; 

Step 6: Run the preupgrade.jar tool from the 12c environment and resolve all issues listed under the recommended actions in the preupgrade.log file located in the preupgrade folder.

/u01/app//oracle/product/dbhome_1/12.2.0.1/jdk/bin/java -jar /oracle/product/dbhome_1/19.3.0.0/rdbms/admin/preupgrade.jar FILE DIR /u02/backup/MIRDBFBKP/ 

Step 7 : Gather dictionary statistics for the database.

SQL> EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS; PL/SQL procedure successfully completed.

Step 8: Purge the recycle bin to remove unused objects from the database.

SQL> PURGE DBA_RECYCLEBIN; 
DBA Recyclebin purged.

Step 9: Refresh all materialized views (MVs) in the database.

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

COUNT(1) 
--------- 
274 
SQL> 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 

Step 10: Execute the preupgrade_fixups.sql script from the preupgrade directory.

SQL> @preupgrade_fixups.sql;

Executing Oracle PRE-Upgrade Fixup Script 
Auto-Generated by: Oracle Preupgrade Script Version: 19.0.0.0.0 Build: 1 
Generated on: 2026-02-26 07:06:50 
For Source Database: MIRDB 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 
------ ------------------------ ---------- -------------------------------- 
Number Preupgrade Check Name Remedied Further DBA Action 
------ ------------------------ ---------- -------------------------------- 
1. invalid_objects_exist NO Manual fixup recommended. 
2. mv_refresh YES None.
3. hidden_params   NO Informational only.
Further action is optional. 
4. dictionary_stats YES    None. 
5. mv_refresh  YES None. 
6. min_archive_dest_size NO Informational only. 
Further action is optional.
7. rman_recovery_version NO Informationalonly. 
Further action is optional. 
Further action is optional. 
PL/SQL procedure successfully completed. 

Note:

The fixup scripts have completed and addressed all issues they were able to resolve. However, some problems identified during the pre-upgrade checks still remain in the database. Depending on the type and severity of these unresolved issues, the database may not yet be ready for the upgrade.

To address these remaining issues, review the preupgrade_fixups.sql file and search for the specific failed check name or Preupgrade Action ID mentioned earlier. This will lead you to the original diagnostic message generated by the pre-upgrade tool, which provides detailed information about the issue and the required corrective actions.

To address these remaining issues, review the preupgrade_fixups.sql file and search for the specific failed check name or Preupgrade Action ID mentioned earlier. This will lead you to the original diagnostic message generated by the pre-upgrade tool, which provides detailed information about the issue and the required corrective actions.

Verify the output and run postupgrade_fixups.sql 

Step 11: Ensure the database is running in ARCHIVELOG mode.


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

NAME     OPEN_MODE     LOG_MODE

 --------- ----------------------
MIRDB    READWRITE    ARCHIVELOG 

 Step 12: Verify the COMPATIBLE parameter and do not modify it at this stage.

SQL> show parameter compatible

NAME                                              TYPE        VALUE 
------------------------------------ ----------- -------------------
compatible string 12.2.0.1.0 noncdb_compatible   boolean      FALSE 

Step 13: Configure the DB recovery parameters and create a restore point to enable rollback in case of upgrade failure.

SQL> show parameter recovery

NAME TYPE VALUE
---------------------
string   big integer 0 
db_recovery_file_dest
db_recovery_file_dest_size
recovery_parallelism
remote_recovery_file_dest

SQL> alter system set db_recovery_file_dest_size=50G; 
System altered. 
SQL> alter system set db_recovery_file_dest=‘/oraexport/FRA/MIRDB/';
System altered.

SQL> show parameter recovery

NAME TYPE VALUE 
------------------------------------ ----------- ------------------------------ 
db_recovery_file_dest string /oraexport/FRA/MIRDB/  integer 0 string 
db_recovery_file_dest_size recovery_parallelism remote_recovery_file_dest 
SQL> col name for a20 

big integer 50G integer 0 
string
col GUARANTEE_FLASHBACK_DATABASE for a10 
col TIME for a60 
set lines 190 
select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point;
no rows selected
SQL> create restore point pre_upgrade guarantee flashback database;
Restore point created.
SQL> select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point; 

NAME            GUARANTEE_ TIME
-------------------- ---------- ------------------------- 

PRE_UPGRADE     YES       26-FEB-21 07.39.34.000000000 AM 

Step 14: UPGRADE TASK 

Create a PFILE and shut down the database.

SQL> show parameter pfile

NAME      TYPE                               VALUE
------------------------------------ ----------- ——————————--------------—————
spfile   string  /u01/app/oracle/product/dbhome_1/12.2.0.1/dbs/spfileMIRDB.ora
SQL> create pfile=‘/u02/backup/MIRDBBKP/MIRDB/pfile_MIRDB.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. 

Step 15: Copy the PFILE and password file to the Oracle 19c dbs directory.

Set the Oracle 19c environment and start the database in upgrade mode.

MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/dbs/> export ORACLE_SID=MIRDB
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/dbs/> export ORACLE_HOME=/oracle/product/dbhome_1/19.3.0.0 
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/dbs/> /usr/local/bin:/usr/bin/X11:/oracle/local/bin:.:/usr/sbin:/sbin:/usr/ucb
<
MIRHOST1- CORP-NONEC : MIRDB //u01/app/oracle/product/dbhome_1/19.3.0.0/dbs/> which sqlplus /oracle/product/dbhome_1/19.3.0.0/bin/sqlplus 
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/dbs/> sdba 
SQL*Plus: Release 19.0.0.0.0 - Production on Sat 03 07:59:50 2026 Version 19.3.0.0.0 
Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to an idle instance. 

Step 16: Startup Upgrade

SQL> startup upgrade

ORACLE instance started. 
Total System Global Area 9663673928 bytes 
Fixed Size
Variable Size
Database Buffers
Redo Buffers
Database mounted.
Database opened.
SQL> select name,open_mode,cdb,version,status from v$database,v$instance; 

NAME OPEN_MODE CDB VERSION STATUS 
--------- -------------------- --- ----------------- ------------
MIRDB READWRITE NO19.0.0.0.0 OPENMIGRATE 
SQL> show parameter pfile 

NAME TYPE VALUE 
----------------------------------- ----------- ———————————————
spfile string /u01/app/oracle/product/dbhome_1/19.3.0 .0/dbs/spfileMIRDB.ora 

Step 17: Run the DBUpgrade utility to upgrade the database to Oracle 19c.

MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/rdbms/admin/> pwd
/u01/app/oracle/product/dbhome_1/19.3.0.0/rdbms/admin
MIRHOST1- CORP-NONEC : MIRDB/u01/app/oracle/product/dbhome_1/19.3.0.0/rdbms/admin/> nohup /u01/app/oracle/product/dbhome_1/19.3.0.0/perl/bin/perl catctl.pl -l /u02/backup/MIRDBBKP/MIRDB/UPGRADE -n 4 catupgrd.sql & 

[1] 16346
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/rdbms/admin/> nohup: ignoring input and appending output to ‘nohup.out’
MIRHOST1- CORP-NONEC : MIRDB /u01/app/oracle/product/dbhome_1/19.3.0.0/rdbms/admin/> 

Step 18: Verify that the upgrade completed successfully and start the database using the Oracle 19c environ

MIRHOST1- ~: MIRDB/home/oracle/> sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Apr 26 08:46:12 2026
Version 19.3.0.0.0 
Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to an idle instance.
SQL> startup

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

NAME OPEN_MODE CDB VERSION STATUS
--------- -------------------- --- ----------------- ------------
MIRDB 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 

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 UPGRADED 
CATPROC   Oracle database catalog views 19.0.0.0.0 UPGRADED 
JAVAVM  Server 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 
RAC Oracle Real Application Clusters  19.0.0.0.0  OPTION OFF 
OWM Oracle Workspace Manager  19.0.0.0.0 UPGRADED
XDB Oracle XML Database   19.0.0.0.0 UPGRADED

8 rows selected. 

Step 19: Execute the utlrp.sql script to recompile invalid database objects

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

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

COUNT(*)
-------- 
761 

Step 20: Run the ultra.sql package.

SQL> @/oracle/product/base19c/19.3.0.0/rdbms/admin/utlrp.sql;
Session altered. 

TIMESTAMP 
------------------------------ -------------------------------------------------------------- 
COMP_TIMESTAMP UTLRP_BGN 2026-02-26 08:48: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-02-26 08:50: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.

Step 21: Check the INVALID Objects

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 

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

SQL> !pwd 
/u02/backup/MIRDBBKP/MIRDB/PREUPGRADE1 
SQL> @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-04-04 07:07:03 
For Source Database: MIRDB 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. 

Step 23: Upgrade the database time zone version to the latest supported level.

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 step 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. 

Step 24:Check the Timezone of the database

SQL> SELECT version FROM v$timezone_file; 

VERSION 
-------- 
26
1 row selected. 
SQL> @/oracle/product/base19c/19.3.0.0/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: "GSMADMIN_INTERNAL"."AQ$_CHANGE_LOG_QUEUE_TABLE_S" Number of failures: 0
Table list: "GSMADMIN_INTERNAL"."AQ$_CHANGE_LOG_QUEUE_TABLE_L" 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. 

Step 25: Execute the utlusts.sql script to gather and report database statistics.

SQL> @/oracle/product/dbhome_1/19.3.0.0/rdbms/admin/utlusts.sql TEXT 

Oracle Database Release 19 Post-Upgrade Status Tool 02-26-2026 09:00:5 Database Name: MIRDB 

Component Name 
Current Status 

Full Elapsed Time Version HH:MM:SS 
19.3.0.0.0 00:13:12
VALID 19.3.0.0.0 00:01:04 
19.3.0.0.0 00:00:56 

VALID 19.3.0.0.0 00:00:08 VALID 19.3.0.0.0 00:00:44 

Oracle Server
JServer JAVA Virtual Machine Oracle XDK VALID Oracle Database Java Packages Oracle Workspace Manager Oracle Real Application Clusters Oracle XML Database
Datapatch

Final Actions 
VALID 
OPTION OFF 19.3.0.0.0 00:00:00 VALID 19.3.0.0.0 00:01:31 
00:00:58 00:01:07 
Post Upgrade 00:00:46 Post Compile 00:01:23 
Total Upgrade Time: 00:22:57
Database time zone version is 32.
It meets current release needs. 

Step 26: Execute the catuppst.sql script to complete post-upgrade catalog processing tasks.

SQL> @/oracle/product/base19c/19.3.0.0/rdbms/admin/catuppst.sql 

TIMESTAMP 
-------------------------------------------------------------------------------- 
COMP_TIMESTAMP DBRESTART DBUA_TIMESTAMP DBRESTART DBUA_TIMESTAMP DBRESTART 
2026-02-26 09:02:37 FINISHED 2026-02-26 09:02:37 
NONE 2026-02-26 09:02:37 
TIMESTAMP -------------------------------------------------------------------------------- 
DBUA_TIMESTAMP CATUPPST STARTED 2026-02-26 09:02:37 
TIMESTAMP -------------------------------------------------------------------------------- 
COMP_TIMESTAMP POSTUP_BGN DBUA_TIMESTAMP POSTUP_BGN DBUA_TIMESTAMP POSTUP_BGN 
2026-02-26 09:02:37 FINISHED 2026-02-26 09:02:37 
NONE 2026-02-26 09:02:37 
TIMESTAMP -------------------------------------------------------------------------------- 
COMP_TIMESTAMP CATREQ_BGN DBUA_TIMESTAMP CATREQ_BGN DBUA_TIMESTAMP CATREQ_BGN
2026-02-26 09:02:37 FINISHED 2026-02-26 09:02:37
NONE 2026-02-26 09:02:37 
catrequtlmg: b_StatEvt = TRUE catrequtlmg: b_SelProps = FALSE catrequtlmg: b_UpgradeMode = FALSE catrequtlmg: b_InUtlMig = FALSE 
TIMESTAMP -------------------------------------------------------------------------------- 

COMP_TIMESTAMP CATREQ_END DBUA_TIMESTAMP CATREQ_END DBUA_TIMESTAMP CATREQ_END 

2026-02-26 09:02:37 FINISHED 2026-02-26 09:02:37 

NONE 2026-02-26 09:02:37 

catuppst: Dropping library DBMS_DDL_INTERNAL_LIB
catuppst: Dropping view _CURRENT_EDITION_OBJ_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 DBUA_TIMESTAMP POSTUP_END DBUA_TIMESTAMP POSTUP_END 
2026-02-26 09:02:37 FINISHED 2026-02-26 09:02:37 
NONE 2026-02-26 09:02:37 
TIMESTAMP -------------------------------------------------------------------------------- 
COMP_TIMESTAMP CATUPPST DBUA_TIMESTAMP CATUPPST DBUA_TIMESTAMP CATUPPST 
2026-04-03 08:02:43 FINISHED 2026-04-03 11:06:43

Step 27: Re-execute the postupgrade_fixups.sql script to address any remaining post-upgrade issues.

MIRHOST1- CORP-NONEC : MIRDB /u02/backup/MIRDBBKP/MIRDB/PREUPGRADE1/> sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 26 09:03:36 2026
Version 19.3.0.0.0 

Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0

SQL> @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-04-03 09:07:03 

For Source Database: MIRDB 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 ------ ------------------------ ---------- -------------------------------- 

8. old_time_zones_exist YES 

9. dir_symlinks YES 10. post_dictionary YES 11. post_fixed_objects NO 
None. None. 
None. 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. 

Step 28: 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 

Step 29:  Drop the restore point after confirming the upgrade is successful.

SQL> drop restore point PRE_UPGRADE; 
Restore point dropped.

Step 30: 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 

Step 31: 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. 

Step 33: Post-Upgrade Conclusion Summary

Update TNS entries in the Oracle 19c network configuration.

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

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

These final steps ensure proper connectivity, environment consistency, and data protection following a successful Oracle 19c upgrade.

=====Hence tested and verified in our test env=====