How to patch Oracle Database using controlled RAC Rolling with AutoUpgrade

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=YES instructs AutoUpgrade to skip any fail check on runInstaller. I’ve added that because I’m short on swap in my system.
  • rac_rolling=REQUIRED will instruct AutoUpgrade to perform the patching in RAC Rolling mode.
  • drain_timeout=WAIT will 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

    • Zulal on February 11, 2026 at 09:03
    • Reply

    Hi
    Thanks for the post.
    Is it possible to patch also grid home with autoupgrade?

    1. Hi Zulal, not at this point, but it is on our radar.

        • VictorEder on February 23, 2026 at 19:12
        • Reply

        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?

    • Cyrille on April 8, 2026 at 14:22
    • Reply

    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

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

Leave a Reply

Your email address will not be published.