Skip to main content

Oracle 19.31 RU Patch on Oracle Restart via OPatchAuto

Oracle 19c RU 19.31 patch applied to an Oracle Restart environment using OPatchAuto

Introduction

This article documents the end-to-end patching procedure for Oracle Database 19c Release Update (RU) 19.31 (39034528) in an Oracle Restart environment using OPatchAuto.

OPatchAuto

OPatchAuto is an Oracle utility designed to automate the patching process for Oracle Grid Infrastructure, Oracle Restart, and Oracle RAC environments. It handles the entire lifecycle from pre-checks and stopping services to applying binary updates, running root scripts, restarting services, and executing datapatch for SQL updates. OPatchAuto must be executed by the root user, as it needs privileged access to stop and start Oracle High Availability Services and perform root level configuration tasks.

Prerequisites

  • Plan a maintenance window with approximately 180 minutes of database downtime.
  • Ensure a minimum of 15 GB of free space is available in both the Grid Infrastructure and Database home mount points. Additionally, reserve approximately 25 GB for the patch files and Oracle Home backup.
  • Ensure root or equivalent sudo privileges are available, as OPatchAuto must be executed by the root user in an Oracle Restart environment.
  • Download the appropriate Oracle 19c Release Update (RU) patch and the latest compatible OPatch utility from Oracle Support:

Environment Used in This Guide

Hostname orares.oraeasy.com
OS OL 7.9
Grid Infrastructure Version 19.3.0.0
Grid Infrastructure Home /u01/app/grid/19c/grid_1
Database Version 19.3.0.0
Database Home /u01/app/oracle/19c/db_1
GI/DB Owner oracle

Patching Steps

Step 1: Update OPatch on the Database Home

As per the patch ReadMe, OPatch must be at version 12.2.0.1.49 or later. The environment is currently on an older release, so we back up the existing OPatch directory and replace it with the newer version before touching anything else, starting with the Database Home.


[oracle@orares ~]$ cd /u01/app/oracle/19c/db_1/OPatch/
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.
[oracle@orares OPatch]$
[oracle@orares OPatch]$ cd ..
[oracle@orares db_1]$ mv OPatch/ OPatch_bkp
[oracle@orares db_1]$
[oracle@orares db_1]$ cd /u01/software
[oracle@orares software]$ ls -lrth
total 4.1G
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip
[oracle@orares software]$ unzip p6880880_190000_Linux-x86-64V51DB.zip -d /u01/app/oracle/19c/db_1
[oracle@orares software]$ cd /u01/app/oracle/19c/db_1/OPatch/
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.51

OPatch succeeded.
[oracle@orares OPatch]$

Step 2: Update OPatch on the GI Home

The same OPatch upgrade needs to happen inside the Grid Infrastructure home. Because parts of the GI home are root-owned, the unzip step is done as root, and ownership is handed back to the oracle user once the new OPatch binaries are in place.


[oracle@orares ~]$ cd /u01/app/grid/19c/grid_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.17

OPatch succeeded.
[oracle@orares OPatch]$
[oracle@orares software]$ pwd
/u01/software
[oracle@orares software]$ ls -lrth
total 4.1G
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip
[oracle@orares software]$

[oracle@orares software]$ su -
Password:
Last login: Mon Jun 22 21:16:10 IST 2026 on pts/2

[root@orares ~]# cd /u01/app/grid/19c/grid_1
[root@orares grid_1]#
[root@orares grid_1]# mv OPatch OPatch_bkp
[root@orares grid_1]# cd 
[root@orares ~]# cd /u01/software
[root@orares software]# ls -lrth
total 4.1G
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip
[root@orares software]#
[root@orares software]# unzip p6880880_190000_Linux-x86-64V51DB.zip -d /u01/app/grid/19c/grid_1

[root@orares software]# chown -R oracle:oinstall /u01/app/grid/19c/grid_1/OPatch
[root@orares software]# exit

[oracle@orares grid_1]$ cd
[oracle@orares ~]$ cd /u01/app/grid/19c/grid_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.51

OPatch succeeded.
[oracle@orares OPatch]$

Step 3: Run the Prerequisite Checks

Before making any changes, capture a baseline for both homes: the currently applied patches, cluster resource status, and confirmation that ASM, the listener, and the database are healthy. This baseline is what post-patching results are compared against.


For GI Home:

[oracle@orares ~]$ cd /u01/app/grid/19c/grid_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lspatches
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
29517247;ACFS RELEASE UPDATE 19.3.0.0.0 (29517247)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)
29401763;TOMCAT RELEASE UPDATE 19.0.0.0.0 (29401763)

