Oracle Database 19c remains one of the most widely used enterprise database platforms, and keeping it updated with the latest Release Updates (RU) is essential for security, performance, and long-term stability. In this guide, we’ll walk through the complete Oracle 19.31 patching process, upgrading from Oracle 19.28 to Oracle 19.31 using Patch 39034528 in a real production environment.
Oracle Grid Infrastructure 19.32 Release Update (RU) Patching Guide – Patch 39467003
Oracle Database 19.32 Release Update (RU) Patching Guide – Patch 39472050
Why Upgrade to Oracle 19.31?
Oracle 19.31 Release Update (RU) introduces important security fixes, bug resolutions, and performance improvements. Staying current with Oracle’s quarterly updates ensures:
- Improved database security
- Critical vulnerability fixes
- Enhanced database stability
- Better compatibility with enterprise workloads
- Long-term Oracle support compliance
For DBAs managing mission-critical systems, Oracle 19.31 patching is not optional—it’s essential.
Pre-Patching Environment Check
Before starting, verify your current Oracle patch level:
$ opatch lspatches
37960098;Database Release Update : 19.28.0.0.250715
29585399;OCW RELEASE UPDATE 19.3.0.0.0
This confirms the database is running Oracle 19.28 before applying the 19.31 RU.
Step 1: Upgrade OPatch Utility
Oracle requires OPatch version 12.2.0.1.49 or later for this patch. In this case, the older OPatch was replaced with version 12.2.0.1.51.
For more informations: How To Download And Install The Latest OPatch
Upgrade process:
- Backup old OPatch directory
- Download latest OPatch patch (p6880880)
- Unzip into Oracle Home
- Verify installation
$ ./opatch version
OPatch Version: 12.2.0.1.51
Using the latest OPatch version minimizes compatibility issues during patching.

