CDB/PDBData GuardPatching, Installations & Upgrade

In-Place Patching Oracle AI Database 26ai from 23.26.1.0.0 to 23.26.3.0.0 with PDB Data Guard

By August 22, 2026No Comments13 min read

Oracle regularly releases Release Updates to address security vulnerabilities, product defects, stability issues, and other fixes across the Oracle Database stack. Keeping database environments current with these updates is an important part of maintaining secure and supported systems. Before applying an RU, it is recommended to review the patch README, applicable My Oracle Support notes, known issues, and the latest Oracle Critical Patch Updates and Security Alerts.

In this article, I demonstrate an in-place patching of Oracle AI Database 26ai from 23.26.1.0.0 to 23.26.3.0.0 using Database Release Update patch 39578879 in a PDB-level Data Guard environment. This RU is also Data Guard Standby-First installable, providing additional flexibility by allowing an eligible patch to be applied to the standby before the primary and helping reduce patching risk and downtime. The exercise covers stopping redo transport and PDB apply, performing the in-place patch using OPatch, restarting the environment, restoring Data Guard synchronization, and validating the patching activity.

Environment

The database is initially running Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0, the target Release Update is Oracle AI Database 26ai Release Update 23.26.3.0.0.

The binary Database Release Update used for the in-place patching is: Patch 39578879 – Database Release Update 23.26.3.0.0

The objective is to update the existing Oracle Home rather than provision and switch the database to a new Oracle Home.

Stop Redo Transport from the Primary

Before beginning the patching activity, verify the source PDB and its active Data Guard target.

-- Stop Transport from primary
DGMGRL> show pluggable database ruh_pdb at orclruh
Pluggable database - RUH_PDB at orclruh
  Data Guard Role:     Primary
  Con_ID:              3
  Active Target:       con_id 4 at ORCLJED
Pluggable Database Status:
SUCCESS
DGMGRL>
DGMGRL> edit database orclruh set state='transport-off';
Succeeded.
DGMGRL>
DGMGRL> show database orclruh
Database - ORCLRUH
  Role:                PRIMARY
  Intended State:      TRANSPORT-OFF
  Redo Rate:           141.50 KByte/s  in 15 seconds (computed 13 seconds ago)
  PDB Data Guard Role: SOURCE
  Data Guard Source PDB(s): 1
  Instance(s):
    ORCLCDB
Database Status:
SUCCESS
DGMGRL>

The source PDB reports its Data Guard role as Primary and identifies the active target in the remote CDB. Redo transport is then disabled at the database level, and the subsequent status confirms that the intended state has changed to TRANSPORT-OFF.

An important distinction with PDB-level Data Guard is that redo transport is controlled at the database level rather than by setting TRANSPORT-OFF on the individual source PDB.

Stop Redo Apply on the Standby PDB

Before stopping redo apply, verify that apply is currently running on the target PDB.

-- Stop MRP on standby PDB 
DGMGRL> edit pluggable database jed_pdb at orcljed set state='apply-on';
Succeeded.
DGMGRL> show pluggable database jed_pdb at orcljed
Pluggable database - JED_PDB at orcljed
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at ORCLRUH
  Transport Lag:       0 seconds (computed 1 second ago)
  Apply Lag:           (unknown)
  Intended State:      APPLY-ON
  Apply State:         Running
  Apply Instance:      ORCLCDB
  Average Apply Rate:  6 KByte/s
  Real Time Query:     ON
Pluggable Database Status:
SUCCESS
DGMGRL> edit pluggable database jed_pdb at orcljed set state='apply-off';
Succeeded.
DGMGRL> show pluggable database jed_pdb at orcljed
Pluggable database - JED_PDB at orcljed
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at ORCLRUH
  Transport Lag:       0 seconds (computed 0 second ago)
  Apply Lag:           (unknown)
  Intended State:      APPLY-OFF
  Apply State:         Not Running
Pluggable Database Status:
SUCCESS
DGMGRL>

The standby PDB initially shows APPLY-ON with the apply process running. After changing the state to APPLY-OFF, Data Guard Broker confirms that redo apply is no longer running.