OPatch succeeded.
[oracle@orares OPatch]$ ./opatch lsinventory|grep -i applied
Patch  29585399     : applied on Thu Apr 18 13:06:24 IST 2019
Patch  29517247     : applied on Thu Apr 18 13:06:02 IST 2019
Patch  29517242     : applied on Thu Apr 18 13:05:39 IST 2019
Patch  29401763     : applied on Thu Apr 18 13:05:16 IST 2019
[oracle@orares OPatch]$
[oracle@orares OPatch]$ cd /u01/app/grid/19c/grid_1/bin
[oracle@orares bin]$
[oracle@orares bin]$ ./crsctl check has
CRS-4638: Oracle High Availability Services is online
[oracle@orares bin]$
[oracle@orares bin]$ crsctl stat res -t
bash: crsctl: command not found...
[oracle@orares bin]$ ./crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       orares                   STABLE
ora.DATA.dg
               ONLINE  ONLINE       orares                   STABLE
ora.FRA.dg
               ONLINE  ONLINE       orares                   STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       orares                   STABLE
ora.asm
               ONLINE  ONLINE       orares                   Started,STABLE
ora.ons
               OFFLINE OFFLINE      orares                   STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       orares                   STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       orares                   STABLE
ora.orcldb.db
      1        ONLINE  ONLINE       orares                   Open,HOME=/u01/app/o
                                                             racle/19c/db_1,STABL
                                                             E
--------------------------------------------------------------------------------
[oracle@orares bin]$
[oracle@orares bin]$ ./crsctl query has softwareversion
Oracle High Availability Services version on the local node is [19.0.0.0.0]
[oracle@orares bin]$
[oracle@orares bin]$ . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/grid
[oracle@orares bin]$
[oracle@orares bin]$ sqlplus -v

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

[oracle@orares bin]$
[oracle@orares bin]$ ps -ef|grep pmon
oracle    2649     1  0 08:15 ?        00:00:00 asm_pmon_+ASM
oracle    2825     1  0 08:16 ?        00:00:01 ora_pmon_orcldb
oracle   17651 10379  0 10:47 pts/1    00:00:00 grep --color=auto pmon
[oracle@orares bin]$
[oracle@orares bin]$ ps -ef|grep tns
root        22     2  0 08:13 ?        00:00:00 [netns]
oracle    2296     1  0 08:15 ?        00:00:00 /u01/app/grid/19c/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit
oracle   17666 10379  0 10:47 pts/1    00:00:00 grep --color=auto tns
[oracle@orares bin]$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 23-JUN-2026 10:49:02

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orares.oraeasy.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                23-JUN-2026 08:15:30
Uptime                    0 days 2 hr. 33 min. 32 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/19c/grid_1/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/orares/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orares.oraeasy.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_CRS" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "46a3632ba42417ede0651fe43e14032c" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orcldb" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orcldbXDB" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@orares bin]$

For Database Home:

[oracle@orares ~]$ cd /u01/app/oracle/19c/db_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lspatches
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)

OPatch succeeded.
[oracle@orares OPatch]$ ./opatch lsinventory|grep -i applied
Patch  29585399     : applied on Thu Apr 18 12:51:33 IST 2019
Patch  29517242     : applied on Thu Apr 18 12:51:17 IST 2019
[oracle@orares OPatch]$
[oracle@orares OPatch]$ . oraenv
ORACLE_SID = [oracle] ? orcldb
The Oracle base has been set to /u01/app/oracle
[oracle@orares OPatch]$
[oracle@orares OPatch]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 23 09:37:40 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> def
DEFINE _DATE           = "23-JUN-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcldb" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1903000000" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0" (CHAR)
DEFINE _O_RELEASE      = "1903000000" (CHAR)
SQL>

SQL> SET LINESIZE 333 PAGESIZE 333
SQL> SELECT name, db_unique_name, database_role, open_mode FROM v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE
--------- ------------------------------ ---------------- --------------------
ORCLDB    orcldb                         PRIMARY          READ WRITE

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL>
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

SQL> col ACTION_TIME for a20
SQL> col ACTION for a10
SQL> col STATUS for a10
SQL> select patch_uid,patch_id,SOURCE_VERSION, TARGET_VERSION, action, status,action_time,description from dba_registry_sqlpatch;

 PATCH_UID   PATCH_ID SOURCE_VERSION  TARGET_VERSION  ACTION     STATUS     ACTION_TIME          DESCRIPTION
---------- ---------- --------------- --------------- ---------- ---------- -------------------- -----------------------------------------------------
  22862832   29517242 19.1.0.0.0      19.3.0.0.0      APPLY      SUCCESS    23-DEC-25 11.09.19.4 Database Release Update : 19.3.0.0.190416 (29517242)
                                                                            00612 PM

SQL> col comp_id for a10
SQL> col version for a11
SQL> col status for a10
SQL> col comp_name for a37
SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  VALID
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL> alter session set container=ORCLPDB;

Session altered.

SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  VALID
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL>  SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

