April 15, 2026

How to Patch Oracle 19c to Release 19.30 on Windows – A Complete Step-by-Step Blog

 

As soon as  Oracle released quarterly patch for Jan 2026 , I had to patch one of my Oracle 19c databases from 19.25 to 19.30. Since this is something we DBAs do almost on every quarter, I decided to write down the exact steps I followed. The procedures are the same for all 19c versions.

Note: On production systems, always apply on test/dev first. Never patch production directly without testing!

Prerequisites

  • Oracle 19c database installed on Windows x86-64
  • Access to Oracle Support (MOS account)
  • OS user with ORACLE_HOME and ORACLE_BASE permissions
  • At least 12 GB free disk space in oracle_home directory
  • WinSCP or similar tool to transfer files to the server
  • Scheduled maintenance window (database downtime required)

 

Step 1: Download the Patch and OPatch Utility

Log in to Oracle Support and download the following:

  • Patch file: 38597735 → p38597735_190000_MSWIN-x86-64.zip
  • OPatch utility: 6880880 → p6880880_190000_MSWIN -x86-64.zip

Steps to download: Select Patches & Updates → enter patch number → select platform Windows x86-64 → download both files and review the README.

 

Step 2: Check and Update OPatch

On the server, check your current OPatch version:

cd %ORACLE_HOME%/OPatch

opatch version

 

 

You need version 12.2.0.1.48 or higher. If it's older, update it:

cd %ORACLE_HOME%

ren OPatch OPatch_backup1

robocopy p6880880_190000_MSWIN -x86-64.zip   %ORACLE_HOME%

cd %ORACLE_HOME%

unzip p6880880_190000_MSWIN -x86-64.zip

 

 

Step 3: Run Pre-checks

Before applying the patch, check for conflicts with existing patches:

C:\Users\Administrator>cd C:\software\oracle_patch_19.30\38597735

 

C:\software\oracle_patch_19.30\38597735>D:\oracle\product\19.3.0\dbhome_1\OPatch\opatch prereq CheckConflictAgainstOHWithDetail -ph ./

Oracle Interim Patch Installer version 12.2.0.1.49

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

 

PREREQ session

 

Oracle Home       : D:\oracle\product\19.3.0\dbhome_1

Central Inventory : C:\Program Files\Oracle\Inventory

   from           :

OPatch version    : 12.2.0.1.49

OUI version       : 12.2.0.7.0

Log file location : D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-04-14_19-40-37PM_1.log

 

Invoking prereq "checkconflictagainstohwithdetail"

 

Prereq "checkConflictAgainstOHWithDetail" passed.

 

OPatch succeeded.

 

As we see "OPatch succeeded", we are good to go. If there are conflicts, resolve them before proceeding.

Step 4: Stop the Database and Listener

sqlplus / as sysdba

 

SQL> shutdown immediate

SQL> exit

 

lsnrctl stop

 

 

Verify all services are completely down before moving to the next step.

Step 5: Clean Up Inactive Patches (Optional but Recommended)

This frees up Oracle Home space before applying the new patch:

cd %ORACLE_HOME%/OPatch

./opatch util listOrderedInactivePatches

./opatch util deleteInactivePatches

 

 

Step 6: Check Available Disk Space

Do not proceed if space is insufficient in oracle home

Step 7: Apply the Patch

C:\software\oracle_patch_19.30\38597735>D:\oracle\product\19.3.0\dbhome_1\OPatch\opatch apply

Oracle Interim Patch Installer version 12.2.0.1.49

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

 

 

Oracle Home       : D:\oracle\product\19.3.0\dbhome_1

Central Inventory : C:\Program Files\Oracle\Inventory

   from           :

OPatch version    : 12.2.0.1.49

OUI version       : 12.2.0.7.0

Log file location : D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-04-14_19-41-27PM_1.log

 

Verifying environment and performing prerequisite checks...

 

--------------------------------------------------------------------------------

