How to Apply the Latest RU/RUR Patches onto 19c Gold Image Before Upgrading 18c GI to 19c GI

While upgrading GI from 18c to 19c, in order to minimize the downtime and reduce the impact on PROD environment, also minimize the risk of upgrading failure, Release Update(RU) or Release Update Reversion(RUR) patches can be applied onto new 19c GI image before upgrading 19c GI.

Subscribe to get access

Read more of this content when you subscribe today.

How to Upgrade Oracle Grid Infrastructure from 18c to 19c

This post illustrates step by step how to upgrade Oracle 18c GI to 19c GI.

Subscribe to get access

Read more of this content when you subscribe today.

Oracle Grid Infrastructure and Database Upgrade Path

Grid Infrastructure Upgrade Path

19c

  • Oracle Grid Infrastructure upgrade from 11g Release 2 (11.2.0.4) to Oracle Grid Infrastructure 19c.
  • Oracle Grid Infrastructure upgrade from 12c Release 1 (12.1.0.2) to Oracle Grid Infrastructure 19c.
  • Oracle Grid Infrastructure upgrade from 12c Release 2 (12.2) to Oracle Grid Infrastructure 19c.
  • Oracle Grid Infrastructure upgrade from 18c release to Oracle Grid Infrastructure 19c.

18c

  • Oracle Grid Infrastructure upgrade from releases 11.2.0.3 and 11.2.0.4 to Oracle Grid Infrastructure 18c.
  • Oracle Grid Infrastructure upgrade from Oracle Grid Infrastructure 12c Release 1 (12.1) to Oracle Grid Infrastructure 18c.
  • Oracle Grid Infrastructure upgrade from Oracle Grid Infrastructure 12c Release 2 (12.2) to Oracle Grid Infrastructure 18c.

Database Upgrade Path

18 (all releases), 12.2.0.1, 12.1.0.2, 11.2.0.4
 Direct upgrade to 19c  is supported

12.1.0.1,11.2.0.1, 11.2.0.2, 11.2.0.3,11.1.0.6, 11.1.0.7,10.2 or earlier releases

Direct upgrade to Oracle Database 19c is not supported.
Solution: Upgrade to an intermediate Oracle Database release that can be directly upgraded to the current release. Upgrade Oracle Database releases that are not supported for direct upgrade in this release to an intermediate Oracle Database release that is supported for direct upgrade.

  • If you are upgrading from release 11.2.0.2 or 11.1.0.7, then you must first upgrade to the terminal patch set release for Oracle Database 11g release 2 (11.2.0.4), which is supported for direct upgrade to Oracle Database 19c.
  • If you are upgrading from release 10.2.0.2, 10.2.0.3, 10.2.0.4,10.2.0.5 or 10.1.0.5, then you must first upgrade to release 11.2. or 12.1
  • If you are upgrading from release 9.2.0.8, then you must first upgrade to a sequence of intermediate Oracle Database releases:

     

    Upgrade from release 9.2.0.8 to release 11.2.0.4. Then upgrade from release 11.2 to 19c

     

Related Blogs

How to Upgrade Oracle Grid Infrastructure from 18c to 19c

How to Upgrade Oracle Grid Infrastructure from 12.2.0.1 to 18c

How to Upgrade Oracle Grid Infrastructure from 12.1.0.2 to 12.2.0.1

How to Upgrade Linux OS In RAC Environment

What prepatch.sh and postpatch.sh do when manually applying DB home patch of GI RU/RUR

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

Unconfigure Oracle 18c Clusterware Without Removing Binaries

We might encounter an error on one or more cluster nodes during installation when running the root.sh command, such as a missing operating system package on one node. By running “rootcrs.sh -deconfig -force” on nodes where you encounter an installation error, you can unconfigure Oracle Clusterware on those nodes, correct the cause of the error, and then run root.sh again.

[root@racnode1 install]# cd /u01/app/18.0.0/grid/crs/install
[root@racnode1 install]# ./rootcrs.sh -deconfig -force
Using configuration parameter file: /u01/app/18.0.0/grid/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/racnode1/crsconfig/crsdeconfig_racnode1_2020-03-12_09-58-18PM.log
PRCR-1070 : Failed to check if resource ora.net1.network is registered
CRS-0184 : Cannot communicate with the CRS daemon.
PRCR-1070 : Failed to check if resource ora.helper is registered
CRS-0184 : Cannot communicate with the CRS daemon.
PRCR-1070 : Failed to check if resource ora.ons is registered
CRS-0184 : Cannot communicate with the CRS daemon.

2020/03/12 21:58:25 CLSRSC-180: An error occurred while executing the command '/u01/app/18.0.0/grid/bin/srvctl config nodeapps'
2020/03/12 21:58:36 CLSRSC-336: Successfully deconfigured Oracle Clusterware stack on this node
[root@racnode1 install]# ls -ltr /u01/app/grid/crsdata/racnode1/crsconfig/crsdeconfig_racnode1_2020-03-12_09-58-18PM.log
-rw-rw-r-- 1 grid oinstall 45152 Mar 12 21:58 /u01/app/grid/crsdata/racnode1/crsconfig/crsdeconfig_racnode1_2020-03-12_09-58-18PM.log
[root@racnode1 install]#

crsdeconfig_racnode1_2020-03-12_09-58-18PM.log