Rolling upgrade patch :-
- The rolling upgrade refers to upgrading different databases or different instances of the same database (in a Real Application Clusters environment) one at a time, without stopping the database.
- The advantage of a RAC rolling upgrade is that it enables at least some instances of the RAC installation to be available during the scheduled outage required for patch upgrades. Only the RAC instance that is currently being patched needs to be brought down. The other instances can continue to remain available. This means that the impact on the application downtime required for such scheduled outages is further minimized. Oracle’s opatch utility enables the user to apply the patch successively to the different instances of the RAC installation.
- Rolling upgrade of patches is currently available for one-off patches and PSU patches.
- Rolling patch upgrades are not available for deployments where the Oracle Database software is shared across the different nodes.
- Before Opatchauto utility, we need to manually down the instance and cluster related services(prepatch.sh) before applying rolling patch.
- The GI System patch includes updates for both the Clusterware home and Database home that can be applied in a rolling fashion.
- This patch is Oracle RAC Rolling Installable has to be mentioned in README.html.
Step by step apply Rolling PSU Patch in Oracle Database 12c RAC environment :-
Description:-
In this article we are going to see Step by step Apply Rolling PSU Patch in Oracle Database 12c RAC environment
Let start the Demo:-
Download the latest the PSU patch for GRID and ORACLE_HOME :-
Patch 28349311 – GRID INFRASTRUCTURE PATCH SET UPDATE 12.1.0.2.181016
The patch 28349311 was the super seeded patch of database PSU patch.
The above PSU patch is rolling applicable and so involves minimal downtime.
Database Env :-
For Node 1,
prod() { ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1 export ORACLE_HOME ORACLE_BASE=/oracle/app/oracle export ORACLE_BASE ORACLE_SID=prod1 export ORACLE_SID LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:. export LD_LIBRARY_PATH LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:/usr/lib:/lib export LIBPATH TNS_ADMIN=${ORACLE_HOME}/network/admin export TNS_ADMIN PATH=$ORACLE_HOME/bin:$PATH:. export PATH }
For Node 2,
prod() { ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1 export ORACLE_HOME ORACLE_BASE=/oracle/app/oracle export ORACLE_BASE ORACLE_SID=prod2 export ORACLE_SID LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:. export LD_LIBRARY_PATH LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:/usr/lib:/lib export LIBPATH TNS_ADMIN=${ORACLE_HOME}/network/admin export TNS_ADMIN PATH=$ORACLE_HOME/bin:$PATH:. export PATH }
Grid Env :-
For Node 1,
grid() { ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=/u01/app/12.1.0.2/grid; export ORACLE_HOME export ORACLE_SID=+ASM1 ORACLE_TERM=xterm; export ORACLE_TERM BASE_PATH=/usr/sbin:$PATH; export BASE_PATH SQLPATH=/u01/app/oracle/scripts/sql:/u01/app/12.1.0.2/grid/rdbms/admin:/u01/app/oracle/product/12.1.0.2/db_1/rdbms/admin; export SQLPATH PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH }
For Node 2,
grid() { ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=/u01/app/12.1.0.2/grid; export ORACLE_HOME export ORACLE_SID=+ASM2 ORACLE_TERM=xterm; export ORACLE_TERM BASE_PATH=/usr/sbin:$PATH; export BASE_PATH SQLPATH=/u01/app/oracle/scripts/sql:/u01/app/12.1.0.2/grid/rdbms/admin:/u01/app/oracle/product/12.1.0.2/db_1/rdbms/admin; export SQLPATH PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH }
Steps to Upgrade the OPATCH UTILITY:-
Step 1:- Check the opatch version and inventory for ORACLE_HOME on both nodes
For Node 1,
opatch version
opatch lsinventory
For Node 2,
opatch version
opatch lsinventory
Step 2:-Check the opatch version and inventory for GRID HOME on both nodes
For Node 1,
opatch version
opatch lsinventory
For Node 2,
opatch version
opatch lsinventory
Step 3:- Update the opatch utility
Take the backup of OPatch directory from GRID and ORACLE_HOME on both nodes
Unzip the OPatch downloaded zip into GRID and ORACLE_HOME directory
For Grid home:
For Database home:
For Node 1,
Copy patch p6880880_122010_Linux-x86-64.zip to the node 2(racpb2) or Copy the unzipped OPatch folder to the node 2(racpb2).
For Node 2,
After copying to Node 2,check the new OPatch version in both GRID and ORACLE_HOME,
After upgrade the OPatch utility on both nodes apply the GRID and ORACLE_HOME PSU patches.
Step 4:- Validation of Oracle Inventory
To check the GRID HOME inventory :-
opatch lsinventory -detail -oh /u01/app/12.1.0.2/grid
Before beginning patch application, check the consistency of inventory information for GI home and each database home to be patched
To check the ORACLE_HOME inventory :-
opatch lsinventory -detail -oh $ORACLE_HOME
Step 5:- Download and Unzip the Oct 18 PSU Rolling Patch
Step 6:- Check Patch Conflict Detection and Resolution
For GRID HOME,
When using OPatch 12.2.0.1.5 or later, the following Opatch Option -ocmrf <ocm response file> does not need to be provided.
Now our current OPatch version for GRID and ORACLE_HOME is 12.2.0.1.16.
As root user,
/u01/app/12.1.0.2/grid/OPatch/opatchauto apply /mnt/hgfs/E/roll_patch/28349311 -analyze -oh /u01/app/12.1.0.2/grid
For ORACLE HOME,
Step 7:- Apply the patch using Opatchauto
OPatchauto automatically patch the typical Grid Infrastructure (GI) and RAC home directories with minimal intervention.
In general, when we invoke opatchauto will patch both the GI stack and the database software stack. Since we have mentioned the -oh it will apply the PSU to the specified home.
The main advantage of opatchauto utility was automatically down the CRS and database services and restart the services after apply patching.
To apply a patch using opatchauto,we need to run as a root user.
To patch the GI home and all Oracle RAC database homes of the same version:
# opatchauto apply /u01/28349311
Here,we are going to apply a patch separately for both GRID and ORACLE_HOME in both nodes.
opatchauto for GRID HOME on Node1 :-
/u01/app/12.1.0.2/grid/OPatch/opatchauto apply /mnt/hgfs/E/roll_patch/28349311 -oh /u01/app/12.1.0.2/grid
opatchauto for ORACLE_HOME on Node 1 :-
/u01/app/oracle/product/12.1.0.2/db_1/OPatch/opatchauto apply /mnt/hgfs/E/roll_patch/27468957 -oh/u01/app/oracle/product/12.1.0.2/db_1
Follow the same Step 7 for applying patch using opatchauto for GRID HOME and ORACLE_HOME in Node 2.
Rolling PSU patch (Oct 2018) is applied on both GRID and ORACLE_HOME successfully.
DATAPATCH :-
- Datapatch is the new tool that enables automation of post-patch SQL actions for RDBMS patches. So, In 12c you don’t use carbundle psu apply now this is all done using datapatch.
- OPatchAuto calls datapatch to complete post patch actions upon installation of the binary patch and restart of the database.
Step 8:- To check the Oct PSU 2018 applied to your database using the following SQL statement,
Check the DBA_REGISTRY_SQLPATCH :-
select BUNDLE_SERIES,PATCH_UID,PATCH_ID,
VERSION,ACTION,STATUS,ACTION_TIME ,DESCRIPTION
from dba_registry_sqlpatch;
Catch Me On:- Hariprasath Rajaram
LinkedIn:
https://www.linkedin.com/in/hari-prasath-aa65bb19/
Facebook:
https://www.facebook.com/HariPrasathdba
FB Group:
https://www.facebook.com/groups/894402327369506/
FB Page:
https://www.facebook.com/dbahariprasath/?
Twitter:
https://twitter.com/hariprasathdba