At this stage, redo transport from the primary and redo apply on the standby PDB have been stopped.

Verify OPatch Version

Before applying the Release Update, verify the OPatch version available in the Oracle Home.

- Update Opatch to new version 
[oracle@ggate2 staging]$ cd $ORACLE_HOME/OPatch
[oracle@ggate2 OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.52
OPatch succeeded.
[oracle@ggate2 OPatch]$
OPatch succeeded.
[oracle@ggate2 OPatch]$ cd /data/staging/39578879/
[oracle@ggate2 39578879]$ pwd
/data/staging/39578879

The environment is using OPatch version 12.2.0.1.52.

Run OPatch Prerequisite Checks

Verify that the installed OPatch version satisfies the minimum requirement for the patch.

[oracle@ggate2 39578879]$ $ORACLE_HOME/OPatch/opatch prereq CheckMinimumOPatchVersion -ph ./
Oracle Interim Patch Installer version 12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved.
PREREQ session
Oracle Home       : /opt/oracle/product/26ai/dbhome_2
Central Inventory : /data/app/oraInventory
   from           : /opt/oracle/product/26ai/dbhome_2/oraInst.loc
OPatch version    : 12.2.0.1.52
OUI version       : 12.2.0.9.0
Log file location : /opt/oracle/product/26ai/dbhome_2/cfgtoollogs/opatch/opatch2026-08-21_01-28-51AM_1.log
Invoking prereq "checkminimumopatchversion"
Prereq "checkMinimumOPatchVersion" passed.
OPatch succeeded.
[oracle@ggate2 39578879]$

The minimum OPatch version prerequisite completed successfully.

Next, check whether the new RU conflicts with any patches already installed in the Oracle Home.

[oracle@ggate2 39578879]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir  ./
Oracle Interim Patch Installer version 12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved.
PREREQ session
Oracle Home       : /opt/oracle/product/26ai/dbhome_2
Central Inventory : /data/app/oraInventory
   from           : /opt/oracle/product/26ai/dbhome_2/oraInst.loc
OPatch version    : 12.2.0.1.52
OUI version       : 12.2.0.9.0
Log file location : /opt/oracle/product/26ai/dbhome_2/cfgtoollogs/opatch/opatch2026-08-21_01-29-17AM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
[oracle@ggate2 39578879]$

The conflict check also completed successfully, allowing the patching activity to proceed.

Shut Down the Database and Listener

Shut down the database instance and listener running from the Oracle Home before applying the binary patch.

SQL> shut immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0
[oracle@ggate2 39578879]$ lsnrctl stop
LSNRCTL for Linux: Version 23.26.1.0.0 - Production on 21-AUG-2026 01:30:27
Copyright (c) 1991, 2026, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
[oracle@ggate2 39578879]$

At this point, both the database and listener are still running the 23.26.1.0.0 binaries.

Check Available Filesystem Space

Verify that sufficient space is available on the filesystem containing the Oracle Home before starting the patch.

-- Apply patch 
[root@ggate2 foreign_archives]# df -h /opt
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/ol-root  103G   85G   19G  83% /
[root@ggate2 foreign_archives]# exit
logout

In this environment, 19 GB of free space was available before starting the patch operation.

Apply Database RU 23.26.3.0.0 In Place

Apply patch 39578879 directly to the existing Oracle Home using OPatch.

[oracle@ggate2 39578879]$ $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved.
Oracle Home       : /opt/oracle/product/26ai/dbhome_2
Central Inventory : /data/app/oraInventory
   from           : /opt/oracle/product/26ai/dbhome_2/oraInst.loc
OPatch version    : 12.2.0.1.52
OUI version       : 12.2.0.9.0
Log file location : /opt/oracle/product/26ai/dbhome_2/cfgtoollogs/opatch/opatch2026-08-21_01-38-47AM_1.log
Verifying environment and performing prerequisite checks...
--------------------------------------------------------------------------------
Start OOP by Prereq process.
Launch OOP...
Oracle Interim Patch Installer version 12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved.
Oracle Home       : /opt/oracle/product/26ai/dbhome_2
Central Inventory : /data/app/oraInventory
   from           : /opt/oracle/product/26ai/dbhome_2/oraInst.loc
OPatch version    : 12.2.0.1.52
OUI version       : 12.2.0.9.0
Log file location : /opt/oracle/product/26ai/dbhome_2/cfgtoollogs/opatch/opatch2026-08-21_01-40-29AM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   39578879
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/opt/oracle/product/26ai/dbhome_2')
....
...
..
.
Patching component oracle.xdk.parser.java, 23.0.0.0.0...
Patching component oracle.xdk.rsf, 23.0.0.0.0...
Patching component oracle.xdk.server, 23.0.0.0.0...
Patching component oracle.xdk.xquery, 23.0.0.0.0...
Patch 39578879 successfully applied.
Sub-set patch [38743669] has become inactive due to the application of a super-set patch [39578879].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /opt/oracle/product/26ai/dbhome_2/cfgtoollogs/opatch/opatch2026-08-21_01-40-29AM_1.log
OPatch succeeded.
[oracle@ggate2 39578879]$

Patch 39578879 was successfully applied to the existing Oracle Home. OPatch also reports that the previously installed patch 38743669 became inactive because the new RU is a superseding patch.

Verify the Oracle Home Patch Inventory

Verify the installed patches after OPatch completes.

[oracle@ggate2 39578879]$  $ORACLE_HOME/OPatch/opatch lspatches
39578879;Database Release Update : 23.26.3.0.0 (39578879)
38743688;OCW RELEASE UPDATE 23.26.1.0.0 (GOLD IMAGE) (38743688) Gold Image
OPatch succeeded.
[oracle@ggate2 39578879]$

The Oracle Home now reports Database Release Update 23.26.3.0.0, confirming that the binary RU has been installed successfully.

Start the Listener and Database

Start the listener and database using the patched Oracle Home.

-- Start the Listener & Database 
[oracle@ggate2 39578879]$ lsnrctl start
LSNRCTL for Linux: Version 23.26.3.0.0 - Production on 21-AUG-2026 10:17:17
Copyright (c) 1991, 2026, Oracle.  All rights reserved.
Starting /opt/oracle/product/26ai/dbhome_2/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 23.26.3.0.0 - Production
Log messages written to /data/app/oracle/diag/tnslsnr/ggate2/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ggate2)(PORT=1521)))
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 23.26.3.0.0 - Production
Start Date                21-AUG-2026 10:17:17
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /data/app/oracle/diag/tnslsnr/ggate2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ggate2)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@ggate2 39578879]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.3.0.0 - Production on Fri Aug 21 10:17:23 2026
Version 23.26.3.0.0
Copyright (c) 1982, 2026, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  797761256 bytes
Fixed Size                  5037800 bytes
Variable Size             398458880 bytes
Database Buffers          390070272 bytes
Redo Buffers                4194304 bytes
Database mounted.
Database opened.
SQL>