SQL>

Step 4: Unzip the RU Patch

With the baseline confirmed, extract the 19.31 RU patch bundle (39036936). This single zip contains the individual sub-patches OPatchAuto will apply separately to the GI and Database homes.


[oracle@orares software]$ pwd
/u01/software
[oracle@orares software]$ ls -lrth
total 4.1G
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip
[oracle@orares software]$
[oracle@orares software]$ unzip p39036936_190000_Linux-x86-64_1931.zip
[oracle@orares software]$ ls -lrth
total 4.1G
drwxr-x---. 8 oracle oinstall 4.0K May 14 16:45 39036936
-rw-rw-r--. 1 oracle oinstall 3.1M May 20 17:38 PatchSearch.xml
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip

Step 5: Run OPatchAuto in Analyze Mode

Before applying anything, run OPatchAuto with -analyze to validate the environment, detect conflicts, and confirm patch applicability. It also discovers the Grid and Database homes and determines which patches apply to each, without making any changes. This must be executed from the GI home as the root user.


[root@orares ~]# cd /u01/software/39036936
[root@orares 39036936]# /u01/app/grid/19c/grid_1/OPatch/opatchauto apply /u01/software/39036936 -analyze

OPatchauto session is initiated at Tue Jun 23 09:53:52 2026

System initialization log file is /u01/app/grid/19c/grid_1/cfgtoollogs/opatchautodb/systemconfig2026-06-23_09-54-06AM.log.

Session log file is /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/opatchauto2026-06-23_09-54-18AM.log
The id for this session is 7G4G

Executing OPatch prereq operations to verify patch applicability on home /u01/app/oracle/19c/db_1
Patch applicability verified successfully on home /u01/app/oracle/19c/db_1

Executing patch validation checks on home /u01/app/oracle/19c/db_1
Patch validation checks successfully completed on home /u01/app/oracle/19c/db_1

Verifying SQL patch applicability on home /u01/app/oracle/19c/db_1
SQL patch applicability verified successfully on home /u01/app/oracle/19c/db_1

Executing OPatch prereq operations to verify patch applicability on home /u01/app/grid/19c/grid_1
Patch applicability verified successfully on home /u01/app/grid/19c/grid_1

Executing patch validation checks on home /u01/app/grid/19c/grid_1
Patch validation checks successfully completed on home /u01/app/grid/19c/grid_1

OPatchAuto successful.

--------------------------------Summary--------------------------------

Analysis for applying patches has completed successfully:

Host:orares
SIDB Home:/u01/app/oracle/19c/db_1
Version:19.0.0.0.0

==Following patches were SKIPPED:

Patch: /u01/software/39036936/39055473
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /u01/software/39036936/39107825
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /u01/software/39036936/39107855
Reason: This patch is not applicable to this specified target type - "oracle_database"

==Following patches were SUCCESSFULLY analyzed to be applied:

Patch: /u01/software/39036936/39039430
Log: /u01/app/oracle/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-55-11AM_1.log

Patch: /u01/software/39036936/39034528
Log: /u01/app/oracle/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-55-11AM_1.log

Host:orares
SIHA Home:/u01/app/grid/19c/grid_1
Version:19.0.0.0.0

==Following patches were SUCCESSFULLY analyzed to be applied:

Patch: /u01/software/39036936/39039430
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-59-03AM_1.log

Patch: /u01/software/39036936/39055473
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-59-03AM_1.log

Patch: /u01/software/39036936/39107825
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-59-03AM_1.log

Patch: /u01/software/39036936/39107855
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-59-03AM_1.log

Patch: /u01/software/39036936/39034528
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_09-59-03AM_1.log

OPatchauto session completed at Tue Jun 23 10:01:41 2026
Time taken to complete the session 7 minutes, 36 seconds
[root@orares 39036936]#

Analyze completed successfully. All prerequisite checks passed, and OPatchAuto correctly identified the target Oracle homes and applicable patches. Note that three patches (ACFS, DBWLM, TOMCAT) are skipped for the Database home, that's expected, since those components only apply to the GI home.

Step 6: Back Up the GI and Database Homes

With the analyze step clean, take a full backup of both Oracle homes and their patch inventories before doing anything irreversible. This is the rollback point if the patching run needs to be backed out.


For GI Home:

[root@orares ~]# cd /u01/app/grid/19c
[root@orares 19c]# ll
total 4
drwxr-x---. 88 root oinstall 4096 Jun 23 08:31 grid_1
[root@orares 19c]# tar -czvpf /u01/backup/grid_1_preRU19_31_$(date +%F).tar.gz grid_1
[root@orares 19c]# /u01/app/grid/19c/grid_1/OPatch/opatch lsinventory > /u01/backup/grid_lsinv_preRU19_31.txt

For Database Home:

[root@orares ~]# cd /u01/app/oracle/19c
[root@orares 19c]# ll
total 4
drwxrwxr-x. 73 oracle oinstall 4096 Jun 23 08:43 db_1
[root@orares 19c]# tar -czvpf /u01/backup/db_1_preRU19_31_$(date +%F).tar.gz db_1
[root@orares 19c]# /u01/app/oracle/19c/db_1/OPatch/opatch lsinventory > /u01/backup/db_lsinv_preRU19_31.txt

Verify:

[root@orares 19c]# cd /u01/backup/
[root@orares backup]# ls -lrth
total 6.1G
-rw-r--r--. 1 root root 3.0G Jun 23 10:16 grid_1_preRU19_31_2026-06-23.tar.gz
-rw-r--r--. 1 root root 3.2G Jun 23 10:30 db_1_preRU19_31_2026-06-23.tar.gz
-rw-r--r--. 1 root root   97 Jun 23 10:35 grid_lsinv_preRU19_31.txt
-rw-r--r--. 1 root root   97 Jun 23 10:36 db_lsinv_preRU19_31.txt
[root@orares backup]#

Step 7: Apply the Patch with OPatchAuto

With all prerequisite checks validated, execute OPatchAuto to apply the Release Update. It automatically performs binary patching, service restarts, root script execution, and SQL patching in the correct sequence.


[root@orares ~]# cd /u01/software/
[root@orares software]# ls -lrrh
total 4.1G
drwxr-x---. 8 oracle oinstall 4.0K May 14 16:45 39036936
-rw-rw-r--. 1 oracle oinstall 3.1M May 20 17:38 PatchSearch.xml
-rw-r--r--. 1 oracle oinstall 131M Jun 22 20:58 p6880880_190000_Linux-x86-64V51DB.zip
-rw-r--r--. 1 oracle oinstall 4.0G Jun 22 21:03 p39036936_190000_Linux-x86-64_1931.zip
[root@orares software]# cd 39036936
[root@orares 39036936]# ls -lrth
total 2.4M
drwxr-x---. 5 oracle oinstall   58 May 14 16:45 39039430
drwxr-x---. 5 oracle oinstall   58 May 14 16:45 39055473
drwxr-x---. 4 oracle oinstall   28 May 14 16:46 39107855
drwxr-x---. 4 oracle oinstall   45 May 14 16:46 39107825
drwxr-x---. 5 oracle oinstall   76 May 14 16:46 39034528
-rw-r--r--. 1 oracle oinstall    0 May 14 16:51 README.txt
drwxr-x---. 2 oracle oinstall 4.0K May 14 16:51 automation
-rw-rw-r--. 1 oracle oinstall 5.7K May 14 22:50 bundle.xml
-rw-rw-r--. 1 oracle oinstall 2.4M May 20 17:36 README.html
[root@orares 39036936]#
[root@orares 39036936]# /u01/app/grid/19c/grid_1/OPatch/opatchauto apply /u01/software/39036936

OPatchauto session is initiated at Tue Jun 23 10:49:37 2026

System initialization log file is /u01/app/grid/19c/grid_1/cfgtoollogs/opatchautodb/systemconfig2026-06-23_10-49-53AM.log.

Session log file is /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/opatchauto2026-06-23_10-50-06AM.log
The id for this session is MG1G

Executing OPatch prereq operations to verify patch applicability on home /u01/app/oracle/19c/db_1
Patch applicability verified successfully on home /u01/app/oracle/19c/db_1

Executing patch validation checks on home /u01/app/oracle/19c/db_1
Patch validation checks successfully completed on home /u01/app/oracle/19c/db_1

Verifying SQL patch applicability on home /u01/app/oracle/19c/db_1
SQL patch applicability verified successfully on home /u01/app/oracle/19c/db_1

Executing OPatch prereq operations to verify patch applicability on home /u01/app/grid/19c/grid_1
Patch applicability verified successfully on home /u01/app/grid/19c/grid_1

Executing patch validation checks on home /u01/app/grid/19c/grid_1
Patch validation checks successfully completed on home /u01/app/grid/19c/grid_1

Preparing to bring down database service on home /u01/app/oracle/19c/db_1
Successfully prepared home /u01/app/oracle/19c/db_1 to bring down database service

Stopping the Database & CRS services:

Bringing down database service on home /u01/app/oracle/19c/db_1
Following database has been stopped and will be restarted later during the session: orcldb
Database service successfully brought down on home /u01/app/oracle/19c/db_1

Performing prepatch operations on CRS - bringing down CRS service on home /u01/app/grid/19c/grid_1
Prepatch operation log file location: /u01/app/grid/crsdata/orares/crsconfig/hapatch_2026-06-23_10-58-37AM.log
CRS service brought down successfully on home /u01/app/grid/19c/grid_1

