March 3, 2026

How to Patch Oracle 19c to Release 19.29 – A Complete Step-by-Step Blog

How to Patch Oracle 19c to Release 19.29 – A Complete Step-by-Step Guide

Problem: Oracle 19c database needs to be patched to the latest Release Update (19.29) to stay secure and aligned with Oracle's quarterly patch cycle.
Environment: Oracle 19c on Linux x86-64 (same process applies to all 19c versions)
Solution: Download patch 38291812 from Oracle Support, update OPatch, apply the patch, and run datapatch to register it in the database.

I recently had to patch one of my Oracle 19c databases from 19.28 to 19.29. Since this is something we DBAs do every few months, 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 Linux 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 /home
  • 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: 38291812p38291812_190000_Linux-x86-64.zip
  • OPatch utility: 6880880p6880880_190000_Linux-x86-64.zip

Steps to download: Select Patches & Updates → enter patch number → select platform Linux 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:

mv OPatch OPatch_backup1
cp p6880880_190000_Linux-x86-64.zip $ORACLE_HOME
cd $ORACLE_HOME
unzip p6880880_190000_Linux-x86-64.zip

Update your .bash_profile so OPatch is available globally:

vi /home/oracle/.bash_profile

Add this line:

PATH=$ORACLE_HOME/OPatch:$PATH

Save and reload:

:wq
. ~/.bash_profile

Step 3: Prepare the Patch Directory

mkdir /home/oracle/patch
chmod -R 777 /home/oracle/patch

Transfer both ZIP files (Patch + OPatch) to /home/oracle/patch using WinSCP or SCP.

Step 4: Unzip the Patch

cd /home/oracle/patch
unzip p38291812_190000_Linux-x86-64.zip
cd 38291812

Step 5: Run Pre-checks

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

./opatch prereq CheckConflictAgainstOHWithDetail -ph ./

If you see "OPatch succeeded" — you're good to go. If there are conflicts, resolve them before proceeding.

Step 6: 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 7: 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 8: Check Available Disk Space

You'll need at least 12 GB free in /home:

df -h

Do not proceed if space is insufficient — the patch will fail midway.

Step 9: Apply the Patch

cd /home/oracle/patch/38291812
./opatch apply

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

Sample successful output at the end:

Patching component oracle.rdbms, 19.0.0.0.0...
Verifying the update...
Patch 38291812 successfully applied.
OPatch succeeded.

Step 10: 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 11: Verify the Patch

SQL> select * from v$version;
SQL> select patch_id, patch_uid, version, action, status, description
     from dba_registry_sqlpatch
     order by action_time;

You should see 19.29.0.0.0 listed in the output with status SUCCESS.


Summary — What we did:
  • Downloaded patch 38291812 and updated OPatch to 12.2.0.1.48+
  • Ran pre-checks to confirm no patch conflicts
  • Shut down database and listener cleanly
  • Applied the patch using opatch apply
  • Ran datapatch -verbose to register the patch in the database
  • Verified patch version shows 19.29.0.0.0 in dba_registry_sqlpatch

Final Tips

  • In Data Guard setups — always patch the standby first, then the primary
  • Never patch production directly — test on a non-prod clone first
  • Always read the patch README before applying — it may have special instructions
  • Keep the OPatch backup (OPatch_backup1) until you've verified the patch successfully

Related posts:

1 comment:

  1. Love is not as easy as people make it look like and in love commitment is key, commitment reveals who is true and who is not, I fell in love with the wrong one who was not committed, who did not to sacrifice for what we had, I was lied to and played on, I was seeing the signs but was not sure what it was until my sister told me about Mac and his team (macprivateinvestigators @ gmail .com) who helped expose my husband and all his secrets on how he was involved with other women, the evidence provided made the divorce case easy for me, now I feel free.

    ReplyDelete

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