The listener and SQL*Plus now report version 23.26.3.0.0, confirming that the environment is running from the patched Oracle Home.

Resume Data Guard Transport and Apply

Once the database is available, enable redo transport on the primary database and restart redo apply on the standby PDB.

DGMGRL> edit database orclruh set state='transport-on';
Succeeded.
DGMGRL> edit pluggable database jed_pdb at orcljed set state='apply-on';
Succeeded.
DGMGRL>

Redo transport and PDB-level apply are now enabled again.

Check the Database Patch History

Verify the database patch history.

SQL>  select action_time,action,version from registry$history;
ACTION_TIME                                                                 ACTION                         VERSION
--------------------------------------------------------------------------- ------------------------------ ------------------------------
                                                                            BOOTSTRAP                      23
                                                                            BOOTSTRAP                      23
                                                                            BOOTSTRAP                      23
                                                                            BOOTSTRAP                      23
                                                                            BOOTSTRAP                      23
15-AUG-26 03.34.59.473572 PM                                                RU_INSTALL                     23.26.1.0.0
6 rows selected.
SQL>

At this stage, the Oracle binaries and OPatch inventory report 23.26.3.0.0, while the captured database registry output still shows the previous 23.26.1.0.0 RU. This demonstrates why the binary and SQL patch levels should be validated independently as part of the post-patching checks.

