Exadata Patch – Part 1/5: Patching GI & RDBMS Homes
Author: Sami A | Category: Exadata Patching | Tags: Oracle Exadata, OPatch, GI, RDBMS
Introduction
This article is the first part of a five-step Exadata patching series. In this step, we will patch the Grid Infrastructure (GI) and Oracle RDBMS homes. The patching strategy uses a 2-by-2 node approach: patch two servers (target_nodes) while the other two remain online. The patch will be triggered from one online node (source_node).
Always review the official patch README files before proceeding, as some patches require special handling.
Target Patches
- GI & RDBMS Home Patch: p37641958_190000_Linux-x86-64.zip
- OJVM Patch (if required): p37499406_190000_Linux-x86-64.zip
- Recommended DB Patches:
- p34774667_1927000DBRU_Linux-x86-64.zip
- p34672698_1927000DBRU_Linux-x86-64.zip
Step 1: Configure SSH Equivalence
Ensure passwordless SSH between nodes. From the source_node (VM_1):
dcli -g /u01/stage/target_Nodes -l root -k -s '-o StrictHostKeyChecking=no'
dcli -g /u01/stage/target_Nodes -l root hostname
Step 2: Prepare and Copy Patches
Create required directories and assign permissions, from the source_node (VM_1)
dcli -g /u01/stage/target_Nodes -l root mkdir -p /u01/stage/GI_DB_OJVM_19c/
Copy patch zip files to all nodes:
dcli -g /u01/stage/target_Nodes -l root -f /u01/stage/GI_DB_OJVM_19c/p37641958_190000_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/
dcli -g /u01/stage/target_Nodes -l root -f /u01/stage/GI_DB_OJVM_19c/p37499406_190000_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/
dcli -g /u01/stage/target_Nodes -l root -f /u01/stage/GI_DB_OJVM_19c/p34774667_1927000DBRU_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/
dcli -g /u01/stage/target_Nodes -l root -f /u01/stage/GI_DB_OJVM_19c/p34672698_1927000DBRU_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/
dcli -g /u01/stage/target_Nodes -l root chown -R oracle:oinstall /u01/stage/GI_DB_OJVM_19c/
dcli -g /u01/stage/target_Nodes -l root chmod -R 666 /u01/stage/GI_DB_OJVM_19c/
Unzip patches:
dcli -g /u01/stage/target_Nodes -l grid "unzip -oq /u01/stage/GI_DB_OJVM_19c/p37641958_190000_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/"
dcli -g /u01/stage/target_Nodes -l oracle "unzip -oq /u01/stage/GI_DB_OJVM_19c/p37499406_190000_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/"
dcli -g /u01/stage/target_Nodes -l oracle "unzip -oq /u01/stage/GI_DB_OJVM_19c/p34774667_1927000DBRU_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/"
dcli -g /u01/stage/target_Nodes -l oracle "unzip -oq /u01/stage/GI_DB_OJVM_19c/p34672698_1927000DBRU_Linux-x86-64.zip -d /u01/stage/GI_DB_OJVM_19c/"
Step 3: Pre-Checks
Check patch conflicts and required space, from the source_node (VM_1):
Below checking patch conflicts:
dcli -g /u01/stage/target_Nodes -l grid /u01/app/19.0.0.0/grid/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u01/stage/GI_DB_OJVM_19c/37641958/37642901
Then we have to check required space for the patch,
Create file which has patch location and copy it to all servers
#
cat /tmp/patch_list_gihome.txt
/u01/stage/GI_DB_OJVM_19c/37641958/37642901
/u01/stage/GI_DB_OJVM_19c/37641958/37654975
/u01/stage/GI_DB_OJVM_19c/37641958/37643161
/u01/stage/GI_DB_OJVM_19c/37641958/37762426
/u01/stage/GI_DB_OJVM_19c/37641958/36758186
dcli -g /u01/stage/target_Nodes -l root -f /tmp/patch_list_gihome.txt -d /tmp/
dcli -g /u01/stage/target_Nodes -l root chown grid:oinstall /tmp/patch_list_gihome.txt
Check required space for the patches:
dcli -g /u01/stage/target_Nodes -l grid /tmp/patch_list_gihome.txt prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt
Step 4: Stop Oracle Homes
We will stop the Oracle background processess on out target servers (Target_Node_1 & Target_Node_2 only):
$ srvctl stop home -oraclehome /u01/app/oracle/product/19.0.0.0/dbhome_1 -statefile /tmp/orahome1 -node Target_Node_1 -stopoption immediate
$ srvctl stop home -oraclehome /u01/app/oracle/product/19.0.0.0/dbhome_1 -statefile /tmp/orahome2 -node Target_Node_2 -stopoption immediate
Step 5: Apply the Patches
Login to Target_Node_1 & Target_Node_2 from sperated terminals , then Apply GI_HOME and Oracle Home patches in parallel:
# As root, Apply GI Home Patch
/u01/app/19.0.0.0/grid/OPatch/opatchauto apply /u01/stage/GI_DB_OJVM_19c/37641958 -oh /u01/app/19.0.0.0/grid
# As root, apply RDBMS Home patch
/u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatchauto apply /u01/stage/GI_DB_OJVM_19c/37641958 -oh /u01/app/oracle/product/19.0.0.0/dbhome_1
Step 6: Verify Applied Patches
su – grid
$ /u01/app/19.0.0.0/grid/OPatch/opatch lsinventory -oh /u01/app/19.0.0.0/grid | grep “applied on”
su – oracle
$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch lsinventory -oh /u01/app/oracle/product/19.0.0.0/dbhome_1 | grep “applied”
Step 7: Apply OJVM Patch (Optional)
If OJVM is installed and required:
su – oracle
$ cd /u01/stage/GI_DB_OJVM_19c/37499406
$ /u01/app/oracle/product/19.0.0.0/dbhome_1/OPatch/opatch apply
Step 8: Post-Patch Activities
Open all the DBs and all the pluggable DBs
su – oracle
sqlplus / as sysdba
SQL> startup
SQL> alter pluggable database all open;
Run datapatch
su – oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
cd $ORACLE_HOME/OPatch
./datapatch -sanity_checks
./datapatch -verbose
Check data dictionary
su – oracle
sqlplus / as sysdba
SQL> select PATCH_ID,ACTION,STATUS,ACTION_TIME,TARGET_VERSION from dba_registry_sqlpatch;
🔖 Next: Part 1/5 – Oracle Exadata Patching (Oracle Homes)
🔖 Next: Part 2/5 – Oracle Exadata Patching (RoCE Switches)
🔖 Next: Part 3/5 – Oracle Exadata Patching (Cell Storage)

