In this post, I will show you how to patch your Oracle Database, having full control over the rolling steps (when each instance will bounce), using the new AutoUgrade RAC Rolling feature that was made available in the 26.2 AU release.
With this method, you can patch your environment without any application disruption, especially if using Application Continuity. Let’s check how to perform that.
My environment
- Database Name: DB19C
- 2-node RAC
- Source Release 19.27
- Target Release 19.30
- Running on Linux 64
Steps
1. Download AutoUprade
First, always download the latest version of AutoUprade:
[oracle@node1 ~]$ wget https://download.oracle.com/otn-pub/otn_software/autoupgrade.jar --2026-02-10 18:58:48-- https://download.oracle.com/otn-pub/otn_software/autoupgrade.jar Resolving download.oracle.com (download.oracle.com)... 23.37.8.103 Connecting to download.oracle.com (download.oracle.com)|23.37.8.103|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://edelivery.oracle.com/otn-pub/otn_software/autoupgrade.jar [following] --2026-02-10 18:58:48-- https://edelivery.oracle.com/otn-pub/otn_software/autoupgrade.jar Resolving edelivery.oracle.com (edelivery.oracle.com)... 23.55.213.198, 2600:1419:6200:10bb::366, 2600:1419:6200:10a8::366 Connecting to edelivery.oracle.com (edelivery.oracle.com)|23.55.213.198|:443... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: https://download.oracle.com/otn-pub/otn_software/autoupgrade.jar?AuthParam=1770750048_eb6d25edb3b29aec64d1afe86a10ba28 [following] --2026-02-10 18:58:48-- https://download.oracle.com/otn-pub/otn_software/autoupgrade.jar?AuthParam=1770750048_eb6d25edb3b29aec64d1afe86a10ba28 Connecting to download.oracle.com (download.oracle.com)|23.37.8.103|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 6960211 (6.6M) [application/x-jar] Saving to: ‘autoupgrade.jar’ 100%[==========================================================================================================================================================================>] 6,960,211 19.1MB/s in 0.3s 2026-02-10 18:58:48 (19.1 MB/s) - ‘autoupgrade.jar’ saved [6960211/6960211]
Checking the release:
$ $ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -version build.version 26.2.260205 build.date 2026/02/05 04:36:27 +0000 build.hash 226a8557b build.hash_date 2026/02/04 13:52:42 +0000 build.supported_target_versions 12.2,18,19,21,23 build.type production build.label (HEAD, tag: v26.2, origin/rdbms_19.31) build.MOS_NOTE 2485457.1 build.MOS_LINK https://support.oracle.com/epmos/faces/DocumentDisplay?id=2485457.1
As you can check, I’m using 26.2, which has this feature available
2. Prepare the config file
I will prepare 2 config file:
[oracle@node1 ~]$ cat > create_home.cfg << 'EOF' global.global_log_dir=/home/oracle/autoupgrade/log global.keystore=/home/oracle/autoupgrade/keystore patch1.sid=DB19C1 patch1.source_home=/u01/app/oracle/product/19.27.0.0/dbhome_1 patch1.target_home=/u01/app/oracle/product/19.30.0.0/dbhome_1 patch1.folder=/home/oracle/autoupgrade/patches patch1.patch=RU:19.30,OJVM,OPATCH,OCW patch1.download=YES patch1.home_settings.ignore_prereq_failure=YES EOF [oracle@node1 ~]$ cat > rac_rolling.cfg << 'EOF' global.global_log_dir=/home/oracle/autoupgrade/log global.keystore=/home/oracle/autoupgrade/keystore patch1.sid=DB19C1 patch1.source_home=/u01/app/oracle/product/19.27.0.0/dbhome_1 patch1.target_home=/u01/app/oracle/product/19.30.0.0/dbhome_1 patch1.restoration=YES patch1.rac_rolling=REQUIRED patch1.drain_timeout=WAIT EOF
If you are wondering why 2 config files, and not just one, this is a current limitation we have that will be fixed in the next releases.
home_settings.ignore_prereq_failure=YESinstructs AutoUpgrade to skip any fail check on runInstaller. I’ve added that because I’m short on swap in my system.rac_rolling=REQUIREDwill instruct AutoUpgrade to perform the patching in RAC Rolling mode.drain_timeout=WAITwill instruct AutoUpgrade to just stop the instance on a node after my OK, via the proceed command.
3. Running the Upgrade
Now, I will break AU into multiple steps, running:
- -patch -mode download
- -patch -mode create_home
- -mode deploy (without -patch)
If you try to run deploy with -patch, you would get the error:
[oracle@node1 ~]$ $ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -patch -config patch.cfg -mode deploy AutoUpgrade Patching 26.9999.260123 launched with default internal options Processing config file ... AutoUpgrade Patching moves the source DB to the target Oracle home in noconsole mode. In noconsole mode drain_timeout=wait is not supported.
We will fix that problem in the next release!
So, starting with the download mode:
[oracle@node1 ~]$ $ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -patch -config create_home.cfg -mode download
AutoUpgrade Patching 26.2.260205 launched with default internal options
Processing config file ...
Loading AutoUpgrade Patching keystore
AutoUpgrade Patching keystore is loaded
Connected to MOS - Searching for specified patches
-----------------------------------------------------
Downloading files to /home/oracle/autoupgrade/patches
-----------------------------------------------------
DATABASE RELEASE UPDATE 19.30.0.0.0(REL-JAN260130)
File: p38632161_190000_Linux-x86-64.zip - VALIDATED
OJVM RELEASE UPDATE 19.30.0.0.0
File: p38523609_190000_Linux-x86-64.zip - VALIDATED
OPatch 12.2.0.1.49 for DB 19.0.0.0.0 (Jan 2026)
File: p6880880_190000_Linux-x86-64.zip - VALIDATED
GI RELEASE UPDATE 19.30.0.0.0(REL-JAN260130)
File: p38629535_190000_Linux-x86-64.zip - VALIDATED
-----------------------------------------------------
[oracle@node1 ~]$
Next, let’s create the new Oracle Home in release 19.30:
[oracle@node1 ~]$ $ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -patch -config create_home.cfg -mode create_home AutoUpgrade Patching 26.2.260205 launched with default internal options Processing config file ... Loading AutoUpgrade Patching keystore AutoUpgrade Patching keystore is loaded +-----------------------------------------+ | Starting AutoUpgrade Patching execution | +-----------------------------------------+ Type 'help' to list console commands patch> Job 100 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs restored [0] Jobs pending [0] # Run the root.sh script as root for the following jobs: For create_home_1 in node2 -> /u01/app/oracle/product/19.30.0.0/dbhome_1/root.sh For create_home_1 in node1 -> /u01/app/oracle/product/19.30.0.0/dbhome_1/root.sh Please check the summary report at: /home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.html /home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.log
The next step is to connect as root and call the 2 commands mentioned above.
[root@node1 ~]# /u01/app/oracle/product/19.30.0.0/dbhome_1/root.sh Check /u01/app/oracle/product/19.30.0.0/dbhome_1/install/root_node1_2026-02-10_23-39-14-880550500.log for the output of root script [root@node1 ~]# ssh node2 Last login: Tue Feb 10 20:55:37 2026 from 192.168.56.111 [root@node2 ~]# /u01/app/oracle/product/19.30.0.0/dbhome_1/root.sh Check /u01/app/oracle/product/19.30.0.0/dbhome_1/install/root_node2_2026-02-10_23-39-18-221606004.log for the output of root script
Finally, let’s now call the deploy mode to perform the RAC Rolling Patching.
[oracle@node1 ~]$ $ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -config rac_rolling.cfg -mode deploy AutoUpgrade 26.2.260205 launched with default internal options Processing config file ... Loading AutoUpgrade keystore AutoUpgrade keystore is loaded +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 CDB(s) plus 2 PDB(s) will be processed Type 'help' to list console commands upg>
After a couple of minutes, we can see that AU is waiting for the user to type proceed -job %job_number% to move ahead, stopping the first instance.
upg> Relocated instance DB19C1 services. To continue, run: proceed -job 100 upg> lsj +----+-------+-----+---------+-------+------------+------------+----------------------------------+ |Job#|DB_NAME|STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+-----+---------+-------+------------+------------+----------------------------------+ | 100| DB19C1|DRAIN|EXECUTING|RUNNING|Feb-10 23:41|!!!1089s ago|To continue, run: proceed -job 100| +----+-------+-----+---------+-------+------------+------------+----------------------------------+ Total jobs 1 upg>
This is the time you should ensure that all your application sessions have moved to the other instances. This method is useful as you can ensure that everything is moved before allowing AU to stop the instance.
Usually, for modern applications that respond to Oracle FAN events and have AC/TAC configured, they will move automatically to the other nodes.
When you are ready, type proceed -job %job_number%:
upg> proceed -job 100 upg> Continuing with restarting instances for job 100 upg> lsj +----+-------+-----+---------+-------+------------+-------+------------------------+ |Job#|DB_NAME|STAGE|OPERATION| STATUS| START_TIME|UPDATED| MESSAGE| +----+-------+-----+---------+-------+------------+-------+------------------------+ | 100| DB19C1|DRAIN|EXECUTING|RUNNING|Feb-10 23:41| 9s ago|Stopping instance DB19C1| +----+-------+-----+---------+-------+------------+-------+------------------------+ Total jobs 1 upg>
AU will move forward with the stop and restart of the instance in the new Oracle Home.
After a while, AU will ask again if it can proceed with the next instance:
upg> Relocated instance DB19C2 services. To continue, run: proceed -job 100 upg> lsj +----+-------+-----+---------+-------+------------+-------+----------------------------------+ |Job#|DB_NAME|STAGE|OPERATION| STATUS| START_TIME|UPDATED| MESSAGE| +----+-------+-----+---------+-------+------------+-------+----------------------------------+ | 100| DB19C1|DRAIN|EXECUTING|RUNNING|Feb-10 23:41| 0s ago|To continue, run: proceed -job 100| +----+-------+-----+---------+-------+------------+-------+----------------------------------+ Total jobs 1 upg>
Again, wait until the connections are now all moved back to instance 1 (or other instances if more than 2 nodes) and type proceed -job %job_number% again:
upg> proceed -job 100 upg> Continuing with restarting instances for job 100 upg> lsj +----+-------+-----+---------+-------+------------+-------+------------------------+ |Job#|DB_NAME|STAGE|OPERATION| STATUS| START_TIME|UPDATED| MESSAGE| +----+-------+-----+---------+-------+------------+-------+------------------------+ | 100| DB19C1|DRAIN|EXECUTING|RUNNING|Feb-10 23:41| 9s ago|Stopping instance DB19C2| +----+-------+-----+---------+-------+------------+-------+------------------------+ Total jobs 1 upg>
If you had 5 nodes, you would have to type proceed 5 times. As this is a 2-Node RAC, we are done! Now all I have to do is wait until AU finishes:
And after some time, it finishes:
upg> Job 100 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs restored [0] Jobs pending [0] ---- Drop GRP at your convenience once you consider it is no longer needed ---- Drop GRP from DB19C1: drop restore point AUTOUPGRADE_9212_DB19C1927000 Please check the summary report at: /home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html /home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log [oracle@node1 ~]$
Patching complete!
As you could see, AutoUpgrade helps a lot with the RAC Rolling patching process, allowing the control to be in your hands!
Have you enjoyed? Please leave a comment or give a 👍!





6 comments
Skip to comment form
Hi
Thanks for the post.
Is it possible to patch also grid home with autoupgrade?
Author
Hi Zulal, not at this point, but it is on our radar.
Hi Rodrigo, considering that Oracle RAC is supported by the Grid infrastructure, how can we patch the Grid infrastructure with minimal service interruption, along with the database?
Author
Check this blog post by Daniel: https://dohdatabase.com/2023/02/15/how-to-patch-oracle-grid-infrastructure-19c-using-out-of-place-method/
Hello,
Thanks for the demo.
Can we patch several database at a time? Or do we need a file per db ?
Is it the same process with container/pluggable ?
Regards
Cyrille
Author
Hi, yes, you can, given the oracle_home is already created. You can’t create multiple OHs in parallel because of a required lock on the inventory.