In this article, I'll walk you through the steps I used to
patch an Oracle Database 19c environment from version 19.29 to 19.31 following
Oracle's April 2026 Quarterly Release Update.
Quarterly patching is a regular responsibility for Oracle
DBAs, and while the version numbers may change, the underlying process remains
largely consistent across Oracle 19c Release Updates. This guide is intended to
serve as a practical reference that you can use during your own patching
activities.
Note: Never apply a patch directly to a Production
environment without first validating it in Development or Test. Thorough
testing helps identify potential issues before they impact business-critical
systems.
Requirements
Before proceeding, ensure that the following prerequisites
are met:
- Oracle
Database 19c (Windows x86-64)
- Active
My Oracle Support (MOS) account
- Appropriate
access to ORACLE_HOME and ORACLE_BASE directories
- Minimum
12 GB free disk space in Oracle Home
- WinSCP
or equivalent file transfer utility
- Scheduled
maintenance window and approved downtime
Step 1: Download the Patch and OPatch Utility
Log in to Oracle
Support and download the following:
- Patch
file: 38818049 → p38818049_190000_MSWIN-x86-64.zip
- OPatch
utility: 6880880 → p6880880_190000_MSWIN -x86-64.zip
Steps to download: Select Patches & Updates →
enter patch number → select platform Windows x86-64 → download
both files and review the README.
Step 2: Check and Update OPatch
On the server, check your current OPatch version:
|
cd
%ORACLE_HOME%/OPatch opatch
version |
You need version 12.2.0.1.48 or higher. If it's
older, update it:
|
cd
%ORACLE_HOME% ren OPatch
OPatch_backup1 robocopy
p6880880_190000_MSWIN -x86-64.zip %ORACLE_HOME% cd
%ORACLE_HOME% unzip
p6880880_190000_MSWIN -x86-64.zip |
Step 3: Run Pre-checks
Before applying the patch, check for conflicts with existing
patches:
|
C:\Users\Administrator>cd
C:\software\oracle_patch_19.31\38818049 C:\software\oracle_patch_19.31\38818049>D:\oracle\product\19.3.0\dbhome_1\OPatch\opatch
prereq CheckConflictAgainstOHWithDetail -ph ./ Oracle
Interim Patch Installer version 12.2.0.1.51 Copyright (c)
2026, Oracle Corporation. All rights reserved. PREREQ
session Oracle
Home :
D:\oracle\product\19.3.0\dbhome_1 Central
Inventory : C:\Program Files\Oracle\Inventory from : OPatch
version : 12.2.0.1.51 OUI
version : 12.2.0.7.0 Log file
location : D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-06-06_19-40-37PM_1.log Invoking
prereq "checkconflictagainstohwithdetail" Prereq
"checkConflictAgainstOHWithDetail" passed. OPatch
succeeded. |
As we see "OPatch succeeded", we are good to
go. If there are conflicts, resolve them before proceeding.
Step 4: Stop the Database and Listener
|
sqlplus / as
sysdba SQL>
shutdown immediate SQL> exit lsnrctl stop |
Verify all services are completely down before moving to the
next step.
Step 5: Clean Up Inactive Patches (Optional but
Recommended)
This frees up Oracle Home space before applying the new
patch:
|
cd
%ORACLE_HOME%/OPatch ./opatch util
listOrderedInactivePatches ./opatch util
deleteInactivePatches |
Step 6: Check Available Disk Space
Do not proceed if space is insufficient in oracle home
Step 7: Apply the Patch
|
C:\Software\oracle_patch_19.31\38818049>D:\oracle\product\19.3.0\dbhome_1\OPatch\opatch
apply Oracle
Interim Patch Installer version 12.2.0.1.51 Copyright (c)
2026, Oracle Corporation. All rights
reserved. Oracle
Home :
D:\oracle\product\19.3.0\dbhome_1 Central
Inventory : C:\Program Files\Oracle\Inventory from : OPatch
version : 12.2.0.1.51 OUI
version : 12.2.0.7.0 Log file
location :
D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-06-04_06-01-03AM_1.log Verifying
environment and performing prerequisite checks... -------------------------------------------------------------------------------- Start OOP by
Prereq process. Launch OOP... Oracle
Interim Patch Installer version 12.2.0.1.51 Copyright (c)
2026, Oracle Corporation. All rights
reserved. Oracle
Home :
D:\oracle\product\19.3.0\dbhome_1 Central
Inventory : C:\Program Files\Oracle\Inventory from : OPatch
version : 12.2.0.1.51 OUI
version : 12.2.0.7.0 Log file
location :
D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-06-04_06-04-26AM_1.log Verifying
environment and performing prerequisite checks... OPatch
continues with these patches:
38818049 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
= 'D:\oracle\product\19.3.0\dbhome_1') Is the local
system ready for patching? [y|n] y User
Responded with: Y Backing up
files... Applying
interim patch '38818049' to OH 'D:\oracle\product\19.3.0\dbhome_1' ApplySession:
Optional component(s) [ oracle.tomcat.crs, 19.0.0.0.0 ] , [ oracle.has.cfs,
19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.rdbms.ic,
19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.network.cman,
19.0.0.0.0 ] , [ oracle.has.deconfig, 19.0.0.0.0 ] , [ oracle.network.gsm,
19.0.0.0.0 ] , [ oracle.assistants.asm, 19.0.0.0.0 ] , [ oracle.wlm.dbwlm,
19.0.0.0.0 ] , [ oracle.rhp.crs, 19.0.0.0.0 ] , [ oracle.has.cvu, 19.0.0.0.0
] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [
oracle.usm, 19.0.0.0.0 ] , [ oracle.ons.daemon, 19.0.0.0.0 ] , [
oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [
oracle.assistants.usm, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [
oracle.options.olap.awm, 19.0.0.0.0 ] , [ oracle.has.crs, 19.0.0.0.0 ] not present in the Oracle Home or a higher
version is found. Patching
component oracle.has.common.cvu, 19.0.0.0.0... Patching
component oracle.has.rsf, 19.0.0.0.0... Patching
component oracle.assistants.server, 19.0.0.0.0... Patching
component oracle.ons, 19.0.0.0.0... Patching
component oracle.rdbms.plsql, 19.0.0.0.0... Patching
component oracle.rdbms.util, 19.0.0.0.0... Patching
component oracle.sqlplus.ic, 19.0.0.0.0... Patching
component oracle.sdo.locator.jrf, 19.0.0.0.0... Patching
component oracle.perlint, 5.28.1.0.0... Patching
component oracle.swd.oui.core.min, 12.2.0.7.0... Patching
component oracle.rhp.common, 19.0.0.0.0... Patching
component oracle.sqlplus, 19.0.0.0.0... Patching
component oracle.dbjava.jdbc, 19.0.0.0.0... Patching
component oracle.network.listener, 19.0.0.0.0... Patching
component oracle.odbc.ic, 19.0.0.0.0... Patching
component oracle.rdbms.rman, 19.0.0.0.0... Patching
component oracle.dbjava.ucp, 19.0.0.0.0... Patching
component oracle.perlint.modules, 5.28.1.0.0... Patching
component oracle.precomp.common.core, 19.0.0.0.0... Patching
component oracle.oracore.rsf, 19.0.0.0.0... Patching
component oracle.ntoledb.odp_net_2, 19.0.0.0.0... Patching
component oracle.has.db, 19.0.0.0.0... Patching
component oracle.ntoramts, 19.0.0.0.0... Patching
component oracle.marvel, 19.0.0.0.0... Patching
component oracle.xdk.parser.java, 19.0.0.0.0... Patching
component oracle.network.client, 19.0.0.0.0... Patching
component oracle.blaslapack, 19.0.0.0.0... Patching
component oracle.tfa.db, 19.0.0.0.0... Patching
component oracle.ctx, 19.0.0.0.0... Patching
component oracle.rdbms.hsodbc, 19.0.0.0.0... Patching
component oracle.ldap.rsf, 19.0.0.0.0... Patching
component oracle.assistants.deconfig, 19.0.0.0.0... Patching
component oracle.sqlj.sqljruntime, 19.0.0.0.0... Patching
component oracle.ldap.owm, 19.0.0.0.0... Patching
component oracle.duma, 19.0.0.0.0... Patching
component oracle.precomp.lang, 19.0.0.0.0... Patching
component oracle.ntoledb, 19.0.0.0.0... Patching
component oracle.rdbms.rsf, 19.0.0.0.0... Patching
component oracle.rdbms.install.common, 19.0.0.0.0... Patching
component oracle.ldap.security.osdt, 19.0.0.0.0... Patching
component oracle.sdo, 19.0.0.0.0... Patching
component oracle.rdbms.rsf.ic, 19.0.0.0.0... Patching
component oracle.wwg.plsql, 19.0.0.0.0... Patching
component oracle.rdbms.lbac, 19.0.0.0.0... Patching
component oracle.oraolap, 19.0.0.0.0... Patching
component oracle.precomp.rsf, 19.0.0.0.0... Patching
component oracle.ntoledbolap, 19.0.0.0.0... Patching
component oracle.assistants.acf, 19.0.0.0.0... Patching
component oracle.jdk, 1.8.0.201.0... Patching
component oracle.javavm.server, 19.0.0.0.0... Patching
component oracle.precomp.common, 19.0.0.0.0... Patching
component oracle.network.rsf, 19.0.0.0.0... Patching
component oracle.ovm, 19.0.0.0.0... Patching
component oracle.install.deinstalltool, 19.0.0.0.0... Patching
component oracle.rdbms.oci, 19.0.0.0.0... Patching
component oracle.rsf, 19.0.0.0.0... Patching
component oracle.clrintg.ode_net_2, 19.0.0.0.0... Patching
component oracle.nlsrtl.rsf, 19.0.0.0.0... Patching
component oracle.xdk.server, 19.0.0.0.0... Patching
component oracle.rdbms.install.plugins, 19.0.0.0.0... Patching
component oracle.ctx.atg, 19.0.0.0.0... Patching
component oracle.javavm.client, 19.0.0.0.0... Patching
component oracle.oraolap.dbscripts, 19.0.0.0.0... Patching
component oracle.rdbms.deconfig, 19.0.0.0.0... Patching
component oracle.dbjava.ic, 19.0.0.0.0... Patching
component oracle.rdbms.dv, 19.0.0.0.0... Patching
component oracle.aspnet_2, 19.0.0.0.0... Patching
component oracle.ldap.client, 19.0.0.0.0... Patching
component oracle.usm.deconfig, 19.0.0.0.0... Patching
component oracle.dbdev, 19.0.0.0.0... Patching
component oracle.ons.ic, 19.0.0.0.0... Patching
component oracle.mgw.common, 19.0.0.0.0... Patching
component oracle.xdk, 19.0.0.0.0... Patching
component oracle.oracler.server, 19.0.0.0.0... Patching
component oracle.has.common, 19.0.0.0.0... Patching
component oracle.xdk.rsf, 19.0.0.0.0... Patching
component oracle.rdbms.dbscripts, 19.0.0.0.0... Patching
component oracle.rdbms.olap, 19.0.0.0.0... Patching
component oracle.rdbms, 19.0.0.0.0... Patching
component oracle.sdo.locator, 19.0.0.0.0... Patching
component oracle.rdbms.scheduler, 19.0.0.0.0... Patching
component oracle.xdk.xquery, 19.0.0.0.0... Patching
component oracle.nlsrtl.rsf.lbuilder, 19.0.0.0.0... Patching
component oracle.network.aso, 19.0.0.0.0... Patch
38818049 successfully applied. Sub-set patch
[38111211] has become inactive due to the application of a super-set patch
[38818049]. Please refer
to Doc ID 2161861.1 for any possible further required actions. Log file
location:
D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-06-04_06-04-26AM_1.log OPatch
succeeded. |
Watch the output carefully. You should see success messages
for each component. The full process typically takes 20–30 minutes.
Sample successful output as above.
Step 8: Start the Database and Run DataPatch
Start the database first:
|
Start oracle
services from services windows sqlplus / as
sysdba |
Then run DataPatch to register the patch inside the database
dictionary:
|
C:\Software\oracle_patch_19.31\38818049>D:\oracle\product\19.3.0\dbhome_1\OPatch\datapatch
-verbose SQL Patching
tool version 19.31.0.0.0 Production on Thu Jun 4 06:14:10 2026 Copyright (c)
2012, 2026, Oracle. All rights
reserved. Log file for
this invocation:
D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\sqlpatch\sqlpatch_26776_2026_06_04_06_14_10\sqlpatch_invocation.log Connecting to
database...OK Gathering
database info...done Bootstrapping
registry and package to current versions...done Determining
current state...done Current state
of interim SQL patches: No interim patches found Current state
of release update SQL patches: Binary registry: 19.31.0.0.0 Release_Update 260515000147:
Installed SQL registry: Applied 19.29.0.0.0 Release_Update
251030030715 successfully on 12-NOV-25 11.51.37.390000 AM Adding
patches to installation queue and performing prereq checks...done Installation
queue: No interim patches need to be rolled back Patch 38818049 (Windows Database Bundle
Patch : 19.31.0.0.260421(REL-APR260421) (38818049)): Apply from 19.29.0.0.0 Release_Update
251030030715 to 19.31.0.0.0 Release_Update 260515000147 No interim patches need to be applied Installing
patches... Patch
installation complete. Total patches
installed: 1 Validating
logfiles...done Patch
38818049 apply: SUCCESS logfile:
D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\sqlpatch\38818049\28605540/38818049_apply_ORCL_2026Jun04_06_31_42.log
(no errors) SQL Patching
tool complete on Thu Jun 4 06:32:32
2026 |
This step is mandatory — without it the patch is applied at
the binary level but not registered in the database.
Step 9: Verify the Patch
Step 10. Compile invalid objects
|
sqlplus / as
sysdba SQL>@?/rdbms/admin/utlrp.sql SQL> exit |
This concludes the database patching process on windows.