Performing prepatch operation on home /u01/app/oracle/19c/db_1
Prepatch operation completed successfully on home /u01/app/oracle/19c/db_1

Applying the patch on Database Home:

Start applying binary patch on home /u01/app/oracle/19c/db_1

Binary patch applied successfully on home /u01/app/oracle/19c/db_1

Running rootadd_rdbms.sh on home /u01/app/oracle/19c/db_1
Successfully executed rootadd_rdbms.sh on home /u01/app/oracle/19c/db_1

Performing postpatch operation on home /u01/app/oracle/19c/db_1
Postpatch operation completed successfully on home /u01/app/oracle/19c/db_1

Applying the patch on GI Home:

Start applying binary patch on home /u01/app/grid/19c/grid_1
Binary patch applied successfully on home /u01/app/grid/19c/grid_1


Running rootadd_rdbms.sh on home /u01/app/grid/19c/grid_1
Successfully executed rootadd_rdbms.sh on home /u01/app/grid/19c/grid_1

Starting the CRS & Database services:

Performing postpatch operations on CRS - starting CRS service on home /u01/app/grid/19c/grid_1
Postpatch operation log file location: /u01/app/grid/crsdata/orares/crsconfig/hapatch_2026-06-23_12-09-45AM.log
CRS service started successfully on home /u01/app/grid/19c/grid_1

Starting database service on home /u01/app/oracle/19c/db_1
Database service successfully started on home /u01/app/oracle/19c/db_1

Preparing home /u01/app/oracle/19c/db_1 after database service restarted
No step execution required.........

Applying the Datapatch:

Trying to apply SQL patch on home /u01/app/oracle/19c/db_1

SQL patch applied successfully on home /u01/app/oracle/19c/db_1

OPatchAuto successful.

--------------------------------Summary--------------------------------

Patching is completed successfully. Please find the summary as follows:

Host:orares
SIDB Home:/u01/app/oracle/19c/db_1
Version:19.0.0.0.0
Summary:

==Following patches were SKIPPED:

Patch: /u01/software/39036936/39055473
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /u01/software/39036936/39107825
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /u01/software/39036936/39107855
Reason: This patch is not applicable to this specified target type - "oracle_database"

==Following patches were SUCCESSFULLY applied:

Patch: /u01/software/39036936/39034528
Log: /u01/app/oracle/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_10-59-21AM_1.log

Patch: /u01/software/39036936/39039430
Log: /u01/app/oracle/19c/db_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_10-59-21AM_1.log

Host:orares
SIHA Home:/u01/app/grid/19c/grid_1
Version:19.0.0.0.0
Summary:

==Following patches were SUCCESSFULLY applied:

Patch: /u01/software/39036936/39034528
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_11-36-39AM_1.log

Patch: /u01/software/39036936/39039430
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_11-36-39AM_1.log

Patch: /u01/software/39036936/39055473
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_11-36-39AM_1.log

Patch: /u01/software/39036936/39107825
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_11-36-39AM_1.log

Patch: /u01/software/39036936/39107855
Log: /u01/app/grid/19c/grid_1/cfgtoollogs/opatchauto/core/opatch/opatch2026-06-23_11-36-39AM_1.log

OPatchauto session completed at Tue Jun 23 13:35:42 2026
Time taken to complete the session 165 minutes, 50 seconds

[root@orares 39036936]#

The full run took about 165 minutes, comfortably inside the 180-minute maintenance window planned at the start.

Step 8: Reboot and Verify Services Come Back Up

Reboot the server after patching, then verify that Oracle Restart, ASM, the listener, and the database services have all started successfully.


[root@orares ~]# init 6

Remote side unexpectedly closed network connection

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Session stopped
    - Press  to exit tab
    - Press R to restart session
    - Press S to save terminal output to file
    ┌──────────────────────────────────────────────────────────────────────┐
    │                 • MobaXterm Personal Edition v23.2 •                 │
    │               (SSH client, X server and network tools)               │
    │                                                                      │
    │ ⮞ SSH session to root@192.168.1.45                                   │
    │   • Direct SSH      :  ✓                                             │
    │   • SSH compression :  ✓                                             │
    │   • SSH-browser     :  ✓                                             │
    │   • X11-forwarding  :  ✓  (remote display is forwarded through SSH)  │
    │                                                                      │
    │ ⮞ For more info, ctrl+click on help or visit our website.            │
    └──────────────────────────────────────────────────────────────────────┘

