Oracle Database 19c to Oracle AI Database 26ai Upgrade Step-by-Step Implementation Guide

 

1. Introduction

Database upgrades are a critical part of the Oracle Database lifecycle, ensuring systems remain secure, supported, and capable of leveraging the latest features and performance improvements. Organizations running Oracle Database environments must periodically upgrade their database versions to maintain compatibility with modern applications, benefit from improved performance optimizations, and take advantage of newly introduced technologies.

Oracle AI Database 26ai represents the next generation of Oracle’s database platform, introducing advanced capabilities such as AI-driven data processing, enhanced SQL functionality, improved automation, and strengthened security features. Upgrading from Oracle Database 19c to Oracle AI Database 26ai enables organizations to modernize their database infrastructure while maintaining full compatibility with existing workloads.

This document provides a step-by-step implementation guide for upgrading an Oracle Database from version 19c to Oracle AI Database 26ai in a Linux environment. The guide focuses on a practical upgrade approach, covering environment preparation, prerequisite checks, installation of the new Oracle software, upgrade execution, and post-upgrade validation.

The goal of this guide is to provide a clear, practical, and execution-focused reference that helps Oracle DBAs and infrastructure engineers perform database upgrades safely and efficiently while following best practices used in enterprise environments.


2. Real Enterprise Upgrade Scenario

In many enterprise environments, databases remain on long-term supported releases such as Oracle Database 19c for stability and compatibility reasons. However, as new Oracle Database versions are released, organizations often plan controlled upgrade projects to benefit from improved performance, enhanced security capabilities, and modern features.

For example, a financial services company running its core applications on Oracle Database 19c may decide to upgrade its infrastructure to Oracle AI Database 26ai in order to take advantage of advanced analytics capabilities, improved resource management, and long-term support.

During such upgrade projects, database administrators must carefully plan and execute the upgrade process. This includes validating system prerequisites, backing up critical data, installing the new Oracle software version, and performing the database upgrade using Oracle's recommended tools.

A properly executed upgrade ensures that business applications continue to function seamlessly while the organization benefits from the latest Oracle database innovations.

This guide simulates a real-world enterprise upgrade scenario in which an existing Oracle Database 19c environment is upgraded to Oracle AI Database 26ai using Oracle upgrade utilities and best practices.


3. Architecture

The upgrade architecture consists of a single-instance Oracle Database environment running on a Linux server, where the existing Oracle Database 19c installation is upgraded to Oracle AI Database 26ai.

The architecture includes the following components:

Source Environment

  • Oracle Database 19c

  • Oracle Linux operating system

  • Database running on filesystem storage

  • Oracle Listener for client connectivity

Target Environment

  • Oracle AI Database 26ai software installed on the same server

  • Database upgraded using Oracle upgrade tools

  • Existing database files reused during upgrade

  • Listener reconfigured to support the upgraded database

The upgrade process involves installing the new Oracle Database software, performing pre-upgrade checks, and executing the upgrade process while preserving the existing database configuration and data.

4. Objectives

The main objectives of this guide are:

  • To demonstrate a safe and structured database upgrade process

  • To provide a hands-on implementation example

  • To explain the pre-upgrade and post-upgrade validation procedures

  • To help DBAs understand upgrade best practices used in enterprise environments


5. Pre-Upgrade Checklist

Before starting the database upgrade, several validation checks must be performed to ensure the environment is ready for the upgrade process.

System Validation

  • Verify operating system compatibility with Oracle Database 26ai

  • Ensure required kernel parameters are configured

  • Confirm sufficient disk space for Oracle 26ai software installation

Database Validation

  • Check the current database version

  • Verify database status and availability

  • Validate tablespace usage and available storage

Backup Preparation

  • Take a full RMAN backup of the database

  • Backup control files and parameter files

  • Verify backup integrity

Pre-Upgrade Checks

  • Run Oracle pre-upgrade scripts

  • Identify deprecated parameters

  • Check for invalid database objects

Listener and Network Check

  • Validate listener configuration

  • Confirm client connectivity

  • Ensure TNS configuration is correct

Performing these checks ensures that the upgrade process proceeds smoothly and reduces the risk of unexpected failures.


Before you begin:


1) Target database must be either Oracle Database 19c or Oracle Database 21c to upgrade to Oracle 26ai Database.
2) The database must be Container Database (CDB). If it is currently configured as a non-CDB, you need to convert it to a CDB first before proceeding with the upgrade or AutoUpgrade has the ability to convert non-CDB to CDB database.
3) The Oracle Grid Infrastructure release version must be equal to or later than the version you are upgrading to.
4) You can upgrade one or many databases without human intervention in single command and a single configuration file. 


My existing DB version is earlier than 19c. Can I directly upgrade my DB to Oracle 26ai database ❓
If your current Oracle Database release is earlier than 19c, then a direct upgrade to Oracle 26ai Database is not supported. You must first upgrade to a supported intermediate release, and then proceed with the upgrade to Oracle 26ai Database.

You can perform a direct upgrade to Oracle 26ai Database from the following releases:
- Oracle Database 21c
- Oracle Database 19c

6. Upgrade Execution

Once the environment has been validated and all prerequisite checks have been completed, the database upgrade process can begin.

The upgrade process typically includes the following steps:


Step 1: Capture data from existing Oracle 19c database.


Login as oracle installer owner, set the environment variables and generate the below spool file.

$su - oracle

$mkdir -p /home/oracle/26ai_upgrade

$chown -R oracle:oinstall /home/oracle/26ai_upgrade

$chmod -R 755 /home/oracle/26ai_upgrade

sqlplus / as sysdba

spool /home/oracle/26ai_upgrade/DB_data_capture_Pre.txt

alter session set nls_date_format='dd-mm-yyyy hh24:mi:ss';

select sysdate from dual;

Prompt ========================================================
Prompt Database Details       
Prompt ========================================================
set lines 300 pages 3000
select name,db_unique_name,database_role,open_mode,log_mode,controlfile_type,flashback_on from v$database;
select banner from v$version;
Prompt ========================================================
Prompt D + R + C + T Names and Location   
Prompt ========================================================
col name for a56
col member for a56
select file#,name from v$datafile;
select name from v$controlfile;
select name from v$tempfile;
select * from v$logfile;
select * from v$log;
Prompt ========================================================
Prompt Parameter checks   
Prompt ========================================================
show parameter db_name
show parameter db_unique_name
show parameter compatible
show parameter cluster
show parameter sga
show parameter pga
show parameter memory
show parameter reco
show parameter parallel
show parameter job_queue_processes
show parameter case
show parameter broker
show parameter processes
show parameter db_file
show parameter transaction
show parameter session
Prompt ========================================================
Prompt Patches checks   
Prompt ========================================================
set line 200 pages 2000
col ACTION for a30
col STATUS for a10
col ACTION_TIME for a30
col DESCRIPTION for a70
select PATCH_ID,ACTION,ACTION_TIME,DESCRIPTION,STATUS from dba_registry_sqlpatch;

Prompt ========================================================
Prompt NLS Parameter Checks   
Prompt ========================================================
col property_name for a45
col property_value for a45
select property_name,property_value from database_properties order by 1;

Prompt ========================================================
Prompt Database Registry Component checks   
Prompt ========================================================
col comp_name for a56
col comp_id for a20
col schema for a34
select COMP_ID,COMP_NAME,VERSION,STATUS,schema from dba_registry;

Prompt ========================================================
Prompt Object Validations/Invalidations   
Prompt ========================================================
set lines 200 pages 2000
col owner for a25
col object_name for a60
col object_type for a25
select object_name,owner,object_type,status,created,last_ddl_time from dba_objects where status='INVALID';
select owner,object_type,count(*) from dba_objects where status='INVALID' group by owner,object_type order by 1;
select owner,count(*) from dba_objects where status='INVALID' group by owner order by 1;
select owner,object_name,object_type,status from dba_objects where status='INVALID' and owner in('SYS','SYSTEM');

