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.
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.

Comments
Post a Comment