Last login: Tue Jun 23 10:32:11 2026 from 192.168.1.36
[root@orares ~]#
[root@orares ~]# uptime -p
up 3 minutes
[root@orares ~]#
[root@orares ~]# ps -ef|grep d.bin
oracle    2761     1  4 13:41 ?        00:00:05 /u01/app/grid/19c/grid_1/bin/ohasd.bin reboot
oracle    3227     1  0 13:42 ?        00:00:00 /u01/app/grid/19c/grid_1/bin/evmd.bin
oracle    3396     1  1 13:42 ?        00:00:01 /u01/app/grid/19c/grid_1/bin/ocssd.bin
root      4229  2788  0 13:43 pts/1    00:00:00 grep --color=auto d.bin
[root@orares ~]#
[root@orares ~]# ps -ef|grep pmon
oracle    3492     1  0 13:42 ?        00:00:00 asm_pmon_+ASM
oracle    3752     1  0 13:43 ?        00:00:00 ora_pmon_orcldb
root      4250  2788  0 13:43 pts/1    00:00:00 grep --color=auto pmon
[root@orares ~]#
[root@orares ~]# ps -ef|grep tns
root        22     2  0 13:40 ?        00:00:00 [netns]
oracle    3231     1  0 13:42 ?        00:00:00 /u01/app/grid/19c/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit
root      4281  2788  0 13:43 pts/1    00:00:00 grep --color=auto tns
[root@orares ~]#

The SSH session dropping mid-reboot is expected, it's just the server going down, not an error. Reconnecting a few minutes later confirms Oracle Restart, ASM, and the listener all came back up on their own without manual intervention.

Step 9: Run the Post-Patching Checks

After the reboot, run the post-patching checks to confirm the Release Update applied cleanly and validate the overall health of the environment.


For GI Home:

[oracle@orares ~]$ cd /u01/app/grid/19c/grid_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lspatches
39107855;TOMCAT RELEASE UPDATE 19.0.0.0.0 (39107855)
39107825;DBWLM RELEASE UPDATE 19.0.0.0.0 (39107825)
39055473;ACFS RELEASE UPDATE 19.31.0.0.0 (39055473)
39039430;OCW RELEASE UPDATE 19.31.0.0.0 (39039430)
39034528;Database Release Update : 19.31.0.0.260421 (REL-APR2026) (39034528)

OPatch succeeded.
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lsinventory|grep -i applied
Patch  39107855     : applied on Tue Jun 23 12:07:13 IST 2026
Patch  39107825     : applied on Tue Jun 23 12:06:58 IST 2026
Patch  39055473     : applied on Tue Jun 23 12:05:35 IST 2026
Patch  39039430     : applied on Tue Jun 23 12:04:30 IST 2026
Patch  39034528     : applied on Tue Jun 23 11:49:04 IST 2026
[oracle@orares OPatch]$
[oracle@orares OPatch]$ cd /u01/app/grid/19c/grid_1/bin
[oracle@orares bin]$
[oracle@orares bin]$ ./crsctl check has
CRS-4638: Oracle High Availability Services is online
[oracle@orares bin]$ ./crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       orares                   STABLE
ora.DATA.dg
               ONLINE  ONLINE       orares                   STABLE
ora.FRA.dg
               ONLINE  ONLINE       orares                   STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       orares                   STABLE
ora.asm
               ONLINE  ONLINE       orares                   Started,STABLE
ora.ons
               OFFLINE OFFLINE      orares                   STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       orares                   STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       orares                   STABLE
ora.orcldb.db
      1        ONLINE  ONLINE       orares                   Open,HOME=/u01/app/o
                                                             racle/19c/db_1,STABL
                                                             E
--------------------------------------------------------------------------------
[oracle@orares bin]$
[oracle@orares bin]$ ./crsctl query has softwareversion
Oracle High Availability Services version on the local node is [19.0.0.0.0]
[oracle@orares bin]$
[oracle@orares bin]$ . oraenv
ORACLE_SID = [oracle] ? +ASM
The Oracle base has been set to /u01/app/grid
[oracle@orares bin]$
[oracle@orares bin]$ sqlplus -v

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.31.0.0.0

[oracle@orares bin]$
[oracle@orares bin]$
[oracle@orares bin]$ ps -ef|grep pmon
oracle    3492     1  0 13:42 ?        00:00:00 asm_pmon_+ASM
oracle    3752     1  0 13:43 ?        00:00:00 ora_pmon_orcldb
oracle    6370  5010  0 13:49 pts/2    00:00:00 grep --color=auto pmon
[oracle@orares bin]$
[oracle@orares bin]$ ps -ef|grep tns
root        22     2  0 13:40 ?        00:00:00 [netns]
oracle    3231     1  0 13:42 ?        00:00:00 /u01/app/grid/19c/grid_1/bin/tnslsnr LISTENER -no_crs_notify -inherit
oracle    6411  5010  0 13:49 pts/2    00:00:00 grep --color=auto tns
[oracle@orares bin]$
[oracle@orares bin]$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 23-JUN-2026 13:49:20