Prompt ================================================================================================================
Prompt  Timezone checks   
Prompt  Note: If your source version's time zone is already higher than the destination's home, 
Prompt   then apply the matching or any higher time zone patch to your destination home before upgrade.
Prompt     For latest DST patch refer to Note 412160.1
Prompt ================================================================================================================
SELECT version FROM v$timezone_file;

Prompt ========================================================
Prompt Oracle Label Security and Database Vault Checks   
Prompt ========================================================
SELECT * FROM V$OPTION WHERE PARAMETER like 'Oracle%';
Prompt ========================================================
Prompt Data Encryption Checks   
Prompt ========================================================
col wrl_type for a30
col WRL_PARAMETER for a60
select * from v$encryption_wallet;
select * from gv$encryption_wallet;
select distinct tablespace_name,ENCRYPTED from dba_tablespaces;
SELECT * FROM DBA_ENCRYPTED_COLUMNS;
Prompt ====================================================================================================================
Prompt Mview checks   
Prompt  Note: Check the status of all materialized views (MV), and refresh any materialized views that are not fresh.
Prompt  Before upgrading Oracle Database, you must wait until all materialized views have completed refreshing.
Prompt  Refer: Unable To Proceed With Upgrade Due To Materiealized View Refresh That Never Completes (Doc ID 1467392.1)
Prompt ====================================================================================================================
SELECT distinct o.name  FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) = 8;
col MVIEW_NAME for a45
select MVIEW_NAME,OWNER,STALENESS,STALE_SINCE,LAST_REFRESH_DATE,REFRESH_METHOD from dba_mviews order by 1;
select u.name owner,o.name mview_name, s.obj#,lastrefreshdate from obj$ o, sum$ s, user$ u where u.user# = o.owner# and o.obj# = s.obj# and o.type# = 42 AND bitand(s.mflags, 8) = 8;
select decode(bitand(s.mflags,8), 8,'Refresh In Progress','Not being refreshed') from sys.obj$ o, sys.user$ u, sys.sum$ s where o.obj# = s.obj# and o.owner# = u.user# and o.type# = 42 and o.name='&mview';
select * from v$mvrefresh;
select * from dba_jobs_running;
Prompt ======================================================================================
Prompt Distributed Transaction Checks
PromptNote: There should not be any distributed transaction in pending state.
Prompt ======================================================================================
select * from dba_2pc_pending;

Prompt ======================================================================================
Prompt Check whether there are tables with SDO_GEOMETRY by executing below query.
Prompt If it returns a row(s), then apply Patch 25293022 on the 12.2 Oracle home, before starting the upgrade.
Prompt Check Oracle Spatial (SDO) is installed, if yes apply Patch 29715479 onto ORACLE_HOME before upgrade to avoid issue reported in Note 2547520.1
Prompt ======================================================================================
col owner format a15
col table_name format a30
col column_name format a30
SELECT owner,table_name,column_name FROM dba_tab_columns WHERE data_type = 'SDO_GEOMETRY' AND owner != 'MDSYS' ORDER BY 1,2,3;

Prompt ======================================================================================
Prompt To ensure that the new access controls are part of your upgrade testing, prepare a post-upgrade script to make the scripts available in your database environment.
Prompt After the upgrade, grant specific required privileges. Access is based on the usage in the original database.
Prompt ======================================================================================
set lines 300 pages 3000
col REFERENCED_OWNER for a25
col OWNER for a30
col REFERENCED_NAME for a34
col REFERENCED_LINK_NAME for a34
SELECT * FROM DBA_DEPENDENCIES WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR','DBMS_LDAP') AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
Prompt ======================================================================================
Prompt Capture DB Link Details and create script to re-create db link
Prompt During the upgrade to Oracle Database 12c any passwords in database links are encrypted.
Prompt To downgrade to the original release, all of the database links with encrypted passwords must be dropped prior to the downgrade.
Prompt ======================================================================================
SELECT 'CREATE '||DECODE(U.NAME,'PUBLIC', 'public')||' DATABASE LINK
'||CHR(10)||DECODE(U.NAME,'PUBLIC',Null, 'SYS','',U.NAME||'.')|| L.NAME||chr(10)
|| 'CONNECT TO ' || L.USERID || ' IDENTIFIED BY "'||L.PASSWORD||'" USING
'''||L.HOST||''''||chr(10)||';' TEXT FROM SYS.LINK$ L, SYS.USER$ U WHERE L.OWNER# = U.USER#;
Prompt =========================================================================================================
Prompt SYS.AUD$ table checks
Prompt Note: IF Oracle Label Security and Oracle Database Vault are installed then aud$ will be in SYSTEM.AUD$
Prompt =========================================================================================================
select owner,tablespace_name from dba_extents where segment_name='AUD$' group by owner,tablespace_name;
Prompt =========================================================================================================
Prompt Couting and Querying duplicate objects
Prompt Note: Refer Note 1030426.6 How to Clean Up Duplicate Objects Owned by SYS and SYSTEM schema
Prompt =========================================================================================================
SELECT count(1) 
FROM dba_objects 
WHERE object_name||object_type in 
   (SELECT object_name||object_type  
    from dba_objects 
    where owner = 'SYS')
AND owner = 'SYSTEM'
AND object_name NOT in ('AQ$_SCHEDULES','AQ$_SCHEDULES_PRIMARY','DBMS_REPCAT_AUTH','DBMS_REPCAT_AUTH') ;
SELECT object_name, object_type, subobject_name, object_id 
FROM dba_objects 
WHERE object_name||object_type in 
   (SELECT object_name||object_type  
    FROM dba_objects 
    WHERE owner = 'SYS')
AND owner = 'SYSTEM'
AND object_name NOT in ('AQ$_SCHEDULES','AQ$_SCHEDULES_PRIMARY','DBMS_REPCAT_AUTH','DBMS_REPCAT_AUTH') ; 

Prompt =========================================================================================================================
Prompt Disabling Concurrent Statistics Collection
Prompt Database Upgrade to 11.2 hangs, when upgrade process executes dbms_registry_sys.gather_stats(null) (Doc ID 1588552.1)
Prompt =========================================================================================================================
SELECT dbms_stats.get_prefs('CONCURRENT') from dual;

Prompt =========================================================================================================================
Prompt Backing-up Scheduler Jobs
Prompt Disable any running scheduler jobs before upgrade. All scheduler jobs will be converted into dba_jobs from Oracle 19c onwards.
Prompt =========================================================================================================================
col owner for a30
col job_name for a50
col job_action for a70
set lines 300 pages 3000
col status for a13
col ACTUAL_START_DATE for a23
col additional_info for a60
select OWNER,JOB_NAME,JOB_ACTION,ENABLED from dba_scheduler_jobs where ENABLED='TRUE';
select JOB_NAME,OWNER,STATUS,additional_info,to_char(ACTUAL_START_DATE,'dd-mm-yyyy hh24:mi:ss') ACTUAL_START_DATE from dba_scheduler_job_run_details where job_name='&Job_Name' order by ACTUAL_START_DATE;
Prompt =========================================================================================================
Prompt Check whether database has any externally authenticated SSL users
Prompt =========================================================================================================
SELECT name FROM sys.user$ WHERE ext_username IS NOT NULL AND password = 'GLOBAL';


Prompt =========================================================================================================
Prompt Remove all hidden parameters prior to upgrading
Prompt =========================================================================================================
col NAME for a45
col VALUE for a45
SELECT name, value from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\' order by name;

