oracledba.help
Install

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):
    1. What would you like to download? OJVM Update/PSU/Bundle Patches
    2. Please select the version: 19.0.0.0
    3. Download: OJVM + DB Update (38658587) 🠊 Select OS (Linux x86-64)
    4. 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
A sub directory with the matching patch number (38658587) will be created.
  • List included major patch sets.

cd /u01/orasw/patches/38658587
ls -l
39034528 (DB RU)
38906621 (OJVM RU)

• There is a README.html in each top-level sub dir that identifies type (DB or OJVM).
• <title>Oracle Database Patch 39034528 - Database Release Update 19.nnn</title>
• <title>Oracle Database Patch 38906621 - Oracle JavaVM Component Release Update 19.nnn</title>

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;

OJVM Status Check

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.