This post explains how to apply a higher Release Update (RU) to a single Oracle database when multiple databases share the same Oracle home using Out-of-place patching.
Environment:
==========
DB Type: CDB with one PDB for each database
DB Home and Version of shared Home: /u01/app/oracle/product/19c/db, 19.27
Databases: PROD (PRODPDB1), DEV (DEVPDB1)
Applying RU to DB and version: DEV, 19.30
New RU Home: /u01/app/oracle/product/19.30/db
OS: OEL 9.4
1. Check Current Patch Level for DEV DB.
SET LINESIZE 200
SET PAGESIZE 50
COLUMN DB_NAME FORMAT A15
COLUMN BANNER_FULL FORMAT A100
SELECT
(SELECT name FROM v$database) AS DB_NAME,
(SELECT banner_full FROM v$version WHERE banner LIKE ‘Oracle%’) AS BANNER_FULL FROM dual;
DB_NAME BANNER_FULL
————— —————————————————————————————————-
DEV Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.27.0.0.0
—
SET LINESIZE 200
SET PAGESIZE 50
COLUMN PATCH_ID FORMAT 99999999999
COLUMN PATCH_UID FORMAT 99999999999
COLUMN DESCRIPTION FORMAT A54
COLUMN STATUS FORMAT A10
COLUMN ACTION FORMAT A10
COLUMN ACTION_TIME FORMAT A30
SELECT patch_id, patch_uid, description, status, action, action_time
FROM dba_registry_sqlpatch
ORDER BY action_time DESC;
PATCH_ID PATCH_UID DESCRIPTION STATUS ACTION ACTION_TIME
———— ———— —————————————————— ———- ———- ——————————
37642901 27123174 Database Release Update : 19.27.0.0.250415 (37642901) SUCCESS APPLY 03-08-26 2:35:34.833297 PM
2. Create new Oracle Home for 19.30 and install 19.3 with 19.30 RDBMS binaries.
– Create directories for new ORACLE HOME
– Upgrade tge OPatch with latest version
– Copy and unzip the 19.3 binaries
– Unzip the 19.30 RU patch at patch location
[oracle@prod ~]$ mkdir -p /u01/app/oracle/product/19.30/db
[oracle@prod ~]$ export CV_ASSUME_DISTID=OEL7.8
[oracle@prod db]$ export ORACLE_HOME=/u01/app/oracle/product/19.30/db
[oracle@prod ~]$ export TNS_ADMIN=$ORACLE_HOME/network/admin
[oracle@prod ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@prod ~]$ cd /u01/app/oracle/product/19.30/db
[oracle@prod db]$ ./runInstaller -applyRU /miss/oracle/19.30/38632161
Preparing the home to patch…
Applying the patch /miss/oracle/19.30/38632161…
Successfully applied the patch.
The log can be found at: /u01/app/oraInventory/logs/InstallActions2026-08-03_03-21-31PM/installerPatchActions_2026-08-03_03-21-31PM.log
Launching Oracle Database Setup Wizard…
The response file for this session can be found at:
/u01/app/oracle/product/19.30/db/install/response/db_2026-08-03_03-21-31PM.rsp
You can find the log of this install session at:
/u01/app/oraInventory/logs/InstallActions2026-08-03_03-21-31PM/installActions2026-08-03_03-21-31PM.log
—
Check the version.
[oracle@prod ~]$ sqlplus -V
SQL*Plus: Release 19.0.0.0.0 – Production
Version 19.30.0.0.0
—
Shut down the DEV DB.
SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
3. Copy the network configuration files, password and init files to new RU home.
[oracle@prod dbs]$ cp orapwdev /u01/app/oracle/product/19.30/db/dbs
[oracle@prod dbs]$ cp initdev.ora /u01/app/oracle/product/19.30/db/dbs
[oracle@prod dbs]$ cp spfiledev.ora /u01/app/oracle/product/19.30/db/dbs
[oracle@prod admin]$ cp listener.ora /u01/app/oracle/product/19.30/db/network/admin/
[oracle@prod admin]$ cp tnsnames.ora /u01/app/oracle/product/19.30/db/network/admin/
[oracle@prod admin]$ cp sqlnet.ora /u01/app/oracle/product/19.30/db/network/admin/
—
[oracle@prod ~]$ cd /u01/app/oracle/product/19.30/db/network/admin
[oracle@prod admin]$ cat listener.ora
LISTENER_DEV =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.168)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
—
[oracle@prod admin]$ cat tnsnames.ora
DEV =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.168)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dev)
)
)
LISTENER_DEV =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.168)(PORT = 1522))
—
[oracle@prod admin]$ lsnrctl start LISTENER_DEV
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 03-AUG-2026 16:08:48
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Starting /u01/app/oracle/product/19.30/db/bin/tnslsnr: please wait…
TNSLSNR for Linux: Version 19.0.0.0.0 – Production
System parameter file is /u01/app/oracle/product/19.30/db/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/prod/listener_dev/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.168)(PORT=1522)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.168)(PORT=1522)))
STATUS of the LISTENER
————————
Alias LISTENER_DEV
Version TNSLSNR for Linux: Version 19.0.0.0.0 – Production
Start Date 03-AUG-2026 16:08:48
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19.30/db/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/prod/listener_dev/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.168)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
The listener supports no services
The command completed successfully
[oracle@prod admin]$ ps -ef | grep tns
root 6 2 0 14:12 ? 00:00:00 [netns]
oracle 64040 1 0 16:07 ? 00:00:00 /u01/app/oracle/product/19c/db/bin/tnslsnr LISTENER_PROD -inherit
oracle 64667 1 0 16:08 ? 00:00:00 /u01/app/oracle/product/19.30/db/bin/tnslsnr LISTENER_DEV -inherit
4. Start the DEV db from RU 19.30 HOME.
[oracle@prod ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Aug 3 16:10:19 2026
Version 19.30.0.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1610611992 bytes
Fixed Size 9178392 bytes
Variable Size 385875968 bytes
Database Buffers 1207959552 bytes
Redo Buffers 7598080 bytes
Database mounted.
Database opened.
SQL> @db
NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE INSTANCE_NAME HOST_NAME STARTUP_TIME
———- ————— ———- —————— ————— —————- ——————–
DEV dev READ WRITE PRIMARY dev prod 03-AUG-2026 16:10
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 DEVPDB1 MOUNTED
SQL> alter pluggable database all open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 DEVPDB1 READ WRITE NO
SQL> alter system register;
System altered.
[oracle@prod ~]$ lsnrctl status LISTENER_DEV
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 03-AUG-2026 16:13:40
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.168)(PORT=1522)))
STATUS of the LISTENER
————————
Alias LISTENER_DEV
Version TNSLSNR for Linux: Version 19.0.0.0.0 – Production
Start Date 03-AUG-2026 16:08:48
Uptime 0 days 0 hr. 4 min. 51 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19.30/db/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/prod/listener_dev/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.168)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary…
Service “58221a8a25756705e063a838a8c0da41” has 1 instance(s).
Instance “dev”, status READY, has 1 handler(s) for this service…
Service “86b637b62fdf7a65e053f706e80a27ca” has 1 instance(s).
Instance “dev”, status READY, has 1 handler(s) for this service…
Service “dev” has 1 instance(s).
Instance “dev”, status READY, has 1 handler(s) for this service…
Service “devXDB” has 1 instance(s).
Instance “dev”, status READY, has 1 handler(s) for this service…
Service “devpdb1” has 1 instance(s).
Instance “dev”, status READY, has 1 handler(s) for this service…
The command completed successfully
5. Run datapatch
[oracle@prod ~]$ cd $ORACLE_HOME/OPatch
[oracle@prod OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.30.0.0.0 Production on Mon Aug 3 16:18:16 2026
Copyright (c) 2012, 2026, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_68544_2026_08_03_16_18_16/sqlpatch_invocation.log
Connecting to database…OK
Gathering database info…done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
(Doc ID 1585822.1)
Bootstrapping registry and package to current versions…done
Determining current state…done
Current state of interim SQL patches:
No interim patches found
Current state of release update SQL patches:
Binary registry:
19.30.0.0.0 Release_Update 260126024251: Installed
PDB CDB$ROOT:
Applied 19.27.0.0.0 Release_Update 250406131139 successfully on 03-08-26 2:35:34.833297 PM
PDB DEVPDB1:
Applied 19.27.0.0.0 Release_Update 250406131139 successfully on 03-08-26 2:50:40.153831 PM
PDB PDB$SEED:
Applied 19.27.0.0.0 Release_Update 250406131139 successfully on 03-08-26 2:50:40.153831 PM
Adding patches to installation queue and performing prereq checks…done
Installation queue:
For the following PDBs: CDB$ROOT PDB$SEED DEVPDB1
No interim patches need to be rolled back
Patch 38632161 (Database Release Update : 19.30.0.0.260120(REL-JAN260130) (38632161)):
Apply from 19.27.0.0.0 Release_Update 250406131139 to 19.30.0.0.0 Release_Update 260126024251
No interim patches need to be applied
Installing patches…
Patch installation complete. Total patches installed: 3
Validating logfiles…done
Patch 38632161 apply (pdb CDB$ROOT): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/38632161/28482211/38632161_apply_DEV_CDBROOT_2026Aug03_16_19_50.log (no errors)
Patch 38632161 apply (pdb PDB$SEED): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/38632161/28482211/38632161_apply_DEV_PDBSEED_2026Aug03_16_22_05.log (no errors)
Patch 38632161 apply (pdb DEVPDB1): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/38632161/28482211/38632161_apply_DEV_DEVPDB1_2026Aug03_16_22_05.log (no errors)
SQL Patching tool complete on Mon Aug 3 16:24:05 2026
—
set linesize 300
col VERSION for a10
col ACTION for a20
col NAMESPACE for a15
col COMMENTS for a47
col ACTION_TIME for a30
select ACTION_TIME, ACTION, NAMESPACE,VERSION,COMMENTS from dba_registry_history;
ACTION_TIME ACTION NAMESPACE VERSION COMMENTS
—————————— ——————– ————— ———- ———————————————–
BOOTSTRAP DATAPATCH 19 RDBMS_19.30.0.0.0DBRU_LINUX.X64_260125
03-08-26 2:35:34.907919 PM RU_APPLY SERVER 19.0.0.0.0 Patch applied from 19.3.0.0.0 to 19.27.0.0.0: R
elease_Update – 250406131139
03-08-26 4:21:39.548974 PM RU_APPLY SERVER 19.0.0.0.0 Patch applied from 19.27.0.0.0 to 19.30.0.0.0:
Release_Update – 260126024251
set linesize 300
col status for a10
col ACTION_TIME for a35
select PATCH_ID,PATCH_TYPE,ACTION,ACTION_TIME,SOURCE_VERSION,TARGET_VERSION,STATUS from dba_registry_sqlpatch order by ACTION_TIME;
PATCH_ID PATCH_TYPE ACTION ACTION_TIME SOURCE_VERSION TARGET_VERSION STATUS
———- ———- ——————– ———————————– ————— ————— ———-
37642901 RU APPLY 03-08-26 2:35:34.833297 PM 19.1.0.0.0 19.27.0.0.0 SUCCESS
38632161 RU APPLY 03-08-26 4:21:39.508683 PM 19.27.0.0.0 19.30.0.0.0 SUCCESS
Now, the DEV database is successfully patched to RU 19.30.
Disclaimer:
Please note the above information is only for educational purpose and practised in personal test database only. Always test in test database before implementing in production database. The pre-requisites and ways of implementing may vary from one environment to another. Hence, not providing guarantee that it will work in your environment.