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.