Copyright (c) 1991, 2026, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orares.oraeasy.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                23-JUN-2026 13:42:09
Uptime                    0 days 0 hr. 7 min. 11 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/19c/grid_1/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/orares/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=orares.oraeasy.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_CRS" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "46a3632ba42417ede0651fe43e14032c" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orcldb" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orcldbXDB" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
Service "orclpdb" has 1 instance(s).
  Instance "orcldb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@orares bin]$

For Database Home:

[oracle@orares ~]$  cd /u01/app/oracle/19c/db_1/OPatch
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lspatches
39039430;OCW RELEASE UPDATE 19.31.0.0.0 (39039430)
39034528;Database Release Update : 19.31.0.0.260421 (REL-APR2026) (39034528)

OPatch succeeded.
[oracle@orares OPatch]$
[oracle@orares OPatch]$ ./opatch lsinventory|grep -i applied
Patch  39039430     : applied on Tue Jun 23 11:33:04 IST 2026
Patch  39034528     : applied on Tue Jun 23 11:17:06 IST 2026
[oracle@orares OPatch]$
[oracle@orares OPatch]$ . oraenv
ORACLE_SID = [oracle] ? orcldb
The Oracle base has been set to /u01/app/oracle
[oracle@orares OPatch]$
[oracle@orares OPatch]$ sqlplus -v

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.31.0.0.0

[oracle@orares OPatch]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 23 13:50:24 2026
Version 19.31.0.0.0

Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.31.0.0.0

SQL>
SQL> def
DEFINE _DATE           = "23-JUN-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcldb" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1931000000" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.31.0.0.0" (CHAR)
DEFINE _O_RELEASE      = "1931000000" (CHAR)
SQL> SET LINESIZE 333 PAGESIZE 333
SQL> SELECT name, db_unique_name, database_role, open_mode FROM v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE
--------- ------------------------------ ---------------- --------------------
ORCLDB    orcldb                         PRIMARY          READ WRITE

SQL> SELECT banner_full FROM v$version;

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

SQL> col ACTION_TIME for a20
SQL> col ACTION for a10
SQL> col STATUS for a10
SQL> select patch_uid,patch_id,SOURCE_VERSION, TARGET_VERSION, action, status,action_time,description from dba_registry_sqlpatch;

 PATCH_UID   PATCH_ID SOURCE_VERSION  TARGET_VERSION  ACTION     STATUS     ACTION_TIME          DESCRIPTION
---------- ---------- --------------- --------------- ---------- ---------- -------------------- -------------------------------------------------------------------
  22862832   29517242 19.1.0.0.0      19.3.0.0.0      APPLY      SUCCESS    23-DEC-25 11.09.19.4 Database Release Update : 19.3.0.0.190416 (29517242)
                                                                            00612 PM

  28740323   39034528 19.3.0.0.0      19.31.0.0.0     APPLY      SUCCESS    23-JUN-26 12.50.29.5 Database Release Update : 19.31.0.0.260421 (REL-APR2026) (39034528)
                                                                            98423 PM

SQL> col comp_id for a10
SQL> col version for a11
SQL> col status for a10
SQL> col comp_name for a37
SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  LOADING
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
SQL>
SQL> alter session set container=ORCLPDB;

Session altered.

SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  LOADING
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

Everything checks out: both homes report 19.31 patches applied, CRS, ASM, the listener, and the database are all online, and there are zero invalid objects. The one thing to note is the Spatial (SDO) component showing LOADING instead of VALID, that's addressed next.

Step 10: Recompile to Clear the SDO Component

An SDO component sitting in LOADING right after an RU is a common, expected side effect of the patch, not a failure. Running utlrp.sql in both the CDB root and the PDB forces recompilation and clears it.


For CDB:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
         
SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  LOADING
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> @?/rdbms/admin/utlrp.sql

Session altered.

TIMESTAMP
------------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN              2026-06-23 13:56:25

DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>   objects in the database. Recompilation time is proportional to the
DOC>   number of invalid objects in the database, so this command may take
DOC>   a long time to execute on a database with a large number of invalid
DOC>   objects.
DOC>
DOC>   Use the following queries to track recompilation progress:
DOC>
DOC>   1. Query returning the number of invalid objects remaining. This
DOC>      number should decrease with time.
DOC>         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC>
DOC>   2. Query returning the number of objects compiled so far. This number
DOC>      should increase with time.
DOC>         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
DOC>   This script automatically chooses serial or parallel recompilation
DOC>   based on the number of CPUs available (parameter cpu_count) multiplied
DOC>   by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC>   On RAC, this number is added across all RAC nodes.
DOC>
DOC>   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC>   recompilation. Jobs are created without instance affinity so that they
DOC>   can migrate across RAC nodes. Use the following queries to verify
DOC>   whether UTL_RECOMP jobs are being created and run correctly:
DOC>
DOC>   1. Query showing jobs created by UTL_RECOMP
DOC>         SELECT job_name FROM dba_scheduler_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>   2. Query showing UTL_RECOMP jobs that are running
DOC>         SELECT job_name FROM dba_scheduler_running_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#

