Mir Sayeed Hassan – Oracle Blog

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

Oracle 19c Standalone Database Patching high level steps: Upgrade from 19.3 to 19.20.

Posted by Mir Sayeed Hassan on March 22nd, 2026

Oracle 19c Standalone Database Patching high level steps: Upgrade from 19.3 to 19.20.

Steps to Perform Before Patch Implementation

Here demonstrates the complete patching process across three phases:

  • Pre-Patch

  • Patching 

  • Post-Patch

Let us start with Pre-patch

Check the status of database and its version.

SQL> select name, open_mode, database_role, version from V$database, v$instance;

NAME |  OPEN_MODE |    DATABASE_ROLE     |  VERSION
 - - - - - - - - - — - — - - - — - -  - - - - - - -
MIRDB    OPEN         READ WRITE             19.3.0

Or you can also issue the database version.

SQL> select banner_full from v$version; 

BANNER_FULL 
----------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

Verify the current Patch level

SQL> select TO_CHAR(action_time, 'YYYY-MM-DD') AS action_time, ACTION, STATUS, DESCRIPTION, PATCH_ID from sys.dba_registry_sqlpatch order by action_time; 

ACTION_TIME ACTION STATUS DESCRIPTION PATCH_ID 
---------- --------------- ------------------------- —————————————————————————————
2021-12-23 APPLY SUCCESS Database Release Update : 19.3.0.0.190416 (29517242) 29517242 

Verify the existing patches applied by using the OS Level

[oracle@mirdb1 OPatch]$ ./opatch lspatches 

29517242;Database Release Update : 19.3.0.0.190416 (29517242) 

Verify the opatch utility version

