When manually apply Oracle clusterware GI RU/RUR patches, for DB home, the steps will be similar like :
- Run prepatch.sh
- Apply patches
- Run postpatch.sh
What prepatch.sh really does ?
1)Let’s look at the prepatch.sh first :
...
..
.
## Function for adding write permission to the owner for all of
## the scripts in the Oracle Home.
ALL_SCRIPTS="bin/srvctl bin/srvconfig bin/cluvfy"
ALL_DBEXES="bin/racgmain bin/racgeut bin/diskmon.bin bin/lsnodes bin/osdbagrp bin/rawutl srvm/admin/ractrans srvm/admin/getcrshome bin/gnsd bin/crsdiag.pl"
ALL_DBLIBS="lib/libhasgen11.$LEXT lib/libttsh11.$LEXT lib32/libttsh11.$LEXT lib32/libdbcfg11.$LEXT lib32/libhasgen11.$LEXT lib32/libocr11.$LEXT lib32/libocrb11.$LEXT lib32/libocrutl11.$LEXT lib32/libsrvm11.$LEXT lib32/libsrvmhas11.$LEXT lib32/libsrvmocr11.$LEXT lib32/libuini11.$LEXT lib/libclsra11.$LEXT lib/libdbcfg11.$LEXT lib/libocr11.$LEXT lib/libocrb11.$LEXT lib/libocrutl11.$LEXT lib/libuini11.$LEXT lib/librdjni11.$LEXT lib/libgns11.$LEXT lib/libgnsjni11.$LEXT lib/libagfw11.$LEXT"
addperms()
{
for file in $ALL_SCRIPTS
do
if [ -f "$OH/$file" ]; then
$CHMOD 755 $OH/$file
fi
done
}
addperms2()
{
for file in $ALL_DBEXES
do
if [ -f "$OH/$file" ]; then
$CHMOD 755 $OH/$file
fi
done
}
addperms3()
{
for file in $ALL_DBLIBS
do
if [ -f "$OH/$file" ]; then
$CHMOD 755 $OH/$file
fi
done
}
...
..
.
RACGWRAP=$OH/bin/racgwrap
PARAMFILE=$OH/install/params.ora
SRVCTL=$OH/bin/srvctl
addperms
addperms2
## Opatch places the libs with proper permissions set.
## No need to alter here.
## addperms3
...
..
.
##
## Now that we have values for all of the values, then place them into
## the stored parameter file.
##
$RMF $PARAMFILE
$ECHO ORACLE_HOME=$ORACLE_HOME >> $PARAMFILE
$ECHO ORACLE_BASE=$ORACLE_BASE >> $PARAMFILE
$ECHO s_OracleHome=$ORACLE_HOME >> $PARAMFILE
$ECHO "$0 completed successfully."
exit 0;
[oracle@oemnode1 scripts]$
2)Run prepatch.sh when patching 28864593.
[oracle@oemnode1 28864593]$ custom/scripts/prepatch.sh -dbhome $ORACLE_HOME custom/scripts/prepatch.sh completed successfully. [oracle@oemnode1 28864593]$
3) Running of prepatch.sh achieves.
a) Change permission to 755 for the files in variable “ALL_SCRIPTS”.
ALL_SCRIPTS="bin/srvctl bin/srvconfig bin/cluvfy"
for file in $ALL_SCRIPTS
do
if [ -f "$OH/$file" ]; then
$CHMOD 755 $OH/$file
fi
done
}
b) Change permission to 755 for the files in variable “ALL_DBEXES”.
ALL_DBEXES="bin/racgmain bin/racgeut bin/diskmon.bin bin/lsnodes bin/osdbagrp bin/rawutl srvm/admin/ractrans srvm/admin/getcrshome bin/gnsd bin/crsdiag.pl" for file in $ALL_DBEXES do if [ -f "$OH/$file" ]; then $CHMOD 755 $OH/$file fi done
c) Saves configuration values in $ORACLE_HOME/install/params.ora consumed by postpatch.sh later.
PARAMFILE=$OH/install/params.ora $RMF $PARAMFILE $ECHO ORACLE_HOME=$ORACLE_HOME >> $PARAMFILE $ECHO ORACLE_BASE=$ORACLE_BASE >> $PARAMFILE $ECHO s_OracleHome=$ORACLE_HOME >> $PARAMFILE
[oracle@oemnode1 scripts]$ cat $ORACLE_HOME/install/params.ora ORACLE_HOME=/u01/app/oracle/Product/18.0.0/dbhome_1 ORACLE_BASE= s_OracleHome=/u01/app/oracle/Product/18.0.0/dbhome_1
What postpatch.sh really does ?
1) Part of the postpatch.sh script.
ALL_SCRIPTS="bin/srvctl bin/srvconfig bin/cluvfy"
ALL_DBEXES="bin/racgmain bin/racgeut bin/diskmon.bin bin/lsnodes bin/osdbagrp bin/rawutl srvm/admin/ractrans srvm/admin/getcrshome bin/gnsd bin/crsdiag.pl"
ALL_DBLIBS="lib/libhasgen11.$LEXT lib/libttsh11.$LEXT lib32/libttsh11.$LEXT lib32/libdbcfg11.$LEXT lib32/libhasgen11.$LEXT lib32/libocr11.$LEXT lib32/libocrb11.$LEXT lib32/libocrutl11.$LEXT lib32/libsrvm11.$LEXT lib32/libsrvmhas11.$LEXT lib32/libsrvmocr11.$LEXT lib32/libuini11.$LEXT lib/libclsra11.$LEXT lib/libdbcfg11.$LEXT lib/libocr11.$LEXT lib/libocrb11.$LEXT lib/libocrutl11.$LEXT lib/libuini11.$LEXT lib/librdjni11.$LEXT lib/libgns11.$LEXT lib/libgnsjni11.$LEXT lib/libagfw11.$LEXT"
...
..
.
ORA_ENV_FILE=$OH/install/params.ora
ORA_SCRIPT_FILE=$ALL_SCRIPTS
resetPerms()
{
for i in $ORA_SCRIPT_FILE;
do
if [ -f "$OH/$i" ]; then
$ECHO "Reapplying file permissions on $OH/$i"
$CHMOD +x $OH/$i
fi
done
}
resetPerms2()
{
for i in $ALL_DBEXES
do
if [ -f "$OH/$i" ]; then
$ECHO "Reapplying file permissions on $OH/$i"
$CHMOD +x $OH/$i
fi
done
}
resetPerms3()
{
for i in $ALL_DBLIBS
do
if [ -f "$OH/$i" ]; then
$ECHO "Reapplying file permissions on $OH/$i"
$CHMOD +x $OH/$i
fi
done
}
..
.
ORA_ENV_FILE=$OH/install/params.ora
ORA_SCRIPT_FILE=$ALL_SCRIPTS
for i in $ORA_SCRIPT_FILE;
do
SCRIPT_FILE=$OH/$i
BASENAME=`$BNAME $SCRIPT_FILE`
SBSNAME="$OH/crs/sbs/$BASENAME.sbs"
if [ -f $SBSNAME ]; then
$ECHO "Found uninstantiated $SBSNAME file, copying to $SCRIPT_FILE"
$CP $SBSNAME $SCRIPT_FILE
fi
if [ -f $SCRIPT_FILE ];
then
## Make sure that the file is really script file.
$SH -n $SCRIPT_FILE > $NULL 2>&1
STATUS1=$?
LC_ALL=C $FILE $SCRIPT_FILE | $GREP -wi "text" > $NULL 2>&1
STATUS2=$?
if [ "$STATUS1" != "0" ] && [ "$STATUS2" != "0" ]; then
$ECHO "Skipping non-text file $SCRIPT_FILE"
continue
fi
$ECHO "Parsing file $SCRIPT_FILE"
$CP $SCRIPT_FILE $SCRIPT_FILE.$
for line in `$CAT $ORA_ENV_FILE.$`;
do
varName=`$ECHO $line | $AWK -F"=" '{ print $1 }'`
varValue=`$ECHO $line | $AWK -F"=" '{ print $2 }'`
varValue=`$ECHO "$varValue" | $SED -e 's|\/|\\\/|g'`
$CAT $SCRIPT_FILE.$ | $SED -e s/%$varName%/$varValue/g > /tmp/$
$RMF $SCRIPT_FILE.$
$CP /tmp/$ $SCRIPT_FILE.$
done
$RMF /tmp/$
if [ -s $SCRIPT_FILE.$ ];
then
$RMF $SCRIPT_FILE
$CP $SCRIPT_FILE.$ $SCRIPT_FILE
else
$ECHO "Failed to parse the file $SCRIPT_FILE"
$RMF $SCRIPT_FILE.$
exit 1
fi
$RMF $SCRIPT_FILE.$;
fi
done
$RMF $ORA_ENV_FILE.$
validateScriptFile
resetPerms
resetPerms2
## resetPerms3
$ECHO "Postpatch completed successfully"
exit 0
2) Run postpatch.sh when patching 28864593.
[oracle@oemnode1 28864593]$ custom/scripts/postpatch.sh -dbhome $ORACLE_HOME Reading /u01/app/oracle/Product/18.0.0/dbhome_1/install/params.ora.. Reading /u01/app/oracle/Product/18.0.0/dbhome_1/install/params.ora.. Found uninstantiated /u01/app/oracle/Product/18.0.0/dbhome_1/crs/sbs/srvctl.sbs file, copying to /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvctl Parsing file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvctl Parsing file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvconfig Parsing file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/cluvfy Verifying file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvctl Verifying file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvconfig Verifying file /u01/app/oracle/Product/18.0.0/dbhome_1/bin/cluvfy Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvctl Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/srvconfig Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/cluvfy Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/diskmon.bin Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/lsnodes Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/osdbagrp Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/rawutl Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/srvm/admin/ractrans Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/srvm/admin/getcrshome Reapplying file permissions on /u01/app/oracle/Product/18.0.0/dbhome_1/bin/crsdiag.pl Postpatch completed successfully
3) Running of postpatch.sh achieves.
a) Parsing and verifying the files in variable ALL_SCRIPTS=”bin/srvctl bin/srvconfig bin/cluvfy”
b) Reapplying permissions for files in variable ALL_SCRIPTS=”bin/srvctl bin/srvconfig bin/cluvfy”
ALL_SCRIPTS="bin/srvctl bin/srvconfig bin/cluvfy" ORA_SCRIPT_FILE=$ALL_SCRIPTS for i in $ORA_SCRIPT_FILE; do if [ -f "$OH/$i" ]; then $ECHO "Reapplying file permissions on $OH/$i" $CHMOD +x $OH/$i fi done
c) Reapplying permissions for files in variable ALL_DBEXES=”bin/racgmain bin/racgeut bin/diskmon.bin bin/lsnodes bin/osdbagrp bin/rawutl srvm/admin/ractrans srvm/admin/getcrshome bin/gnsd bin/crsdiag.pl”
for i in $ALL_DBEXES do if [ -f "$OH/$i" ]; then $ECHO "Reapplying file permissions on $OH/$i" $CHMOD +x $OH/$i fi done