19c Combo OJVM-DB-RU
TOC
Overview
The following covers applying the OJVM-DB Release Update (RU) combo patch to a standard database. Patch 38658587 is used in these examples (AKA April 2026).
NOTE: Theses docs reflect current changes to Oracle Support, i.e. individual Database and OJVM patches were downloaded and not the COMBO. We'll see if this becomes the new best practice.
Combo Patch Fun Facts!
opatch
- opatch updates the Oracle binaries.
- You must shutdown all databases and listener before running opatch.
datapatch
- datapatch loads modified SQL files into the database.
- datapatch must be run for each separate database being patched.
Set the ORACLE_SID for each before running.
Data Guard (DG) Environment
- Patch DG systems first.
- Patch binaries (opatch) on both primary and standby.
- For SQL Patching (datapatch), only run on the primary.
Misc
- Perform above logged in as the oracle user.
- Combo Patch includes both Database RU and the OJVM RU.
- RU = Release Update.
- An RU changes the minor version.
For example: 19.nn to 19.31.
Prerequisites
- If using VMware or VirtualBox, take a snapshot before beginning.
- Ensure you have the latest OPatch.
- Confirm the Oracle inventory is OK.
Example: $ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME - Download Combo patch (Doc ID 2118136.2):
- What would you like to download? OJVM Update/PSU/Bundle Patches
- Please select the version: 19.0.0.0
- Download: OJVM + DB Update (38658587) 🠊 Select OS (Linux x86-64)
- As oracle user copy patch .zip file to your patches dir.
- Run My Oracle Support's Conflict Checker to detect and resolve any conflicts.
- Unzip the downloaded combo patch zip file.
Example
su - oracle
DL to /u04/.../patches/2026-Apr
mkdir /u04/.../patches/2026-Apr
cp p38658587_190000_Linux-x86-64.zip /u01/orasw/patches/
cd /u01/orasw/patches
unzip p38658587_190000_Linux-x86-64.zip
- List included major patch sets.
cd /u01/orasw/patches/38658587
ls -l
39034528 (DB RU)
38906621 (OJVM RU)
One of the biggest reasons patches fail is lack of disk space in your ORACLE_HOME. Ensure you have 25gb or more free.
Database RU
Database RU: opatch
su - oracle -- If Data Guard Environment, Stop Managed Recovery dgmgrl sys/*********@standby_db DGMGRL> edit database 'standby_db' set state='apply-off'; Replace standby_db with your SB name (SELECT DB_UNIQUE_NAME FROM V$DATABASE;). -- Sanity Check: Correct DB (Primary vs. Standby)? SQLPlus> SELECT DB_UNIQUE_NAME FROM V$DATABASE; -- Stop Database(s) and Listener oracle> export ORACLE_SID=MyOraSid oracle> sqlplus / as sysdba SQLPLUS> shutdown immediate SQLPLUS> exit oracle> lsnrctl stop -- Prep Env (keep this window open to do OJVM as env already set) export PATH=$PATH:/usr/ccs/bin export PATH=$PATH:$ORACLE_HOME/OPatch cd $ORACLE_HOME/OPatch If Linux 8 run: export CV_ASSUME_DISTID=OEL8.1 All cmds on one line (includes OEL8.1): export CV_ASSUME_DISTID=OEL8.1;export PATH=$PATH:/usr/ccs/bin;export PATH=$PATH:$ORACLE_HOME/OPatch;cd $ORACLE_HOME/OPatch -- Execute opatch ./opatch apply /u01/orasw/patches/38658587/39034528 Verifying environment and performing prerequisite checks... Do you want to proceed? [y|n]: y Is the local system ready for patching? [y|n]: y Process runs... Upon completion the status will be displayed on screen. Example: OPatch succeeded. -- Start Database(s) and Listener oracle> lsnrctl start oracle> export ORACLE_SID=MyOraSid oracle> sqlplus / as sysdba SQLPLUS> startup IF Data Guard Database 🠊 startup mount SQLPLUS> exit
Database RU: datapatch
-- If not a Standby DB, run datapatch. cd $ORACLE_HOME/OPatch ./datapatch -verbose Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current state...done ... Installing patches... Upon completion the status will be displayed on screen. Example: OPatch succeeded. -- Check dba_registry COL version FORMAT a10 COL action FORMAT a10 COL status FORMAT a10 COL action_time FORMAT a30 COL description FORMAT a65 SELECT patch_id,patch_type,action,status,action_time,description FROM dba_registry_sqlpatch; PATCH_ID PATCH_TYPE ACTION STATUS ACTION_TIME DESCRIPTION --------- ---------- ---------- ---------- ------------------------------ ---------------------------------------------------- 39034528 RU APPLY SUCCESS 23-Jun-26 22.04.nn.nnnnnn PM Database Release Update : 19.31.0.0.nnn (nnn) -- Update Permissions DBRU relinks libraries & executables and can change permissions. Execute the following as root user: export ORACLE_HOME=/u01/app/oracle/product/19.3.0.0.0/dbhome_1 chown root $ORACLE_HOME/bin/extjob chmod 4750 $ORACLE_HOME/bin/extjob
The chown 4 (setuid) allows file to run with the priv of owner, rather than privs of user running executable.
OJVM RU
OJVM RU: opatch
-- Shutdown DB and Listener sqlplus / as sysdba shutdown immediate exit lsnrctl stop -- Run: opatch apply cd $ORACLE_HOME/OPatch ./opatch apply /u01/orasw/patches/38658587/38906621 -oh $ORACLE_HOME Verifying environment and performing prerequisite checks... Do you want to proceed? [y|n]: y Is the local system ready for patching? [y|n]: y Process runs... Upon completion the status will be displayed on screen. Example: OPatch succeeded. -- Startup DB and Listener sqlplus / as sysdba startup IF Data Guard Database 🠊 startup mount exit lsnrctl start
OJVM RU: datapatch
-- If not a Standby DB, run: datapatch cd $ORACLE_HOME/OPatch ./datapatch -verbose Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current state...done ... Installing patches... Upon completion the status will be displayed on screen. Example: OPatch succeeded.
Post Combo Patch Actions
Ensure Oracle Inventory for the oracle home shows applied patches.
OS> $ORACLE_HOME/OPatch/opatch lsinventory|more
38906621 (OJVM RU)
39034528 (DB RU)
Perform database status checks.
SELECT instance_name,status,database_status,active_state FROM v$instance; INSTANCE_NAME STATUS DATABASE_STATUS ACTIVE_ST ---------------- ------------ ----------------- --------- mydb1 OPEN ACTIVE NORMAL
Check dba_registry
COL version FORMAT a10 COL action FORMAT a10 COL status FORMAT a10 COL action_time FORMAT a30 COL description FORMAT a65 SELECT patch_id,patch_type,action,status,action_time,description FROM dba_registry_sqlpatch; PATCH_ID PATCH_TYPE ACTION STATUS ACTION_TIME DESCRIPTION --------- ---------- ---------- ---------- ------------------------------ ---------------------------------------------------- 39034528 RU APPLY SUCCESS 23-Jun-26 HH.MM.nn.nnnnnn PM Database Release Update : 19.31.0.0.nnn (39034528) nnnnnnnn INTERIM ROLLBACK SUCCESS 23-Jun-26 22.04.nn.nnnnnn PM OJVM RELEASE UPDATE: 19.x.0.0.190716 (nnn) 38906621 INTERIM APPLY SUCCESS 23-Jun-26 22.04.nn.nnnnnn PM OJVM RELEASE UPDATE: 19.31.0.0.nnn (38906621)
List Patches
opatch lspatches 38906621;OJVM RELEASE UPDATE: 19.31.0.0.nnnnnn (38906621) 39034528;Database Release Update : 19.31.0.0.nnnnnn (39034528) nnn;OCW RELEASE UPDATE 19.3.0.0.0 (nnn)
If data guard Environment: Restart Managed Recovery
dgmgrl sys/*********@standby_db DGMGRL> edit database 'standby_db' set state='apply-on'; Replace standby_db with your SB name (SELECT DB_UNIQUE_NAME FROM V$DATABASE;). -- On Both: Should show both on same software version. SELECT host_name, version_full FROM v$instance; -- On Standby: MRP0 should show APPLYING_LOG or IDLE SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;
Rollback Patch
Patch Deinstallation Instructions for a Non-RAC, Non-CDB Environment.
Rollback Fun Facts
- Do the OJVM then Database Update.
- opatch rollback also automactically rolls back the SQL changes (AKA datapatch).
Procedure
0. Note current patch versions.
$ORACLE_HOME/OPatch/opatch lspatches
0. Prep Env
export CV_ASSUME_DISTID=OEL8.1;export PATH=$PATH:/usr/ccs/bin;export PATH=$PATH:$ORACLE_HOME/OPatch;cd $ORACLE_HOME/OPatch
1. Shut down all instances and listeners associated with the Oracle home.
If Linux 8 run: export CV_ASSUME_DISTID=OEL8.1
-- Stop Database(s) and Listener
oracle> export ORACLE_SID=MyOraSid
oracle> sqlplus / as sysdba
SQLPLUS> shutdown immediate
SQLPLUS> exit
oracle> lsnrctl stop
2. Run the OPatch utility specifying the rollback argument as follows:
opatch rollback -id 38906621 (OJVM)
opatch rollback -id 39034528 (Database Update)
3. QC
$ORACLE_HOME/OPatch/opatch lspatches
4. After the rollback is complete, you will need to restart the
database for the changes to take effect.
-- Start Database(s) and Listener
oracle> lsnrctl start
oracle> export ORACLE_SID=MyOraSid
oracle> sqlplus / as sysdba
SQLPLUS> startup
SQLPLUS> exit
References
This page has been derived from various MOS resources including: Doc ID 2285040.1, 3-20637596581, 3-16179254071, 3-16515328131, 3-17593686831, 3-18616506451.