[oracle@mirdb1 OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.17

Download the require Patch and Database Patch from the oracle support website.

Note: login to www.support.oracle.com, goto patches and updates, then goto search by patch number and OS Version and here you have to give the patch number to download.

OPatch Number : 6880880 is opatch version that is 12.2.0.1.39
DB Patch Number: 35320081 is patch version that is 19.20.0.0 

Ensure Oracle Home and Inventory are backed up prior to apply the patches.

[oracle@mirdb1 dbhome_1]$  tar -pcvf /u01/dbbackup/dbbackup.tar dbhome_1
[oracle@mirdb1 dbhome_1]$ cp -R inventory
/u01/dbbackup

Perform a full database backup using RMAN.

RMAN>backup as compressed backupset database include current controlfile plus archivelog;

Verify the Invalid Objects from Database.

SQL> select * from dba_objects where status = ‘INVALID’;
---------- --------------- -------------------------——————
5

Place the downloaded patches into the folder at OS Level and unzip the Database Patch (RU).

[root@mirdb1 ~]# mkdir -p /u01/patches/
[root@mirdb1 ~]# cd /u01/patches/
[root@mirdb1 patches]# ls -l
total 3042520

-rwxr-x---. 1 oracle oinstall 2990370786 Mar 20 14:47 p35320081 _190000_Linux-x86-64.zip
-rwxr-x---. 1 oracle oinstall 125167420 Mar 20 14:47 p6880880_190000_Linux-x86-64.zip

Rename old OPatch directory to backup

mv OPATCH OPATCH_MAR_20_2026

Unzip OPatch to Oracle_home

To apply the OPatch, Just unzip the OPatch in Oracle_Home directory.

[oracle@mirdb1 patches]$ unzip p6880880_190000_Linux-x86-64.zip -d /u01/app/oracle/product/19.0.0.0/dbhome_1/ 

Check the OPatch version applied.

[oracle@oraclelab1 OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.39

Now unzip the RU Patch 

[root@mirdb1 ~]# mkdir -p /u01/patches/
[root@mirdb1 ~]# cd /u01/patches/
[root@mirdb1 patches]# ls -l
[root@mirdb1 patches]# unzip p6880880_190000_Linux-x86-64.zip

Now run the prerequisite conflict check from patch folder which you have done the unzip

[35320081]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ 

Oracle Interim Patch Installer version 12.2.0.1.39
Copyright (c) 2023, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /u01/app/oracle/product/19.0.0.0/dbhome_1
Central Inventory : /u01/app/oraInventory 

from : /u01/app/oracle/product/19.0.0.0/dbhome_1/oraInst.loc OPatch version : 12.2.0.1.39
OUI version : 12.2.0.7.0 

3 

Log file location : /u01/app/oracle/product/19.0.0.0/dbhome_1/cfgtoollogs/opatch/opatch2023-09-17_15-38-56PM_1.log Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed. 

OPatch succeeded.

Start the RU Patching.

You have to shutdown the database and its listener.

SQL> Shutdown immediate;
[oracle@mirdb1 ~]$ lsnrctl stop 

Note: Incase if you are using the other than the default listener name, you have to specify the given listener name correctly.

Set the OPatch Path

[oracle@mirdb1 ~]$ export PATH=$ORACLE_HOME/OPatch:$PATH

Verify 

which opatch

[oracle@mirdb1 ~]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch
Now start applying the Patch with apply.
[oracle@mirdb1 ~]$ cd /u01/patches/
[oracle@mirdb1 35320081]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch apply 

Oracle Interim Patch Installer version 12.2.0.1.39
Copyright (c) 2023, Oracle Corporation. All rights reserved.
Oracle Home : /u01/app/oracle/product/19.0.0.0/dbhome_1
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/19.0.0.0/dbhome_1/oraInst.loc
OPatch version : 12.2.0.1.39
OUI version : 12.2.0.7.0 

Log file location : /u01/app/oracle/product/19.0.0.0/dbhome_1/cfgtoollogs/opatch/opatch2023-09-17_17-53-13PM_1.log Verifying environment and performing prerequisite checks... 

OPatch continues with these patches:
35320081 

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/product/19.0.0.0/dbhome_1')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Patching component oracle.mgw.common, 19.0.0.0.0... www.linkedin.com/in/mohammed-ishaq-5aab95155 Patching component oracle.odbc, 19.0.0.0.0...
Patching component oracle.precomp.lang, 19.0.0.0.0...
Patching component oracle.precomp.common, 19.0.0.0.0...
Patching component oracle.jdk, 1.8.0.201.0...
Patch 35320081 successfully applied.
Sub-set patch [29517242] has become inactive due to the application of a super-set patch [35320081].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /u01/app/oracle/product/19.0.0.0/dbhome_1/cfgtoollogs/opatch/opatch2023-09-17_17-53-13PM_1.log 

OPatch succeeded. 

POST PATCH

Post Patch 

Verify the all the patches which is applied.

[oracle@mirdb1 35320081]$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch lspatches
35320081;Database Release Update : 19.20.0.0.230718 (35320081)
OPatch succeeded.

Now Start the database & start the listener.

SQL> Startup;
[oracle@mirdb1 ~]$ lsnrctl start 

Check the database version.

SQL> select banner_full from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.20.0.0.0

Start running the Database Datapatch Verbose.

Note: This is very important as the database might contain pluggable database in it., therefore it will applied to all the pluggable database which will be exist in the container database.

[oracle@mirdb1 OPatch]$ ./datapatch -verbose


SQL Patching tool version 19.20.0.0.0 Production on Sun Sep 17 18:54:16 2023
Copyright (c) 2012, 2023, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_28669_2023_09_17_18_54_16/sqlpatch_invocation.log 

Connecting to database...OK
Gathering database info...done
Bootstrapping registry and package to current versions...done 
———————————————
Determining current state...done 

Installing patches... 

Patch installation complete. Total patches installed: 1
Validating logfiles...done
Patch 35320081 apply: SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35320081/25314491/35320081_apply_DEVDB_2023Sep17_18_58_20.log (no errors) SQL Patching tool complete on Sun Sep 17 19:33:55 2023

Verify the patches applied in database by running the below query.

SQL> Select TO_CHAR(action_time, 'YYYY-MM-DD') AS action_time, action, status, description, patch_id from sys.dba_registry_sqlpatch order by action_time;

ACTION_TIM ACTION STATUS DESCRIPTION PATCH_ID
---------- --------------- ------------------------- —————————————————————————————————
2021-12-23 APPLY SUCCESS Database Release Update : 19.3.0.0.190416 (29517242)
29517242 2023-09-17 APPLY SUCCESS Database Release Update : 19.20.0.0.230718 (35320081)
35320081

Verify the INVALID Objects from Database.

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

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

Note: In-case if you see any of the Invalid objects exist after applying the patch., Run the Invalid compile script to validate.

SQL>@ORACLE_HOME/rdbms/admin/utilrp.sql;

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