Start OOP by Prereq process.

Launch OOP...

 

Oracle Interim Patch Installer version 12.2.0.1.49

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

 

 

Oracle Home       : D:\oracle\product\19.3.0\dbhome_1

Central Inventory : C:\Program Files\Oracle\Inventory

   from           :

OPatch version    : 12.2.0.1.49

OUI version       : 12.2.0.7.0

Log file location : D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-04-14_19-44-33PM_1.log

 

Verifying environment and performing prerequisite checks...

OPatch continues with these patches:   38597735

 

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 = 'D:\oracle\product\19.3.0\dbhome_1')

 

 

Is the local system ready for patching? [y|n]

y

User Responded with: Y

Backing up files...

Applying interim patch '38597735' to OH 'D:\oracle\product\19.3.0\dbhome_1'

ApplySession: Optional component(s) [ oracle.tomcat.crs, 19.0.0.0.0 ] , [ oracle.has.cfs, 19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.rdbms.ic, 19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.network.cman, 19.0.0.0.0 ] , [ oracle.has.deconfig, 19.0.0.0.0 ] , [ oracle.network.gsm, 19.0.0.0.0 ] , [ oracle.assistants.asm, 19.0.0.0.0 ] , [ oracle.wlm.dbwlm, 19.0.0.0.0 ] , [ oracle.rhp.crs, 19.0.0.0.0 ] , [ oracle.has.cvu, 19.0.0.0.0 ] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [ oracle.usm, 19.0.0.0.0 ] , [ oracle.ons.daemon, 19.0.0.0.0 ] , [ oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [ oracle.assistants.usm, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [ oracle.options.olap.awm, 19.0.0.0.0 ] , [ oracle.has.crs, 19.0.0.0.0 ]  not present in the Oracle Home or a higher version is found.

 

Patching component oracle.has.common.cvu, 19.0.0.0.0...

 

Patching component oracle.has.rsf, 19.0.0.0.0...

 

Patching component oracle.assistants.server, 19.0.0.0.0...

 

Patching component oracle.ons, 19.0.0.0.0...

 

Patching component oracle.rdbms.plsql, 19.0.0.0.0...

 

Patching component oracle.rdbms.util, 19.0.0.0.0...

 

Patching component oracle.sqlplus.ic, 19.0.0.0.0...

 

Patching component oracle.sdo.locator.jrf, 19.0.0.0.0...

 

Patching component oracle.perlint, 5.28.1.0.0...

 

Patching component oracle.swd.oui.core.min, 12.2.0.7.0...

 

Patching component oracle.sqlplus, 19.0.0.0.0...

 

Patching component oracle.dbjava.jdbc, 19.0.0.0.0...

 

Patching component oracle.network.listener, 19.0.0.0.0...

 

Patching component oracle.odbc.ic, 19.0.0.0.0...

 

Patching component oracle.rdbms.rman, 19.0.0.0.0...

 

Patching component oracle.dbjava.ucp, 19.0.0.0.0...

 

Patching component oracle.perlint.modules, 5.28.1.0.0...

 

Patching component oracle.precomp.common.core, 19.0.0.0.0...

 

Patching component oracle.oracore.rsf, 19.0.0.0.0...

 

Patching component oracle.ntoledb.odp_net_2, 19.0.0.0.0...

 

Patching component oracle.has.db, 19.0.0.0.0...

 

Patching component oracle.ntoramts, 19.0.0.0.0...

 

Patching component oracle.marvel, 19.0.0.0.0...

 

Patching component oracle.xdk.parser.java, 19.0.0.0.0...

 

Patching component oracle.network.client, 19.0.0.0.0...

 

Patching component oracle.blaslapack, 19.0.0.0.0...

 

Patching component oracle.tfa.db, 19.0.0.0.0...

 

Patching component oracle.ctx, 19.0.0.0.0...

 

Patching component oracle.rdbms.hsodbc, 19.0.0.0.0...

 

Patching component oracle.ldap.rsf, 19.0.0.0.0...

 

Patching component oracle.assistants.deconfig, 19.0.0.0.0...

 

Patching component oracle.sqlj.sqljruntime, 19.0.0.0.0...

 

Patching component oracle.ldap.owm, 19.0.0.0.0...

 

Patching component oracle.duma, 19.0.0.0.0...

 

Patching component oracle.precomp.lang, 19.0.0.0.0...

 

Patching component oracle.ntoledb, 19.0.0.0.0...

 

Patching component oracle.rdbms.rsf, 19.0.0.0.0...

 

Patching component oracle.rdbms.install.common, 19.0.0.0.0...

 

Patching component oracle.ldap.security.osdt, 19.0.0.0.0...

 

Patching component oracle.sdo, 19.0.0.0.0...

 

Patching component oracle.rdbms.rsf.ic, 19.0.0.0.0...

 

Patching component oracle.wwg.plsql, 19.0.0.0.0...

 

Patching component oracle.rdbms.lbac, 19.0.0.0.0...

 

Patching component oracle.oraolap, 19.0.0.0.0...

 

Patching component oracle.precomp.rsf, 19.0.0.0.0...

 

Patching component oracle.ntoledbolap, 19.0.0.0.0...

 

Patching component oracle.assistants.acf, 19.0.0.0.0...

 

Patching component oracle.rhp.common, 19.0.0.0.0...

 

Patching component oracle.javavm.server, 19.0.0.0.0...

 

Patching component oracle.precomp.common, 19.0.0.0.0...

 

Patching component oracle.network.rsf, 19.0.0.0.0...

 

Patching component oracle.ovm, 19.0.0.0.0...

 

Patching component oracle.install.deinstalltool, 19.0.0.0.0...

 

Patching component oracle.rdbms.oci, 19.0.0.0.0...

 

Patching component oracle.rsf, 19.0.0.0.0...

 

Patching component oracle.clrintg.ode_net_2, 19.0.0.0.0...

 

Patching component oracle.nlsrtl.rsf, 19.0.0.0.0...

 

Patching component oracle.xdk.server, 19.0.0.0.0...

 

Patching component oracle.rdbms.install.plugins, 19.0.0.0.0...

 

Patching component oracle.ctx.atg, 19.0.0.0.0...

 

Patching component oracle.javavm.client, 19.0.0.0.0...

 

Patching component oracle.oraolap.dbscripts, 19.0.0.0.0...

 

Patching component oracle.rdbms.deconfig, 19.0.0.0.0...

 

Patching component oracle.dbjava.ic, 19.0.0.0.0...

 

Patching component oracle.rdbms.dv, 19.0.0.0.0...

 

Patching component oracle.aspnet_2, 19.0.0.0.0...

 

Patching component oracle.ldap.client, 19.0.0.0.0...

 

Patching component oracle.usm.deconfig, 19.0.0.0.0...

 

Patching component oracle.dbdev, 19.0.0.0.0...

 

Patching component oracle.ons.ic, 19.0.0.0.0...

 

Patching component oracle.mgw.common, 19.0.0.0.0...

 

Patching component oracle.oracler.server, 19.0.0.0.0...

 

Patching component oracle.has.common, 19.0.0.0.0...

 

Patching component oracle.xdk.rsf, 19.0.0.0.0...

 

Patching component oracle.xdk, 19.0.0.0.0...

 

Patching component oracle.rdbms.dbscripts, 19.0.0.0.0...

 

Patching component oracle.rdbms.olap, 19.0.0.0.0...

 

Patching component oracle.rdbms, 19.0.0.0.0...

 

Patching component oracle.sdo.locator, 19.0.0.0.0...

 

Patching component oracle.rdbms.scheduler, 19.0.0.0.0...

 

Patching component oracle.xdk.xquery, 19.0.0.0.0...

 

Patching component oracle.nlsrtl.rsf.lbuilder, 19.0.0.0.0...

 

Patching component oracle.jdk, 1.8.0.201.0...

Patch 38597735 successfully applied.

Sub-set patch [36878821] has become inactive due to the application of a super-set patch [38597735].

Please refer to Doc ID 2161861.1 for any possible further required actions.

Log file location: D:\oracle\product\19.3.0\dbhome_1\cfgtoollogs\opatch\opatch2026-04-14_19-44-33PM_1.log

 

OPatch succeeded.

 

Watch the output carefully. You should see success messages for each component. The full process typically takes 20–30 minutes.

Sample successful output as above.

 

Step 8: Start the Database and Run DataPatch

Start the database first:

sqlplus / as sysdba

 

SQL> startup

 

 

 

Then run DataPatch to register the patch inside the database dictionary:

cd %ORACLE_HOME%/OPatch

datapatch -verbose

 

 

This step is mandatory — without it the patch is applied at the binary level but not registered in the database.

 

Step 9: Verify the Patch

April 6, 2026

How to Change MAX_STRING_SIZE in a PDB (Oracle 19c Step-by-Step Guide)

 

Changing MAX_STRING_SIZE in a PDB (What Worked for Me)

I recently had to deal with a requirement where the application team wanted to store larger strings in the database. The usual 4000-byte limit wasn’t enough, so the only option was to switch MAX_STRING_SIZE to EXTENDED.

At first I thought it would be a quick change… but in a PDB setup, it’s not that straightforward. I actually had to redo a part of it because I missed the seed step

So sharing the exact steps that worked for me.

 

Step 1: Check Current Setting

First thing I checked was:

SQL> show parameter string_size

 

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

max_string_size string STANDARD

 

It was STANDARD, which is expected in most environments.

 

Step 2: Close and Open PDB in Upgrade Mode

Then I closed the PDB:

SQL> ALTER PLUGGABLE DATABASE PROD CLOSE;

and opened it in upgrade mode:

SQL> ALTER PLUGGABLE DATABASE PROD OPEN UPGRADE;

 

Step 3: Change MAX_STRING_SIZE

Now set the parameter:

SQL>ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=spfile;

This doesn’t take effect immediately, so a restart is needed.


Step 4: Restart Database in Upgrade Mode

So I restarted the CDB:

SQL> shu immediate;
SQL> startup upgrade;


Step 5: Run utl32k.sql

After startup, I ran:

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

This is one of those steps you really shouldn’t skip.


Step 6: Close PDB and Handle PDB$SEED

Next, I closed the PDB:

SQL> ALTER PLUGGABLE DATABASE PROD CLOSE IMMEDIATE;

Then handled the seed database (this is where I messed up the first time):

SQL> ALTER PLUGGABLE DATABASE PDB$SEED OPEN UPGRADE;

SQL> ALTER SESSION SET CONTAINER = PDB$SEED;


SQL> ALTER PLUGGABLE DATABASE  CLOSE IMMEDIATE;


SQL> ALTER PLUGGABLE DATABASE OPEN READ ONLY;


SQL> ALTER PLUGGABLE DATABASE SAVE STATE;

If you skip this, new PDBs may not inherit the setting properly.


Step 7: Run Script Again in Target PDB

Finally, I switched back to my PDB:

SQL> ALTER SESSION SET CONTAINER=PROD;


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

 

Final Thoughts

A few things I’d keep in mind:

  • Do this during a maintenance window
  • Take a backup before starting
  • Don’t ignore the seed step
  • This change is not easily reversible

Once done, you can go beyond the 4000-byte limit — up to 32767 for VARCHAR2, which is what we needed.

 

How to Patch Oracle 19c to Release 19.30 on Windows – A Complete Step-by-Step Blog

  As soon as   Oracle released quarterly patch for Jan 2026 , I had to patch one of my Oracle 19c databases from 19.25 to 19.30. Since this ...