Verify PDB Data Guard Synchronization

After restoring transport and apply, verify the standby PDB using Data Guard Broker.

Connected as SYSDG.
DGMGRL> show pluggable database jed_pdb at orcljed
Pluggable database - JED_PDB at orcljed
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at ORCLRUH
  Transport Lag:       0 seconds (computed 2 seconds ago)
  Apply Lag:           0 seconds (computed 2 seconds ago)
  Intended State:      APPLY-ON
  Apply State:         Running
  Apply Instance:      ORCLCDB
  Average Apply Rate:  9671 KByte/s
  Real Time Query:     OFF
Pluggable Database Status:
SUCCESS
DGMGRL>

Transport lag and apply lag have returned to zero seconds, the intended state is APPLY-ON, and the apply process is running. The overall PDB Data Guard status is SUCCESS.

Verify Redo Reception and Recovery

The standby alert log provides additional confirmation that redo transport and recovery have resumed.

2026-08-21T10:23:31.090581+05:30
JED_PDB(4):TT07 (PID:76170): Media Recovery Waiting for T-1.S-46 [krsm.c:6216]
2026-08-21T10:23:31.375181+05:30
 rfs (PID:76235): krsr_rfs_atc: DBROLE:PRIMARY Client is ASYNC DB: (PID:72879) [krsr.c:6182]
 rfs (PID:76235): Foreign redo connection for ORCLRUH(DBID:2995054893), Client is ASYNC (PID:72879) [krsr.c:6963]
2026-08-21T10:23:31.795273+05:30
TT06 (PID:76156): Archived Log entry 37 added for B-1223993519.T-1.S-45 LOS:0x0000000000626f2d NXS:0x000000000062c094 NAB:81009 ID 0xb284e52d LAD:1 [krse.c:4896]
2026-08-21T10:23:31.805668+05:30
 rfs (PID:76235): Opened LNO:1 for DBID:2995054893 B-1223993519.T-1.S-46.C-0 [krsr.c:19655]
2026-08-21T10:23:32.425602+05:30
JED_PDB(4):*** 2026-08-21T10:23:32.425446+05:30
JED_PDB(4):Recovery of Foreign Standby Redo Log: Thread 1 Group 1 Seq 46 Reading mem 0
2026-08-21T10:23:32.426205+05:30
JED_PDB(4):  Mem# 0: /data/app/oracle/oradata/ORCLJED/onlinelog/o1_mf_1_o82tb70o_.log

The alert log confirms that the foreign redo connection from the source has been established and recovery of the standby redo is taking place.

Post-Patching Verification

A successful OPatch operation should not be the only validation performed after applying a Database Release Update. Verify the Oracle Home inventory, binary version, SQL patch registry, database/PDB status, and Data Guard transport and apply status.

In this exercise, OPatch inventory and the restarted Oracle binaries report 23.26.3.0.0, while the captured registry output still shows 23.26.1.0.0. The SQL patching stage therefore needs to be completed and verified before considering the RU fully installed. Data Guard has successfully resumed with zero transport and apply lag.

Conclusion

This exercise demonstrated in-place patching of Oracle AI Database 26ai from 23.26.1.0.0 to 23.26.3.0.0 using DB RU patch 39578879 in a PDB-level Data Guard environment. The existing Oracle Home was successfully patched using OPatch, after which redo transport and PDB apply were restored and Data Guard returned to a SUCCESS state with zero transport and apply lag. The exercise also highlights the importance of validating both the binary and SQL patch levels after an RU installation and considering Oracle’s Standby-First patching capability when planning Data Guard maintenance.

References

Oracle Critical Patch Updates, Security Alerts and Bulletins

My Oracle Support KB137118 – Oracle Patch Assurance – Data Guard Standby-First Patch Apply

Leave a Reply