Step 2: Extract Oracle 19.31 Patch
Download and unzip patch:
p39034528_190000_Linux-x86-64.zip
This extracts the full Oracle 19.31 RU package into the patch directory.
Step 3: Run Conflict Checks
Always validate patch compatibility before applying:
$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Output:
/u01/app/oracle/product/19.0.0/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 : /u01/app/oracle/product/19.0.0
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/19.0.0/oraInst.loc
OPatch version : 12.2.0.1.51
OUI version : 12.2.0.7.0
Log file location : /u01/app/oracle/product/19.0.0/cfgtoollogs/opatch/opatch2026-05-03_17-55-24PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
This ensures no conflicts exist with current Oracle Home binaries.
Step 4: Shutdown Database
For standalone environments:
SQL> shutdown immediate;
Ensure all Oracle services using that Oracle Home are fully stopped.
Step 5: Apply Oracle 19.31 Patch
Execute:
$ opatch apply
Oracle performs:
- Oracle Home backup
- Binary replacement
- Component patching
- JDK updates
- SQL component preparation
Successful output:
/u01/app/oracle/product/19.0.0/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.51
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /u01/app/oracle/product/19.0.0
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/19.0.0/oraInst.loc
OPatch version : 12.2.0.1.51
OUI version : 12.2.0.7.0
Log file location : /u01/app/oracle/product/19.0.0/cfgtoollogs/opatch/opatch2026-05-03_17-57-52PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 39034528
Do you want to proceed? [y|n]
y
User Responded with: Y
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')
Is the local system ready for patching? [y|n]
User Responded with: Y
Backing up files...
Applying interim patch '39034528' to OH '/u01/app/oracle/product/19.0.0'
ApplySession: Optional component(s) [ oracle.network.gsm, 19.0.0.0.0 ] , [ oracle.assistants.asm, 19.0.0.0.0 ] , [ oracle.datamining, 19.0.0.0.0 ] , [ oracle.java.sqlj.sqljruntime, 19.0.0.0.0 ] , [ oracle.crypto.rsf, 19.0.0.0.0 ] , [ oracle.oraolap.mgmt, 19.0.0.0.0 ] , [ oracle.pg4appc, 19.0.0.0.0 ] , [ oracle.pg4mq, 19.0.0.0.0 ] , [ oracle.precomp.companion, 19.0.0.0.0 ] , [ oracle.rdbms.ic, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [ oracle.sdo.companion, 19.0.0.0.0 ] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.oid.client, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [ oracle.ldap.ztk, 19.0.0.0.0 ] , [ oracle.ons.eons.bwcompat, 19.0.0.0.0 ] , [ oracle.net.cman, 19.0.0.0.0 ] , [ oracle.ons.cclient, 19.0.0.0.0 ] , [ oracle.xdk.companion, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.network.cman, 19.0.0.0.0 ] , [ oracle.options.olap.api, 19.0.0.0.0 ] , [ oracle.jdk, 1.8.0.191.0 ] , [ oracle.jdk, 1.8.0.391.11 ] not present in the Oracle Home or a higher version is found.
Patching component oracle.rdbms.util, 19.0.0.0.0...
Patching component oracle.rdbms.rsf, 19.0.0.0.0...
Patching component oracle.rdbms, 19.0.0.0.0...
Patching component oracle.assistants.acf, 19.0.0.0.0...
Patching component oracle.assistants.deconfig, 19.0.0.0.0...
Patching component oracle.assistants.server, 19.0.0.0.0...
Patching component oracle.blaslapack, 19.0.0.0.0...
Patching component oracle.buildtools.rsf, 19.0.0.0.0...
Patching component oracle.wwg.plsql, 19.0.0.0.0...
Patching component oracle.ctx, 19.0.0.0.0...
Patching component oracle.dbdev, 19.0.0.0.0...
Patching component oracle.dbjava.ic, 19.0.0.0.0...
Patching component oracle.dbjava.jdbc, 19.0.0.0.0...
Patching component oracle.dbjava.ucp, 19.0.0.0.0...
Patching component oracle.duma, 19.0.0.0.0...
Patching component oracle.javavm.client, 19.0.0.0.0...
Patching component oracle.ldap.client, 19.0.0.0.0...
Patching component oracle.ldap.owm, 19.0.0.0.0...
Patching component oracle.ldap.rsf, 19.0.0.0.0...
Patching component oracle.ldap.security.osdt, 19.0.0.0.0...
Patching component oracle.marvel, 19.0.0.0.0...
Patching component oracle.network.rsf, 19.0.0.0.0...
Patching component oracle.nlsrtl.rsf, 19.0.0.0.0...
Patching component oracle.nlsrtl.rsf.core, 19.0.0.0.0...
Patching component oracle.nlsrtl.rsf.ic, 19.0.0.0.0...
Patching component oracle.odbc.ic, 19.0.0.0.0...
Patching component oracle.ons, 19.0.0.0.0...
Patching component oracle.ons.ic, 19.0.0.0.0...
Patching component oracle.oracore.rsf, 19.0.0.0.0...
Patching component oracle.perlint, 5.28.1.0.0...
Patching component oracle.precomp.common.core, 19.0.0.0.0...
Patching component oracle.precomp.rsf, 19.0.0.0.0...
Patching component oracle.rdbms.crs, 19.0.0.0.0...
Patching component oracle.rdbms.dbscripts, 19.0.0.0.0...
Patching component oracle.rdbms.deconfig, 19.0.0.0.0...
Patching component oracle.rdbms.install.common, 19.0.0.0.0...
Patching component oracle.rdbms.oci, 19.0.0.0.0...
Patching component oracle.rdbms.rsf.ic, 19.0.0.0.0...
Patching component oracle.rdbms.scheduler, 19.0.0.0.0...
Patching component oracle.rhp.db, 19.0.0.0.0...
Patching component oracle.rsf, 19.0.0.0.0...
Patching component oracle.sdo, 19.0.0.0.0...
Patching component oracle.sdo.locator.jrf, 19.0.0.0.0...
Patching component oracle.sqlj.sqljruntime, 19.0.0.0.0...
Patching component oracle.sqlplus, 19.0.0.0.0...
Patching component oracle.sqlplus.ic, 19.0.0.0.0...
Patching component oracle.tfa.db, 19.0.0.0.0...
Patching component oracle.wwg.plsql, 19.0.0.0.0...
Patching component oracle.xdk.rsf, 19.0.0.0.0...
Patching component oracle.rdbms.hs_common, 19.0.0.0.0...
Patching component oracle.javavm.server, 19.0.0.0.0...
Patching component oracle.rdbms.install.plugins, 19.0.0.0.0...
Patching component oracle.rdbms.locator, 19.0.0.0.0...
Patching component oracle.oraolap.api, 19.0.0.0.0...
Patching component oracle.rdbms.hsodbc, 19.0.0.0.0...
Patching component oracle.network.client, 19.0.0.0.0...
Patching component oracle.rdbms.drdaas, 19.0.0.0.0...
Patching component oracle.rdbms.dm, 19.0.0.0.0...
Patching component oracle.rdbms.rman, 19.0.0.0.0...
Patching component oracle.rdbms.rat, 19.0.0.0.0...
Patching component oracle.ovm, 19.0.0.0.0...
Patching component oracle.odbc, 19.0.0.0.0...
Patching component oracle.xdk.server, 19.0.0.0.0...
Patching component oracle.oraolap.dbscripts, 19.0.0.0.0...
Patching component oracle.xdk.xquery, 19.0.0.0.0...
Patching component oracle.network.listener, 19.0.0.0.0...
Patching component oracle.dbtoolslistener, 19.0.0.0.0...
Patching component oracle.ldap.rsf.ic, 19.0.0.0.0...
Patching component oracle.xdk.parser.java, 19.0.0.0.0...
Patching component oracle.sdo.locator, 19.0.0.0.0...
Patching component oracle.ctx.rsf, 19.0.0.0.0...
Patching component oracle.ldap.ssl, 19.0.0.0.0...
Patching component oracle.oraolap, 19.0.0.0.0...
Patching component oracle.mgw.common, 19.0.0.0.0...
Patching component oracle.install.deinstalltool, 19.0.0.0.0...
Patching component oracle.rdbms.dv, 19.0.0.0.0...
Patching component oracle.xdk, 19.0.0.0.0...
Patching component oracle.nlsrtl.rsf.lbuilder, 19.0.0.0.0...
Patching component oracle.ctx.atg, 19.0.0.0.0...
Patching component oracle.network.aso, 19.0.0.0.0...
Patching component oracle.rdbms.lbac, 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 39034528 successfully applied.
Sub-set patch [37960098] has become inactive due to the application of a super-set patch [39034528].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /u01/app/oracle/product/19.0.0/cfgtoollogs/opatch/opatch2026-05-03_17-57-52PM_1.log
OPatch succeeded.
Oracle automatically deactivates the previous 19.28 patch since 19.31 is a superseding RU.
Step 6: Verify Binary Patch Installation
Post-patch validation:
$ opatch lspatches
39034528;Database Release Update : 19.31.0.0.260421
This confirms Oracle Home binaries are successfully updated.
Step 7: Run Datapatch Sanity Checks
Datapatch validates SQL readiness:
$ datapatch -sanity_checks
Important observations:
- Dictionary stats warning
- Mounted PDB warning
- No critical blockers
Recommended performance optimization:
./datapatch -sanity_checks
SQL Patching sanity checks version 19.31.0.0.0 on Sun 03 May 2026 06:11:54 PM +0530
Copyright (c) 2021, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20260503_181154_23580/sanity_checks_20260503_181154_23580.log
Running checks
JSON report generated in /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20260503_181154_23580/sqlpatch_sanity_checks_summary.json file
Checks completed. Printing report:
Check: Database component status - OK
Check: PDB Violations - OK
Check: Invalid System Objects - OK
Check: Tablespace Status - OK
Check: Backup jobs - OK
Check: Temp file exists - OK
Check: Temp file online - OK
Check: Data Pump running - OK
Check: Container status - WARNING
Datapatch will only run in containers with READ WRITE, MIGRATE (upgrade) or READ ONLY mode.
Specified containers are not READ WRITE, MIGRATE or READ ONLY mode. When not opened, containers will not be a part of patching.
Open containers if they should take part of patching activities. Refer to the section "Modifying a PDB with the ALTER PLUGGABLE DATABASE Statement" in the Multitenant Administrator's Guide for details.
CDB$ROOT:
| HOST_NAME | NAME | OPEN_MODE |
|--------------+------+-----------|
| prod.mit.com | PDB | MOUNTED |
|--------------+------+-----------|
Check: Oracle Database Keystore - OK
Check: Dictionary statistics gathering - WARNING
Patching the database without recent data dictionary statistics gathered may lead to performance issues.
Data dictionary statistics are older than 7 days.
Run the following queries to start gathering the dictionary statistics:
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_SYSTEM.GATHER_FIXED_OBJECTS_STATS;
Refer to MOS 457926.1 for more details.
PDB$SEED:
| LATEST | OPERATION | STATUS |
|-----------------+-------------------------+-----------|
| 14-OCT-25 11:46 | gather_dictionary_stats | COMPLETED |
|-----------------+-------------------------+-----------|
Check: Scheduled Jobs - OK
Check: GoldenGate triggers - OK
Check: Logminer DDL triggers - OK
Check: Check sys public grants - OK
Check: Statistics gathering running - OK
Check: Optim dictionary upgrade parameter - OK
Check: Symlinks on oracle home path - OK
Check: Central Inventory - OK
Check: Java Virtual Machine Enable - OK
Check: Oracle Database Vault Enabled - OK
Check: Queryable Inventory database directories - OK
Check: Queryable Inventory locks - OK
Check: Queryable Inventory package - OK
Check: Queryable Inventory external table - OK
Check: Imperva processes - OK
Check: Guardium processes - OK
Check: Locale - OK
Refer to MOS Note 2975965.1 and debug log
/u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20260503_181154_23580/sanity_checks_debug_20260503_181154_23580.log
SQL Patching sanity checks completed on Sun 03 May 2026 06:12:00 PM +0530
This step helps maintain optimal post-patch database performance.
Step 8: Execute Datapatch
Apply SQL changes:
$ datapatch -verbose
Successful patching:
- CDB$ROOT updated
- PDB$SEED updated
- SQL registry synchronized
Example result:
datapatch -verbose
SQL Patching tool version 19.31.0.0.0 Production on Sun May 3 18:12:26 2026
Copyright (c) 2012, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_23846_2026_05_03_18_12_26/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
(Doc ID 1585822.1)
Warning: PDB PDB is in mode MOUNTED and will be skipped.
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 260426152757: Installed
PDB CDB$ROOT:
Applied 19.28.0.0.0 Release_Update 250705030417 successfully on 14-OCT-25 11.22.01.917030 AM
PDB PDB$SEED:
Applied 19.28.0.0.0 Release_Update 250705030417 successfully on 14-OCT-25 11.48.20.897843 AM
Adding patches to installation queue and performing prereq checks...done
Installation queue:
For the following PDBs: CDB$ROOT PDB$SEED
No interim patches need to be rolled back
Patch 39034528 (Database Release Update : 19.31.0.0.260421 (39034528)):
Apply from 19.28.0.0.0 Release_Update 250705030417 to 19.31.0.0.0 Release_Update 260426152757
No interim patches need to be applied
Installing patches...
Patch installation complete. Total patches installed: 2
Validating logfiles...done
Patch 39034528 apply (pdb CDB$ROOT): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/39034528/28700584/39034528_apply_CDB_CDBROOT_2026May03_18_14_53.log (no errors)
Patch 39034528 apply (pdb PDB$SEED): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/39034528/28700584/39034528_apply_CDB_PDBSEED_2026May03_18_16_51.log (no errors)
SQL Patching tool complete on Sun May 3 18:18:37 2026
[oracle@prod OPatch]$
Verifying Patch Application
To confirm patch installation, query the DBA_REGISTRY_SQLPATCH view.
SQL> set lines 200
SQL> col action_time format a25
SQL> col status format a12
SQL> select action_time, action, status, source_version, target_version from dba_registry_sqlpatch;
ACTION_TIME ACTION STATUS SOURCE_VERSION TARGET_VERSION
------------------------------ --------------- ------------ --------------- ---------------
14-OCT-25 01.14.37.206437 PM APPLY SUCCESS 19.1.0.0.0 19.28.0.0.0
03-MAY-26 04.45.06.946909 AM APPLY SUCCESS 19.28.0.0.0 19.31.0.0.0
Key Lessons from Oracle 19.31 Upgrade
Best Practices:
- Always update OPatch first
- Perform conflict checks
- Validate Oracle Home before downtime
- Run datapatch after binary patching
- Review PDB open modes
- Update dictionary statistics post-upgrade
Common Warnings:
- Closed PDBs are skipped
- Outdated dictionary stats may impact performance
- Sanity checks should never be ignored
Production Benefits of Oracle 19.31
By upgrading to Oracle Database 19.31, organizations gain:
- Enhanced security posture
- Reduced software vulnerabilities
- Better patch consistency
- Improved operational reliability
- Compliance with Oracle support recommendations
For production DBAs, this patch cycle demonstrates a reliable, low-risk quarterly maintenance strategy.
Final Thoughts
Oracle Database 19.31 Release Update deployment is a straightforward but critical maintenance process when executed correctly. Following structured patching procedures—from OPatch updates to datapatch validation—ensures enterprise-grade stability and security.
For database administrators managing Oracle 19c production systems, regular RU patching like Oracle 19.31 is one of the most important responsibilities for maintaining secure, optimized infrastructure.
Keeping your Oracle environment updated is not just maintenance—it’s proactive enterprise risk management.





Comments 2