Prompt =========================================================================================================
Prompt Network ACL Checks
Prompt If the query returns any row, then please follow Note 1958876.1 Upgrade fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION"  to avoid failure in XDB's upgrade.
Prompt =========================================================================================================
select aclid, start_date, end_date from xds_ace where start_date is not null;

Prompt =========================================================================================================
Prompt Database and RDBMS Compatibility Checks and ensure all Diskgroups are mounted or connected.
Prompt =========================================================================================================
select name,state,total_mb,free_mb,COMPATIBILITY,DATABASE_COMPATIBILITY from gv$asm_diskgroup;

Prompt =========================================================================================================
Prompt Ensure error column returns "no rows". If you get any error message then resolve that first.
Prompt =========================================================================================================
set lines 300
set pages 3000
col DEST_NAME for a30
select inst_id,dest_id,DEST_NAME,STATUS,DB_UNIQUE_NAME,RECOVERY_MODE,DATABASE_MODE,error from gv$archive_dest_status;
SELECT resetlogs_id,dest_id,max(SEQUENCE#) FROM V$ARCHIVED_LOG where applied='YES' group by dest_id,resetlogs_id order by 1 desc,2;

Prompt =========================================================================================================
Prompt Existing Restore point and flashback details
Prompt =========================================================================================================
col name for a30
select flashback_on from v$database;
select scn, storage_size, time, name from v$restore_point;

Prompt =========================================================================================================
Prompt Ensure Database Vault owner has DV PATCH ADMIN role.
Prompt =========================================================================================================
col GRANTEE for a34
col GRANTED_ROLE for a34
select grantee,granted_role from dba_role_privs where grantee='SYS' and granted_role like '%DV%';

Prompt =========================================================================================================
Prompt Ensure qopatch command is executed successfully without any error.
Prompt =========================================================================================================
set serverout on
exec dbms_qopatch.get_sqlpatch_status;

Prompt =========================================================================================================
Prompt Ensure there should be any DB file in recovery mode, backup mode, and there should not be any block corruption in DB.
Prompt =========================================================================================================
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; 
select * from v$recover_file;
select * from v$database_block_corruption;

Prompt =========================================================================================================
Prompt Before the upgrade, if Oracle Multimedia and/or Oracle Spatial is installed, check the definition of the PUBLIC synonym AREA.
Prompt It should be defined to be a synonym for OGC_AREA, otherwise, it causes invalid DB components upon upgrading.
Prompt =========================================================================================================
col OWNER for a30
col SYNONYM_NAME for a34
col TABLE_OWNER for a30
select owner, synonym_name, table_owner, table_name from dba_synonyms where synonym_name = 'AREA';

Prompt =========================================================================================================
Prompt Check adequate free space is avaialable in temporarary tablespace
Prompt =========================================================================================================
col tablespace for a12
SELECT   A.tablespace_name tablespace, D.gb_total,
         SUM (A.used_blocks * D.block_size) / 1024 / 1024/1024  Gb_used,
         D.gb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024 /1024  gb_free
FROM     v$sort_segment A,
         (
         SELECT   B.name, C.block_size, SUM (C.bytes) / 1024 / 1024 /1024 gb_total
         FROM     v$tablespace B, v$tempfile C
         WHERE    B.ts#= C.ts#
         GROUP BY B.name, C.block_size
         ) D
WHERE    A.tablespace_name = D.name
GROUP by A.tablespace_name, D.gb_total;

Prompt =========================================================================================================
Prompt Check adequate free space is avaialable in flash recovery area
Prompt =========================================================================================================
SELECT
  ROUND((A.SPACE_LIMIT / 1024 / 1024 / 1024), 2) AS TOTAL_GB,
  ROUND((A.SPACE_USED / 1024 / 1024 / 1024), 2) AS USED_GB,
  ROUND((A.SPACE_RECLAIMABLE / 1024 / 1024 / 1024), 2) AS RECLAIMABLE_GB,
  SUM(B.PERCENT_SPACE_USED)  AS PERCENT_OF_SPACE_USED
FROM
  V$RECOVERY_FILE_DEST A,
  V$FLASH_RECOVERY_AREA_USAGE B
GROUP BY
  SPACE_LIMIT,
  SPACE_USED ,
  SPACE_RECLAIMABLE ;

Prompt =========================================================================================================
Prompt Check adequate free space is avaialable in default and system tablespaces
Prompt =========================================================================================================
set pages 200
set line 180
col file_name for a60
col TABLESPACE_NAME for a25
SELECT A.TABLESPACE_NAME,round(SUM(A.TOTS)/1024/1024) "Tot size MB",
round(SUM(A.SUMB)/1024/1024) "Tot Free MB",
(SUM(A.SUMB)*100/SUM(A.TOTS)) "%FREE",
100-(SUM(A.SUMB)*100/SUM(A.TOTS)) "%USED",
round(SUM(A.LARGEST)/1024/1024) MAX_FREE,SUM(A.CHUNKS) CHUNKS_FREE
FROM (
SELECT TABLESPACE_NAME,0 TOTS,SUM(BYTES) SUMB,
MAX(BYTES) LARGEST,COUNT(*) CHUNKS
FROM SYS.DBA_FREE_SPACE A
GROUP BY TABLESPACE_NAME
UNION
SELECT TABLESPACE_NAME,SUM(BYTES) TOTS,0,0,0
FROM SYS.DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) A, V$INSTANCE B
GROUP BY UPPER(B.INSTANCE_NAME),A.TABLESPACE_NAME having (100-(SUM(A.SUMB)*100/SUM(A.TOTS))) > 10
/
Prompt =========================================================================================================
Prompt Check whether Unified Auditing is enabled
Prompt =========================================================================================================
SELECT PARAMETER, VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
select count(*) from audsys.aud$unified; 

col trigger_name for a30
col trigger_type for a23
col owner for a19
col status for a17
col TABLE_NAME for a36
col TABLE_OWNER for a23
col BASE_OBJECT_TYPE for a34
set lines 300 pages 3000
select trigger_name,trigger_type,owner,status,TABLE_NAME,TABLE_OWNER,BASE_OBJECT_TYPE from dba_triggers where status='ENABLED' order by 1;

spool off;

Now capture OS Data as well. Login as oracle user and execute below commands:

$cat /etc/redhat-release
$date
$id
$hostname
$uname -a
$env | grep ORA
$ps -ef |grep pmon
$ps -ef |grep tns
$ps -ef | grep agent
$lsnrctl status LISTENER_NAME
$which opatch
$opatch version
$opatch lspatches
$opatch lsinv


Step 2: Oracle 26ai Database Software Installation


Download Oracle 26ai database software for Linux OS and start rdbms software installation. Refer : oracle-database-26ai-installation

In my testing environment, the Oracle 26ai database software has already been installed, therefore the installation steps are not repeated in this guide. For the purpose of this article, we will assume that Oracle 26ai software is already available on the server, and the focus will be solely on the database upgrade activity.

Copy below files from Oracle 19c Home to Oracle 26ai database home.
- Pfile/Spfile
- Password File
- tnsnames.ora
- listener.ora
- sqlnet.ora
- wallet files if exist
- crontab scripts ---> Modify crontab scripts if scheduled with new Oracle 26ai DB home.


Step 3: Download AutoUpgrade Setup.

  Link :-AutoUpgrade Utility

--------     Download the file shown in the picture by clicking the link above     --------



Step 4: Prepare AutoUpgrade Utility and create sample config file for upgrade.


Beginning with the Oracle 26ai Database release, traditional upgrade methods such as DBUA (Database Upgrade Assistant) and manual upgrade procedures are desupported. Database AutoUpgrade is the supported and recommended method for upgrading Oracle database. You can upgrade one or many databases without human intervention in single command and a single configuration file. 

In Oracle Database 19c and later target Oracle homes, the autoupgrade.jar file exists by default. However, Oracle recommends that you download the latest version and replace the one already existing under $ORACLE_HOME/rdbms/admin or you can create a new directory and place the autoupgrade.jar there .

Let's check the AutoUpgrade.jar file under both Oracle 19c and Oracle 26ai ORACLE_HOME.

Source:
[oracle@ora19c-db ~]$ id
uid=1002(oracle) gid=2000(oinstall) groups=2000(oinstall),2100(asmadmin),2200(dba),2300(oper),2400(asmdba),2500(asmoper)

[oracle@ora19c-db ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin

[oracle@ora19c-db admin]$ ll autoupgrade.jar 
-rw-r--r-- 1 oracle oinstall 3360892 Feb  9  2019 autoupgrade.jar
 
Target:
[oracle@ora19c-db admin]$ cd /u01/app/oracle/product/23.0.0/dbhome_1/rdbms/admin/

[oracle@ora19c-db admin]$ ll autoupgrade.jar 
-rw-r----- 1 oracle oinstall 6729196 Jan 17 12:47 autoupgrade.jar

Let's create new directory as autoupgrade under /home/oracle location and move newly downloaded autoupgrade.jar file there.

[root@ora19c-db ~]# cd /u01/app/oracle

[root@ora19c-db oracle]# ll
drwxr-x---   3 oracle oinstall   21 Mar  6 04:32 admin
drwxr-x---   3 oracle oinstall   21 Mar  6 04:34 audit
drwxr-x---   5 oracle oinstall   47 Mar  6 04:34 cfgtoollogs
drwxr-xr-x   2 oracle oinstall    6 Mar  6 04:31 checkpoints
drwxrwx---  25 oracle oinstall 4096 Mar  6 05:03 diag
drwxr-x---   3 oracle oinstall   21 Mar  6 04:32 oradata
drwxr-xr-x.  4 oracle oinstall   34 Mar  6 04:12 product
drwxr-x---   3 oracle oinstall   21 Mar  6 04:32 recovery_area

[root@ora19c-db oracle]# mkdir autoupgrade
[root@ora19c-db oracle]# chown -R oracle:oinstall autoupgrade
[root@ora19c-db oracle]# chmod -R 755 autoupgrade

[root@ora19c-db oracle]# ls -ld /u01/app/oracle/autoupgrade/
drwxr-xr-x 2 oracle oinstall 6 Mar  6 16:27 /u01/app/oracle/autoupgrade/

[root@ora19c-db oracle]# cd autoupgrade/

[root@ora19c-db autoupgrade]# cp /setup/autoupgrade.jar .

[root@ora19c-db autoupgrade]# ll
-rwxr-x--- 1 root root 6960211 Mar  6 16:27 autoupgrade.jar

[root@ora19c-db autoupgrade]# chmod 777 autoupgrade.jar 

#Let's create sample AutoUpgrade Config file.

[oracle@ora19c-db autoupgrade]$ id
uid=1002(oracle) gid=2000(oinstall) groups=2000(oinstall),2100(asmadmin),2200(dba),2300(oper),2400(asmdba),2500(asmoper)

[oracle@ora19c-db ~]$ cd /u01/app/oracle/autoupgrade/
[oracle@ora19c-db autoupgrade]$ ll
-rwxrwxrwx 1 root root 6960211 Mar  6 16:27 autoupgrade.jar

[oracle@ora19c-db ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1

[oracle@ora19c-db ~]$ id
uid=1002(oracle) gid=2000(oinstall) groups=2000(oinstall),2100(asmadmin),2200(dba),2300(oper),2400(asmdba),2500(asmoper)

[oracle@ora19c-db ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1

[oracle@ora19c-db dbhome_1]$ java -jar /u01/app/oracle/autoupgrade/autoupgrade.jar -create_sample_file config
Created sample configuration file /tmp/sample_config.cfg

[oracle@ora19c-db dbhome_1]$ ls -ltr /tmp/sample_config.cfg
-rw-r--r-- 1 oracle oinstall 4991 Mar  6 16:34 /tmp/sample_config.cfg

Let’s review the AutoUpgrade configuration file and understand the parameters defined in it.

[oracle@ora19c-db dbhome_1]$ cat /tmp/sample_config.cfg
################################################################
#
# :::  Sample config file for upgrade :::
#
# Build version 26.2.260205
# Build date    2026/02/05 04:36:27 +0000
#
# # Directory includes the following:
#   (1) upgrade's global directory
#   (2) Any logs tied to a job
#
################################################################

################################################################
#
::: MANDATORY PARAMETERS :::
#
# global.global_log_dir
The base logging directory of upgrade
# Each instance of upgrade must write to a unique directory
# <prefix>.sid
The SID of the non-CDB or CDB to upgrade
# <prefix>.source_home
Path to the Oracle home of the database
# <prefix>.target_home
Path to the Oracle home to which you want to upgrade
#
################################################################
global.global_log_dir=<$ORACLE_BASE/cfgtoollogs/upgrade or /tmp/upgrade>
upg1.sid=<$ORACLE_SID or {SID}}>
upg1.source_home=<$ORACLE_HOME or /u01/app/oracle/product/12.2/dbhome_1>
upg1.target_home=<$ORACLE_TARGET_HOME or /u01/app/oracle/product/23/dbhome_1>

################################################################
#
# global.keystore
Location where upgrade can store its keystore
# Needed for most operations on encrypted databases
#
################################################################
#global.keystore=/u01/app/oracle/admin/ORCL/keystore

################################################################
#
# <prefix>.drop_grp_after_upgrade
Drop the restore point after successful upgrade
# Accepted values: YES, NO
#
################################################################
#upg1.drop_grp_after_upgrade=

################################################################
#
# <prefix>.restoration
Create a guaranteed restore point before upgrade
# Accepted values: YES, NO
#
################################################################
#upg1.restoration=

################################################################
#
# <prefix>.add_after_upgrade_pfile
Path to file containing parameters to add after upgrade
# Example: /u01/app/oracle/admin/ORCL/init_add.ora
#
################################################################
#upg1.add_after_upgrade_pfile=

################################################################
#
# <prefix>.drop_after_upgrade_pfile
Path to file containing parameters to remove after upgrade
# Example: /u01/app/oracle/admin/ORCL/init_drop.ora
#
################################################################
#upg1.drop_after_upgrade_pfile=

################################################################
#
# <prefix>.before_action
Path to script to execute before starting upgrade flow
#
################################################################
#upg1.before_action=/u01/app/oracle/admin/ORCL/before_upgrade.sh

################################################################
#
# <prefix>.after_action
Path to script to execute after the upgrade flow
#
################################################################
#upg1.after_action=/u01/app/oracle/admin/ORCL/after_upgrade.sh

################################################################
#
# <prefix>.drop_win_src_service
Windows only: Drop the Windows service after registering the new service
# Accepted values: YES, NO
#
################################################################
#upg1.drop_win_src_service=

################################################################
#
# <prefix>.wincredential
Location of a Microsoft Windows credential object file that you have previously generated with the upgrade command-line parameter load_win_credential.
#
################################################################
#upg1.wincredential=C:Usersoraclecred

################################################################
#
# <prefix>.log_dir
Location of database-specific log files created during the upgrade
# If not specified, global.global_log_dir is used
#
################################################################
#upg1.log_dir=/u01/app/oracle/admin/ORCL/upgrade_logs

################################################################
#
# <prefix>.raise_compatible
Raise compatible parameter to the default value of the new release
# Requires <prefix>.drop_grp_after_upgrade=yes
# Accepted values: YES, NO
#
################################################################
#upg1.raise_compatible=

################################################################
#
# <prefix>.run_dictionary_health
Perform a dictionary check as part of the pre-upgrade analysis
# Accepted values: FULL, CRITICAL
#
################################################################
#upg1.run_dictionary_health=

################################################################
#
# <prefix>.timezone_upg
Upgrade the time zone file after upgrade
# Accepted values: YES, NO
#
################################################################
#upg1.timezone_upg=


Parameter Name: global_log_dir
Description: Directory location where AutoUpgrade stores log files and temporary files during upgrade. Default is ORACLE_BASE.
Parameter Value: /u01/app/oracle/cfgtoollogs/upgrade
Mandatory / Optional: Optional

Parameter Name: sid
Description: SID of the database to be upgraded.
Parameter Value: AUTOUPG
Mandatory / Optional: Mandatory

Parameter Name: source_home
Description: ORACLE_HOME of source version.
Parameter Value: /u01/app/oracle/product/19.0.0/dbhome_1
Mandatory / Optional: Mandatory

Parameter Name: target_home
Description: ORACLE_HOME of target version.
Parameter Value: /u01/app/oracle/product/23.0.0/dbhome_1
Mandatory / Optional: Mandatory

Parameter Name: keystore
Description: Secure directory for TDE wallet/keystore passwords.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/keystore
Mandatory / Optional: Optional

Parameter Name: drop_grp_after_upgrade
Description: Drop the restore point after successful upgrade.
Parameter Value: YES | NO
Mandatory / Optional: Optional

Parameter Name: restoration
Description: Create a guaranteed restore point before upgrade.
Parameter Value: YES | NO
Mandatory / Optional: Optional

Parameter Name: add_after_upgrade_pfile
Description: PFILE whose parameters will be added after upgrade.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/init_add.ora
Mandatory / Optional: Optional

Parameter Name: drop_after_upgrade_pfile
Description: PFILE whose parameters will be removed after upgrade.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/init_remove.ora
Mandatory / Optional: Optional

Parameter Name: before_action
Description: Custom shell script to run before an upgrade activity.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/before_upgrade.sh
Mandatory / Optional: Optional

Parameter Name: after_action
Description: Custom shell script to run after an upgrade activity.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/after_upgrade.sh
Mandatory / Optional: Optional

Parameter Name: drop_win_src_service
Description: Drop source DB service after upgrade (Windows only).
Parameter Value: YES | NO
Mandatory / Optional: Optional

Parameter Name: wincredential
Description: Windows PowerShell credential object for Oracle software owner.
Parameter Value: C:\Users\oracle\cred
Mandatory / Optional: Optional

Parameter Name: log_dir
Description: Location of log files generated for database upgrades.
Parameter Value: /u01/app/oracle/admin/AUTOUPG/upgrade_logs
Mandatory / Optional: Optional

Parameter Name: raise_compatible
Description: Increases COMPATIBLE parameter to target release after upgrade. Downgrade not possible.
Parameter Value: YES | NO
Mandatory / Optional: Optional

Parameter Name: run_dictionary_health
Description: Run Oracle Dictionary Health Checks during pre-upgrade.
Parameter Value: FULL | CRITICAL
Mandatory / Optional: Optional

Parameter Name: timezone_upg
Description: Enable/disable time zone (DST) upgrade.
Parameter Value: YES | NO
Mandatory / Optional: Optional



In this testing environment, only the mandatory parameters are included in the configuration file to keep the setup simple and focused on the upgrade process.

Let’s copy the sample configuration file from /tmp to a customized location. This step is optional; however, I have created a separate directory to keep track of the AutoUpgrade activity and related files.

[oracle@ora19c-db ~]$ cp /tmp/sample_config.cfg /u01/app/oracle/autoupgrade/

[oracle@ora19c-db ~]$ cd /u01/app/oracle/autoupgrade/

[oracle@ora19c-db autoupgrade]$ mv sample_config.cfg autoupg.cfg

[oracle@ora19c-db autoupgrade]$ ll
-rw-r--r-- 1 oracle oinstall    4991 Mar  6 16:36 autoupg.cfg
-rwxrwxrwx 1 root   root     6960211 Mar  6 16:27 autoupgrade.jar

[oracle@ora19c-db autoupgrade]$ vi autoupg.cfg

After keeping only the mandatory parameters along with a few additional required settings, new configuration file will look similar to the example shown below.

[oracle@ora19c-db autoupgrade]$ cat autoupg.cfg
global.global_log_dir=/u01/app/oracle/cfgtoollogs/upgrade
upg1.sid=AUTOUPG
upg1.source_home=/u01/app/oracle/product/19.0.0/dbhome_1
upg1.target_home=/u01/app/oracle/product/23.0.0/dbhome_1
upg1.restoration=YES
upg1.log_dir=/u01/app/oracle/autoupgrade/upgrade_logs
upg1.timezone_upg=YES


Step 5: Analyze the AutoUpgrade JAR File

Let's ensure taht the specified files are located in respective directories.

[oracle@ora19c-db autoupgrade]$ id
uid=1002(oracle) gid=2000(oinstall) groups=2000(oinstall),2100(asmadmin),2200(dba),2300(oper),2400(asmdba),2500(asmoper)

[oracle@ora19c-db autoupgrade]$ pwd
/u01/app/oracle/autoupgrade

[oracle@ora19c-db autoupgrade]$ ll
-rw-r--r-- 1 oracle oinstall     286 Mar  6 16:38 autoupg.cfg
-rwxrwxrwx 1 root   root     6960211 Mar  6 16:27 autoupgrade.jar

[oracle@ora19c-db autoupgrade]$ ll /u01/app/oracle/product/23.0.0/dbhome_1/jdk/bin/java
-rwxr-xr-x 1 oracle oinstall 12368 Jan 17 18:11 /u01/app/oracle/product/23.0.0/dbhome_1/jdk/bin/java

[oracle@ora19c-db autoupgrade]$ ll /u01/app/oracle/autoupgrade/autoupgrade.jar
-rwxrwxrwx 1 root root 6960211 Mar  6 16:27 /u01/app/oracle/autoupgrade/autoupgrade.jar

[oracle@ora19c-db autoupgrade]$ ll /u01/app/oracle/autoupgrade/autoupg.cfg
-rw-r--r-- 1 oracle oinstall 286 Mar  6 16:38 /u01/app/oracle/autoupgrade/autoupg.cfg

AutoUpgrade "-mode analyze" will not start the upgrade but it will perform pre-upgrade checks on the database using the configuration file autoupg.cfg. This helps to identify any potential issues, required fixes, and compatibility problems before starting the actual upgrade. AutoUpgrade Utility has it's own command line interactive mode where you can use multiple commands to check,view,stop specific job, etc.

Below are the options availbale in AutoUpgrade Interactive mode:

upg> help
 exit                                    To close and exit
 help                                    Displays help
 lsj [<option>] [-a <number>]            Lists jobs by status up to n elements
     -f                                  - Filter by finished jobs
     -r                                  - Filter by running jobs
     -e                                  - Filter by jobs with errors
     -p                                  - Filter by jobs being prepared
     -n <number>                         - Display up to n jobs
     -a <number>                         - Repeats the command (in <number> 
                                           seconds)
 lsr                                     Displays the restoration queue
 lsa                                     Displays the stop queue
 tasks                                   Displays the tasks running
 clear                                   Clears the terminal
 resume -job <number> [-ignore_errors=<ORA-#####,ORA-#####>] 
                                         Restarts a job with option to ignore 
                                         errors
 status [<option>] [-a <number>]         Summary of current execution
     -config                             - Show Config Information
     -job <number>                       - Summary of a given job
     -job <number> -c <dbname>           - Show details of container
     -a [<number>]                       - Repeats the command (in <number> 
                                           seconds)
 restore -job <number>                   Restores the database to its state 
                                         prior to the upgrade
 restore all_failed                      Restores all failed jobs to their 
                                         previous states prior to the upgrade
 logs                                    Displays all log locations
 stop -job <number>                      Stops the specified job
 h[ist]                                  Displays the command line history
 /[<number>]                             Executes the command specified from 
                                         the history. The default is the last 
                                         command
 meta                                    Displays Internal latch count
 hwinfo                                  Displays hardware information along
                                         with tools uptime
 fxlist -job <number> [<option>]         Fixup summary
     -c <dbname>                         - Container specific FixUps
     -c <dbname> alter <check> run <yes|no|skip>
                                         - Update Run Configuration
 proceed -job <number>                   Continue a job:
                                         - If waiting, resume AutoUpgrade execution
                                         - If scheduled, optionally alter predefined start time
     -newStartTime [dd/mm/yyyy hh:mm:ss, +<#>h<#>m]
                                         - New start time; if omitted, starts in 1 minute

[oracle@ora26ai autoupgrade]$ /u01/app/oracle/product/23.0.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/autoupgrade/autoupgrade.jar -config /u01/app/oracle/autoupgrade/autoupg.cfg -mode analyze

AutoUpgrade 26.2.260205 launched with default internal options
Processing config file ...
Pluggable database AUTOPDB1 in AUTOUPG is MOUNTED and it will not be processed
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 CDB(s) plus 1 PDB(s) will be analyzed
Type 'help' to list console commands
upg> 
upg> tasks 
+---+--------------+-------------+
| ID|          NAME|         Job#|
+---+--------------+-------------+
|  1|          main|      WAITING|
|  9|Common-Cleaner|TIMED_WAITING|
| 70|    event_loop|TIMED_WAITING|
| 71|       console|     RUNNABLE|
| 72|  queue_reader|      WAITING|
| 74|         cmd-0|      WAITING|
| 75|       StatUpg|      WAITING|
| 76|    event_loop|TIMED_WAITING|
| 78| job_manager-0|      WAITING|
| 82|     exec_loop|      WAITING|
| 88|     exec_loop|      WAITING|
|101| sql-[66ED13] |     RUNNABLE|
+---+--------------+-------------+
upg> 
upg> status

Config

User configuration file    [/u01/app/oracle/autoupgrade/autoupg.cfg]
General logs location      [/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto]
Mode                       [ANALYZE]
Jobs Summary

Total databases in configuration file [2]
Total Non-CDB being processed         [0]
Total Containers being processed      [2]

Jobs finished successfully            [0]
Jobs finished/stopped                 [0]
Jobs in progress                      [1]

Progress
+---+---------------------------------------------------------+
|Job|                                                 Progress|
+---+---------------------------------------------------------+
|100|[|||||||||||||||||                                 ] 33 %|
+---+---------------------------------------------------------+

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|14s ago|Loading database information|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

upg> 
upg> lsj -job 100
Unrecognized cmd: lsj -job 100
upg> 
upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   0
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~0 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
+--------+---------+

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|49s ago|Loading database information|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|59s ago|Loading database information|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27| 0s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27| 0s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   2
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~2 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    99 % |
|PDB$SEED|    99 % |
+--------+---------+

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|10s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   2
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~2 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    99 % |
|PDB$SEED|    99 % |
+--------+---------+

upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|17s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27|35s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~3 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    99 % |
+--------+---------+

upg> 
upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~3 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    99 % |
+--------+---------+

upg> /
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~3 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    100% |
+--------+---------+

upg> /
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~3 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    100% |
+--------+---------+

upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27| 2s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27| 7s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> /
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 100|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  16:42:27| 8s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> status -job 100
Details

Job No           100
Oracle SID       AUTOUPG
Start Time       26/03/06 16:42:27
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
PRECHECKS        ~3 min (RUNNING)

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    100% |
+--------+---------+

upg> /Job 100 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]

Please check the summary report at:
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.html
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log

You can review log file for summary report.

[oracle@ora19c-db autoupgrade]$ cat /u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Fri Mar 06 16:46:07 IST 2026
[Number of Jobs] 1
==========================================
[Job ID] 100
==========================================
[DB Name]                AUTOUPG
[Version Before Upgrade] 19.3.0.0.0
[Version After Upgrade]  23.26.1.0.0
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-03-06 16:42:27
[Duration]      0:03:39
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/100/prechecks/autoupg_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------

As shown in the output above, the SUCCESS message in PRECHECKS phase has confimred that this phase has completed successfully without any issues. This indicates that the database is ready for the upgrade process. You can now proceed with either the fixups phase (if required) or directly run the deploy option to start the upgrade.


Step 6: Run AutoUpgrade Fixups


The fixups mode "-mode fixups" applies the recommended corrections to the database environment so that it is fully prepared for the upgrade process. Once the fixups are completed successfully, you can proceed with the deploy mode to start the actual upgrade.

[oracle@ora19c-db ~]$ /u01/app/oracle/product/23.0.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/autoupgrade/autoupgrade.jar -config /u01/app/oracle/autoupgrade/autoupg.cfg -mode fixups

AutoUpgrade 26.2.260205 launched with default internal options
Processing config file ...
AUTOPDB1 is in MOUNTED state.  It will be opened in READ_WRITE
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 CDB(s) plus 2 PDB(s) will be processed
Type 'help' to list console commands
upg> 
upg> tasks
+--+--------------+-------------+
|ID|          NAME|         Job#|
+--+--------------+-------------+
| 1|          main|      WAITING|
| 9|Common-Cleaner|TIMED_WAITING|
|78|    event_loop|TIMED_WAITING|
|79|       console|     RUNNABLE|
|80|  queue_reader|      WAITING|
|82|         cmd-0|      WAITING|
|83|       StatUpg|      WAITING|
|84|    event_loop|TIMED_WAITING|
|86| job_manager-0|      WAITING|
|90|     exec_loop|      WAITING|
|97| sql-[1005C1] |     RUNNABLE|
+--+--------------+-------------+
upg> 
upg> status

Config

User configuration file    [/u01/app/oracle/autoupgrade/autoupg.cfg]
General logs location      [/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto]
Mode                       [FIXUPS]
Jobs Summary

Total databases in configuration file [3]
Total Non-CDB being processed         [0]
Total Containers being processed      [3]

Jobs finished successfully            [0]
Jobs finished/stopped                 [0]
Jobs in progress                      [1]

Progress
+---+---------------------------------------------------------+
|Job|                                                 Progress|
+---+---------------------------------------------------------+
|102|[|||||||||||||||||||||                             ] 40 %|
+---+---------------------------------------------------------+

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
| 102|AUTOUPG|PRECHECKS|EXECUTING|RUNNING|  03:47:34| 8s ago|Loading database information|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

upg> 
upg> status -job 102
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   0
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~0 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   0
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~0 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   0
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~0 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   0
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~0 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   1
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~1 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   1
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~1 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   1
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~1 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   2
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~2 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> 
upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   2
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~2 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    0  % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> 
upg> /
Details

Job No           102
Oracle SID       AUTOUPG
Start Time       26/03/08 03:47:34
Elapsed (min):   3
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
DISPATCH         <1 min
PRECHECKS        ~3 min (RUNNING)
PREFIXUPS       

Stage-Progress Per Container

+--------+---------+
|Database|PRECHECKS|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    35 % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> Job 102 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]

Please check the summary report at:
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.html
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log

Let's review the logfile.

[oracle@ora19c-db ~]$ cat /u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Sun Mar 08 03:54:45 IST 2026
[Number of Jobs] 1
==========================================
[Job ID] 102
==========================================
[DB Name]                AUTOUPG
[Version Before Upgrade] 19.3.0.0.0
[Version After Upgrade]  23.26.1.0.0
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-03-08 03:47:34
[Duration]      0:03:37
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prechecks/autoupg_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    PREFIXUPS
[Status]        SUCCESS
[Start Time]    2026-03-08 03:51:11
[Duration]      0:03:34
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prefixups
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/102/prefixups/prefixups.html

The output above confirms that the PREFIXUPS phase has completed successfully without any issues. You can now proceed with the deploy phase to start the actual database upgrade.


Step 7: Run the Deploy Phase.

This This command initiates the AutoUpgrade deployment, which performs the actual database upgrade based on the parameters defined in the configuration file. You can monitor the upgrade progress through the AutoUpgrade console and generated log files.

[oracle@ora26ai ~]$ /u01/app/oracle/product/23.0.0/dbhome_1/jdk/bin/java -jar /u01/app/oracle/autoupgrade/autoupgrade.jar -config /u01/app/oracle/autoupgrade/autoupg.cfg -mode deploy
 
AutoUpgrade 26.2.260205 launched with default internal options
Processing config file ...
+--------------------------------+
Starting AutoUpgrade execution |
+--------------------------------+
1 CDB(s) plus 2 PDB(s) will be processed
Type 'help' to list console commands
upg> -------------------------------------------------
job 103 has not shown progress in last 39 minutes
database [AUTOUPG]
Stage    [DBUPGRADE]
Operation[EXECUTING]
Status   [RUNNING]
Info     [23%Upgraded CDB$ROOT]
[Review log files for further information]
-----------------------------------------------
Logs: /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
-----------------------------------------------
upg> 
upg> tasks
+----+----------------------------+-------------+
|  ID|                        NAME|         Job#|
+----+----------------------------+-------------+
|   1|                        main|      WAITING|
|   9|              Common-Cleaner|TIMED_WAITING|
|  77|                  event_loop|TIMED_WAITING|
|  78|                     console|     RUNNABLE|
|  79|                queue_reader|      WAITING|
|  81|                       cmd-0|      WAITING|
|  82|                     StatUpg|      WAITING|
|  83|                  event_loop|TIMED_WAITING|
|  85|               job_manager-0|      WAITING|
|  89|                   exec_loop|      WAITING|
|  98|                   exec_loop|      WAITING|
|1292|monitor_AUTOUPG-CDB$ROOT_103|TIMED_WAITING|
|1294|             catctl_CDB$ROOT|      WAITING|
|1295|      abort_monitor_CDB$ROOT|TIMED_WAITING|
|1296|                   Thread-31|     RUNNABLE|
+----+----------------------------+-------------+
upg> 
upg> status

Config

User configuration file    [/u01/app/oracle/autoupgrade/autoupg.cfg]
General logs location      [/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto]
Mode                       [DEPLOY]
Jobs Summary

Total databases in configuration file [3]
Total Non-CDB being processed         [0]
Total Containers being processed      [3]

Jobs finished successfully            [0]
Jobs finished/stopped                 [0]
Jobs in progress                      [1]

Progress
+---+---------------------------------------------------------+
|Job|                                                 Progress|
+---+---------------------------------------------------------+
|103|[||||||||||||||||||||||||                          ] 46 %|
+---+---------------------------------------------------------+

upg> 
upg> lsj
+----+-------+---------+---------+-------+----------+------------+--------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|     UPDATED|             MESSAGE|
+----+-------+---------+---------+-------+----------+------------+--------------------+
| 103|AUTOUPG|DBUPGRADE|EXECUTING|RUNNING|  04:19:38|!!!2396s ago|23%Upgraded CDB$ROOT|
+----+-------+---------+---------+-------+----------+------------+--------------------+
Total jobs 1

upg> status -job 103
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   58
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        ~50 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+---------+
|Database|DBUPGRADE|
+--------+---------+
|CDB$ROOT|    23 % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   58
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        ~51 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+---------+
|Database|DBUPGRADE|
+--------+---------+
|CDB$ROOT|    23 % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   59
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        ~51 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+---------+
|Database|DBUPGRADE|
+--------+---------+
|CDB$ROOT|    23 % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   59
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        ~51 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+---------+
|Database|DBUPGRADE|
+--------+---------+
|CDB$ROOT|    23 % |
|PDB$SEED|    0  % |
|AUTOPDB1|    0  % |
+--------+---------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   183
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        ~176 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+---------+
|Database|DBUPGRADE|
+--------+---------+
|CDB$ROOT|    100% |
|PDB$SEED|    100% |
|AUTOPDB1|    100% |
+--------+---------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   183
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         ~0 min (RUNNING)
POSTCHECKS      
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

The Stage DISPATCH does not have any data to show
upg> 
upg> 
upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   183
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         <1 min
POSTCHECKS       <1 min
DISPATCH         ~0 min (RUNNING)
POSTFIXUPS      
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

The Stage DISPATCH does not have any data to show
upg> lsj
+----+-------+----------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|     STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+----------+---------+-------+----------+-------+----------------+
| 103|AUTOUPG|POSTFIXUPS|EXECUTING|RUNNING|  04:19:38| 0s ago|Executing fixups|
+----+-------+----------+---------+-------+----------+-------+----------------+
Total jobs 1

upg> 
upg> status -job 103
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   183
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postfixups
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         <1 min
POSTCHECKS       <1 min
DISPATCH         <1 min
POSTFIXUPS       ~0 min (RUNNING)
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+----------+
|Database|POSTFIXUPS|
+--------+----------+
|CDB$ROOT|     0  % |
|PDB$SEED|     0  % |
|AUTOPDB1|     0  % |
+--------+----------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   191
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postfixups
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         <1 min
POSTCHECKS       <1 min
DISPATCH         <1 min
POSTFIXUPS       ~8 min (RUNNING)
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+----------+
|Database|POSTFIXUPS|
+--------+----------+
|CDB$ROOT|     0  % |
|PDB$SEED|     33 % |
|AUTOPDB1|     0  % |
+--------+----------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   201
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postfixups
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         <1 min
POSTCHECKS       <1 min
DISPATCH         <1 min
POSTFIXUPS       ~17 min (RUNNING)
POSTUPGRADE     
SYSUPDATES      

Stage-Progress Per Container

+--------+----------+
|Database|POSTFIXUPS|
+--------+----------+
|CDB$ROOT|     100% |
|PDB$SEED|     67 % |
|AUTOPDB1|     67 % |
+--------+----------+

upg> /
Details

Job No           103
Oracle SID       AUTOUPG
Start Time       26/03/08 04:19:38
Elapsed (min):   201
End time:        N/A

Logfiles

Logs Base:    /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG
Job logs:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103
Stage logs:   /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postupgrade
TimeZone:     /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/temp
Remote Dirs:  

Stages
SETUP            <1 min
GRP              <1 min
PREUPGRADE       <1 min
PRECHECKS        3 min
PREFIXUPS        3 min
DRAIN            <1 min
DBUPGRADE        176 min
DISPATCH         <1 min
POSTCHECKS       <1 min
DISPATCH         <1 min
POSTFIXUPS       17 min
POSTUPGRADE      ~0 min (RUNNING)
SYSUPDATES      

Stage-Progress Per Container

The Stage POSTUPGRADE does not have any data to show
upg> 
upg> status

Config

User configuration file    [/u01/app/oracle/autoupgrade/autoupg.cfg]
General logs location      [/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto]
Mode                       [DEPLOY]
Jobs Summary

Total databases in configuration file [3]
Total Non-CDB being processed         [0]
Total Containers being processed      [3]

Jobs finished successfully            [0]
Jobs finished/stopped                 [0]
Jobs in progress                      [1]

Progress
+---+---------------------------------------------------------+
|Job|                                                 Progress|
+---+---------------------------------------------------------+
|103|[|||||||||||||||||||||||||||||||||||||||||||       ] 85 %|
+---+---------------------------------------------------------+

upg> lsj
+----+-------+-----------+---------+-------+----------+-------+----------+
|Job#|DB_NAME|      STAGE|OPERATION| STATUS|START_TIME|UPDATED|   MESSAGE|
+----+-------+-----------+---------+-------+----------+-------+----------+
| 103|AUTOUPG|POSTUPGRADE|EXECUTING|RUNNING|  04:19:38|22s ago|Restarting|
+----+-------+-----------+---------+-------+----------+-------+----------+
Total jobs 1

upg> 
upg> Job 103 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

---- Drop GRP at your convenience once you consider it is no longer needed ----
Drop GRP from AUTOUPG: drop restore point AUTOUPGRADE_9212_AUTOUPG193000


Please check the summary report at:
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.html
/u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log
 
Let’s review the global directory log file to verify the status of each AutoUpgrade phase. The output shows that all stages of the upgrade process have completed successfully.

[oracle@ora19c-db ~]$ cat /u01/app/oracle/cfgtoollogs/upgrade/cfgtoollogs/upgrade/auto/status/status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Sun Mar 08 07:41:42 IST 2026
[Number of Jobs] 1
==========================================
[Job ID] 103
==========================================
[DB Name]                AUTOUPG
[Version Before Upgrade] 19.3.0.0.0
[Version After Upgrade]  23.26.1.0.0
------------------------------------------
[Stage Name]    GRP
[Status]        SUCCESS
[Start Time]    2026-03-08 04:19:38
[Duration]      0:00:04
[Detail]        Please drop the following GRPs after Autoupgrade completes:
                 AUTOUPGRADE_9212_AUTOUPG193000
------------------------------------------
[Stage Name]    PREUPGRADE
[Status]        SUCCESS
[Start Time]    2026-03-08 04:19:42
[Duration]      0:00:00
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/preupgrade
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-03-08 04:19:42
[Duration]      0:03:27
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/prechecks
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/prechecks/autoupg_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    PREFIXUPS
[Status]        SUCCESS
[Start Time]    2026-03-08 04:23:09
[Duration]      0:03:20
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/prefixups
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/prefixups/prefixups.html
------------------------------------------
[Stage Name]    DRAIN
[Status]        SUCCESS
[Start Time]    2026-03-08 04:26:30
[Duration]      0:00:32
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/drain
------------------------------------------
[Stage Name]    DBUPGRADE
[Status]        SUCCESS
[Start Time]    2026-03-08 04:27:03
[Duration]      2:56:09
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade
------------------------------------------
[Stage Name]    POSTCHECKS
[Status]        SUCCESS
[Start Time]    2026-03-08 07:23:13
[Duration]      0:00:03
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postchecks
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postchecks/autoupg_postupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    POSTFIXUPS
[Status]        SUCCESS
[Start Time]    2026-03-08 07:23:18
[Duration]      0:17:48
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postfixups
[Detail]        /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postfixups/postfixups.html
------------------------------------------
[Stage Name]    POSTUPGRADE
[Status]        SUCCESS
[Start Time]    2026-03-08 07:41:07
[Duration]      0:00:34
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/postupgrade
------------------------------------------
[Stage Name]    SYSUPDATES
[Status]        SUCCESS
[Start Time]    2026-03-08 07:41:41
[Duration]      0:00:00
[Log Directory] /u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/sysupdates
------------------------------------------
Summary:/u01/app/oracle/autoupgrade/upgrade_logs/AUTOUPG/103/dbupgrade/upg_summary.log

The SUCCESS status for all stages confirms that the database upgrade using AutoUpgrade has completed successfully without any issues. You can now proceed with post-upgrade verification and validation tasks.


Step 8: Validations


Let’s connect to the database by setting the environment variables for the Oracle 26ai Home.

[oracle@ora19c-db ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Mar 8 07:43:51 2026
Version 19.3.0.0.0

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

Connected to an idle instance.

SQL> exit
Disconnected

[oracle@ora19c-db ~]$ ps -ef | grep pmon
oracle     45728    4716  0 07:41 ?        00:00:00 ora_pmon_AUTOUPG
oracle     46359    5468  0 07:43 pts/0    00:00:00 grep --color=auto pmon


[oracle@ora19c-db ~]$ cat /etc/oratab | grep -v "#"

AUTOUPG:/u01/app/oracle/product/23.0.0/dbhome_1:N
[oracle@ora19c-db ~]$ . oraenv
ORACLE_SID = [AUTOUPG] ? 
The Oracle base remains unchanged with value /u01/app/oracle

[oracle@ora19c-db ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.26.1.0.0 - Production on Sun Mar 8 07:48:21 2026
Version 23.26.1.0.0

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

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> @dt

NAME  OPEN_MODE  DATABASE_ROLE CONTROLFIL
-------- ----------- -------------  ----------
AUTOUPG  READ WRITE  PRIMARY CURRENT

SQL> select banner from v$version;

BANNER
---------------------------------------------------------------------------
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production

🔍 Let’s review the database registry components to verify their version and status after the upgrade.
  
SQL> col comp_id for a12
SQL> col comp_name for a45
SQL> col version for a12
SQL> col status for a12
SQL> select comp_id,comp_name,status,version from dba_registry;


SQL> show pdbs

CON_ID  CON_NAME  OPEN MODE   RESTRICTED
------ --------  ----------- ----------
 2  PDB$SEED  READ ONLY   NO
 3  PDB1      READ WRITE  NO


7. Post-Upgrade Tasks

After the upgrade process completes, several post-upgrade tasks must be performed to finalize the upgrade and validate database functionality.

Key post-upgrade activities include:

  • Recompiling invalid database objects

  • Running post-upgrade validation scripts

  • Checking database alert logs

  • Verifying database version and compatibility parameters

  • Testing application connectivity

  • Validating listener services

  • Updating database statistics

These steps ensure the upgraded database environment operates correctly and that applications can connect without issues.


8. Conclusion

Upgrading Oracle databases is a critical activity that ensures systems remain secure, supported, and capable of utilizing the latest technological advancements. The upgrade from Oracle Database 19c to Oracle AI Database 26ai provides organizations with access to improved performance, enhanced automation, and advanced AI-driven database capabilities.

By following a structured upgrade approach that includes proper planning, validation, execution, and post-upgrade verification, database administrators can successfully upgrade their database environments while minimizing risk and downtime.

This guide demonstrates a practical implementation of the Oracle database upgrade process and provides a clear reference for DBAs looking to perform similar upgrade operations in real-world environments.


9. Risks and Mitigation

Potential Risks

Upgrade Failure
Unexpected errors during upgrade execution may interrupt the process.

Application Compatibility Issues
Applications may rely on deprecated database features.

Insufficient Storage
Lack of disk space may cause installation or upgrade failures.

Invalid Database Objects
Objects may become invalid after upgrade.

Configuration Conflicts
Old database parameters may not be compatible with the new version.


Mitigation Strategies

  • Perform a full RMAN backup before starting the upgrade.

  • Test the upgrade process in a staging environment first.

  • Validate application compatibility before production upgrade.

  • Monitor upgrade logs carefully during execution.

  • Run Oracle post-upgrade scripts to fix invalid objects.


10. Future Enhancements

After upgrading to Oracle AI Database 26ai, organizations can further enhance their database environment by implementing additional features and improvements.

Possible future enhancements include:

  • Implementing Oracle Data Guard for disaster recovery

  • Migrating storage to Oracle ASM for improved performance

  • Deploying Oracle RAC for high availability

  • Automating database maintenance tasks

  • Integrating AI-powered analytics features introduced in Oracle 26ai

  • Implementing advanced monitoring and performance tuning strategies

These enhancements help organizations maximize the benefits of the upgraded database platform while ensuring high availability, scalability, and performance.