PL/SQL procedure successfully completed.


TIMESTAMP
----------------------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END              2026-06-23 13:56:34

DOC> The following query reports the number of invalid objects.
DOC>
DOC> If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#

OBJECTS WITH ERRORS
-------------------
                  0

DOC> The following query reports the number of exceptions caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC> Note: Typical compilation errors (due to coding errors) are not
DOC>       logged into this table: they go into DBA_ERRORS instead.
DOC>#

ERRORS DURING RECOMPILATION
---------------------------
                          0

Function created.

PL/SQL procedure successfully completed.

Function dropped.

PL/SQL procedure successfully completed.

SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  VALID
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

For PDB:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
         
SQL> alter session set container=ORCLPDB;

Session altered.

SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  LOADING
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL> @?/rdbms/admin/utlrp.sql

Session altered.

TIMESTAMP
-------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN              2026-06-23 13:58:11

DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>   objects in the database. Recompilation time is proportional to the
DOC>   number of invalid objects in the database, so this command may take
DOC>   a long time to execute on a database with a large number of invalid
DOC>   objects.
DOC>
DOC>   Use the following queries to track recompilation progress:
DOC>
DOC>   1. Query returning the number of invalid objects remaining. This
DOC>      number should decrease with time.
DOC>         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC>
DOC>   2. Query returning the number of objects compiled so far. This number
DOC>      should increase with time.
DOC>         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
DOC>   This script automatically chooses serial or parallel recompilation
DOC>   based on the number of CPUs available (parameter cpu_count) multiplied
DOC>   by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC>   On RAC, this number is added across all RAC nodes.
DOC>
DOC>   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC>   recompilation. Jobs are created without instance affinity so that they
DOC>   can migrate across RAC nodes. Use the following queries to verify
DOC>   whether UTL_RECOMP jobs are being created and run correctly:
DOC>
DOC>   1. Query showing jobs created by UTL_RECOMP
DOC>         SELECT job_name FROM dba_scheduler_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>   2. Query showing UTL_RECOMP jobs that are running
DOC>         SELECT job_name FROM dba_scheduler_running_jobs
DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#

PL/SQL procedure successfully completed.

TIMESTAMP
---------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END              2026-06-23 13:58:22

DOC> The following query reports the number of invalid objects.
DOC>
DOC> If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#

OBJECTS WITH ERRORS
-------------------
                  0

DOC> The following query reports the number of exceptions caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC> Note: Typical compilation errors (due to coding errors) are not
DOC>       logged into this table: they go into DBA_ERRORS instead.
DOC>#

ERRORS DURING RECOMPILATION
---------------------------
                          0

Function created.

PL/SQL procedure successfully completed.

Function dropped.

PL/SQL procedure successfully completed.

SQL> select comp_id,comp_name,version,status from dba_registry;

COMP_ID    COMP_NAME                             VERSION     STATUS
---------- ------------------------------------- ----------- ----------
CATALOG    Oracle Database Catalog Views         19.0.0.0.0  VALID
CATPROC    Oracle Database Packages and Types    19.0.0.0.0  VALID
RAC        Oracle Real Application Clusters      19.0.0.0.0  OPTION OFF
JAVAVM     JServer JAVA Virtual Machine          19.0.0.0.0  VALID
XML        Oracle XDK                            19.0.0.0.0  VALID
CATJAVA    Oracle Database Java Packages         19.0.0.0.0  VALID
APS        OLAP Analytic Workspace               19.0.0.0.0  VALID
XDB        Oracle XML Database                   19.0.0.0.0  VALID
OWM        Oracle Workspace Manager              19.0.0.0.0  VALID
CONTEXT    Oracle Text                           19.0.0.0.0  VALID
ORDIM      Oracle Multimedia                     19.0.0.0.0  VALID
SDO        Spatial                               19.0.0.0.0  VALID
XOQ        Oracle OLAP API                       19.0.0.0.0  VALID
OLS        Oracle Label Security                 19.0.0.0.0  VALID
DV         Oracle Database Vault                 19.0.0.0.0  VALID

15 rows selected.

SQL>
SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

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

Both Grid Infrastructure and Database homes are now confirmed on 19.31, CRS and the database are online, and the SDO component is back to VALID with zero invalid objects in both the CDB and PDB. The Oracle 19c (19.31 RU) patching is now complete, and the environment has been successfully validated through the recommended post-patching checks.

If you're setting up Oracle Restart for the first time, check out my previous article on Oracle Restart installation and configuration in Oracle 19c, where I cover the complete installation and initial setup process.

Oracle Restart || Standalone Database with ASM


Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome — feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments