Wednesday, March 14, 2012

Upgrade from 10.2.0.5 to 11.2.0.3 (Clusterware, RAC, ASM)

The blog post list the steps for upgrading 10gR2 system (used earlier for 10.2.0.4 to 10.2.0.5 upgrade) to 11gR2 (11.2.0.3). The steps are similar to 11.1.0.7 to 11.2.0.3 upgrade but with some minor differences.

Relevant sections from 11gR2 Upgrade Guide.
Direct upgrade to the new Oracle Database 11g release is supported from 9.2.0.8 or higher, 10.1.0.5 or higher, 10.2.0.2 or higher, and 11.1.0.6 or higher. Note that Oracle Clusterware release 10.2.0.n must be at release 10.2.0.3 (or higher), before you attempt to upgrade it to Oracle Clusterware 11g.

You may need to keep the old Oracle Home for a while after a successful upgrade. However, after you have tested the newly upgraded Oracle database, you will need to remove the old Oracle Home. As the clusterware user on all nodes, enter the following SQL*Plus commands.
Detach OLD_HOME (where OLD_HOME is your pre-upgrade Oracle Home:

$OLD_HOME/oui/bin/runInstaller -detachHome -silent -local
Confirm OLD_HOME is removed from central inventory:

$OLD_HOME/OPatch/opatch lsinventory -all
Remove files in OLD_HOME manually:
/bin/rm -rf $OLD_HOME

From 11gR2 GI Install Guide
Before you start an Oracle RAC or Oracle Database installation on an Oracle Clusterware 11g release 11.2 installation, if you are upgrading from releases 11.1.0.7, 11.1.0.6, and 10.2.0.4, then Oracle recommends that you check for the latest recommended patches for the release you are upgrading from, and install those patches as needed on your existing database installations before upgrading.
For more information on recommended patches, refer to "Oracle Upgrade Companion," which is available through Note 785351.1.

The Cluster runs on RHEL 4
uname -rmi
2.6.9-89.ELsmp x86_64 x86_64
With vote and ocr files in raw devices
crsctl query css votedisk
 0.     0    /dev/raw/raw2

$ ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     107612
         Used space (kbytes)      :       4604
         Available space (kbytes) :     103008
         ID                       :  972426829
         Device/File Name         : /dev/raw/raw1
                                    Device/File integrity check succeeded

                                    Device/File not configured

         Cluster registry integrity check succeeded
The pre-req checks are also similar to that on 11.1.0.7 to 11.2.0.3 checks, ntp check will fail if the ntp.conf file is present and ip_local_port_range will fail as the minimum value is different from 10gR2 to 11gR2. Noteably doesn't require any patches to be applied before the upgrade.
But unlike the ocr disk sharedness check that passed in 11gR1 the raw device sharedness check will fail.
Checking OCR integrity...
Check for compatible storage device for OCR location "/dev/raw/raw1"...

ERROR:
PRVF-10037 : Failed to retrieve storage type for "/dev/raw/raw1" on node "rac2"
Could not get the type of storage

ERROR:
PRVF-10037 : Failed to retrieve storage type for "/dev/raw/raw1" on node "rac1"
Could not get the type of storage

OCR integrity check failed
But this error could be ignored as per Checklist for PRVF-10037 : Failed to retrieve storage type for xx on node xx [ID 1233505.1] by running the ocrcheck manually.

The full output from the cluvfy check is given below.
./runcluvfy.sh stage -pre crsinst -upgrade -n rac1,rac2 -rolling -src_crshome /opt/crs/oracle/product/10.2.0/crs -dest_crshome /opt/app/11.2.0/grid -dest_version 11.2.0.3.0 -fixup -fixupdir /home/oracle/fixupscript -verbose

Performing pre-checks for cluster services setup

Checking node reachability...

Check: Node reachability from node "rac1"
  Destination Node                      Reachable?
  ------------------------------------  ------------------------
  rac2                                  yes
  rac1                                  yes
Result: Node reachability check passed from node "rac1"


Checking user equivalence...

Check: User equivalence for user "oracle"
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
Result: User equivalence check passed for user "oracle"

Checking CRS user consistency
Result: CRS user consistency check successful

Checking node connectivity...

Checking hosts config file...
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed

Verification of the hosts config file successful


Interface information for node "rac2"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.86    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:90:0E:D3 1500
 eth0   192.168.0.90    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:90:0E:D3 1500
 eth1   192.168.0.88    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:C4:DE:3F 1500


Interface information for node "rac1"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.85    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:81:60:F7 1500
 eth0   192.168.0.89    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:81:60:F7 1500
 eth1   192.168.0.87    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:C9:FD:D3 1500


Check: Node connectivity for interface "eth0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  rac2[192.168.0.86]              rac2[192.168.0.90]              yes
  rac2[192.168.0.86]              rac2[192.168.0.88]              yes
  rac2[192.168.0.86]              rac1[192.168.0.85]              yes
  rac2[192.168.0.86]              rac1[192.168.0.89]              yes
  rac2[192.168.0.86]              rac1[192.168.0.87]              yes
  rac2[192.168.0.90]              rac2[192.168.0.88]              yes
  rac2[192.168.0.90]              rac1[192.168.0.85]              yes
  rac2[192.168.0.90]              rac1[192.168.0.89]              yes
  rac2[192.168.0.90]              rac1[192.168.0.87]              yes
  rac2[192.168.0.88]              rac1[192.168.0.85]              yes
  rac2[192.168.0.88]              rac1[192.168.0.89]              yes
  rac2[192.168.0.88]              rac1[192.168.0.87]              yes
  rac1[192.168.0.85]              rac1[192.168.0.89]              yes
  rac1[192.168.0.85]              rac1[192.168.0.87]              yes
  rac1[192.168.0.89]              rac1[192.168.0.87]              yes
Result: Node connectivity passed for interface "eth0"

Check: TCP connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  rac1:192.168.0.85               rac2:192.168.0.86               passed
  rac1:192.168.0.85               rac2:192.168.0.90               passed
  rac1:192.168.0.85               rac2:192.168.0.88               passed
  rac1:192.168.0.85               rac1:192.168.0.89               passed
  rac1:192.168.0.85               rac1:192.168.0.87               passed
Result: TCP connectivity check passed for subnet "192.168.0.0"


Check: Node connectivity for interface "eth1"
Checking subnet mask consistency...
Subnet mask consistency check passed for subnet "192.168.0.0".
Subnet mask consistency check passed.

Result: Node connectivity check passed

Checking multicast communication...

Checking subnet "192.168.0.0" for multicast communication with multicast group "230.0.1.0"...
Check of subnet "192.168.0.0" for multicast communication with multicast group "230.0.1.0" passed.

Check of multicast communication passed.

Checking OCR integrity...
Check for compatible storage device for OCR location "/dev/raw/raw1"...

ERROR:
PRVF-10037 : Failed to retrieve storage type for "/dev/raw/raw1" on node "rac2"
Could not get the type of storage

ERROR:
PRVF-10037 : Failed to retrieve storage type for "/dev/raw/raw1" on node "rac1"
Could not get the type of storage

OCR integrity check failed

Checking ASMLib configuration.
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
Result: Check for ASMLib configuration passed.

Check: Total memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          1.9609GB (2056180.0KB)    1.5GB (1572864.0KB)       passed
  rac1          1.9609GB (2056180.0KB)    1.5GB (1572864.0KB)       passed
Result: Total memory check passed

Check: Available memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          1.326GB (1390364.0KB)     50MB (51200.0KB)          passed
  rac1          1.1387GB (1194000.0KB)    50MB (51200.0KB)          passed
Result: Available memory check passed

Check: Swap space
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          3.9987GB (4192956.0KB)    2.9414GB (3084270.0KB)    passed
  rac1          3.9987GB (4192956.0KB)    2.9414GB (3084270.0KB)    passed
Result: Swap space check passed

Check: Free disk space for "rac2:/opt/app/11.2.0/grid,rac2:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /opt/app/11.2.0/grid  rac2          /             13.3779GB     7.5GB         passed
  /tmp              rac2          /             13.3779GB     7.5GB         passed
Result: Free disk space check passed for "rac2:/opt/app/11.2.0/grid,rac2:/tmp"

Check: Free disk space for "rac1:/opt/app/11.2.0/grid,rac1:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /opt/app/11.2.0/grid  rac1          /             11.3978GB     7.5GB         passed
  /tmp              rac1          /             11.3978GB     7.5GB         passed
Result: Free disk space check passed for "rac1:/opt/app/11.2.0/grid,rac1:/tmp"

Check: User existence for "oracle"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    exists(500)
  rac1          passed                    exists(500)

Checking for multiple users with UID value 500
Result: Check for multiple users with UID value 500 passed
Result: User existence check passed for "oracle"

Check: Group existence for "oinstall"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    exists
  rac1          passed                    exists
Result: Group existence check passed for "oinstall"

Check: Membership of user "oracle" in group "oinstall" [as Primary]
  Node Name         User Exists   Group Exists  User in Group  Primary       Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              yes           yes           yes           yes           passed
  rac1              yes           yes           yes           yes           passed
Result: Membership check for user "oracle" in group "oinstall" [as Primary] passed

Check: Run level
  Node Name     run level                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          3                         3,5                       passed
  rac1          3                         3,5                       passed
Result: Run level check passed

Check: Hard limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              hard          65536         65536         passed
  rac1              hard          65536         65536         passed
Result: Hard limits check passed for "maximum open file descriptors"

Check: Soft limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              soft          1024          1024          passed
  rac1              soft          1024          1024          passed
Result: Soft limits check passed for "maximum open file descriptors"

Check: Hard limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              hard          16384         16384         passed
  rac1              hard          16384         16384         passed
Result: Hard limits check passed for "maximum user processes"

Check: Soft limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              soft          2047          2047          passed
  rac1              soft          2047          2047          passed
Result: Soft limits check passed for "maximum user processes"

There are no oracle patches required for home "/opt/crs/oracle/product/10.2.0/crs".

There are no oracle patches required for home "/opt/app/11.2.0/grid".

Check: System architecture
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          x86_64                    x86_64                    passed
  rac1          x86_64                    x86_64                    passed
Result: System architecture check passed

Check: Kernel version
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          2.6.9-89.ELsmp            2.6.9                     passed
  rac1          2.6.9-89.ELsmp            2.6.9                     passed
Result: Kernel version check passed

Check: Kernel parameter for "semmsl"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              250           250           250           passed
  rac1              250           250           250           passed
Result: Kernel parameter check passed for "semmsl"

Check: Kernel parameter for "semmns"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              32000         32000         32000         passed
  rac1              32000         32000         32000         passed
Result: Kernel parameter check passed for "semmns"

Check: Kernel parameter for "semopm"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              100           100           100           passed
  rac1              100           100           100           passed
Result: Kernel parameter check passed for "semopm"

Check: Kernel parameter for "semmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              128           128           128           passed
  rac1              128           128           128           passed
Result: Kernel parameter check passed for "semmni"

Check: Kernel parameter for "shmmax"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              1052764160    1052764160    1052764160    passed
  rac1              1052764160    1052764160    1052764160    passed
Result: Kernel parameter check passed for "shmmax"

Check: Kernel parameter for "shmmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4096          4096          4096          passed
  rac1              4096          4096          4096          passed
Result: Kernel parameter check passed for "shmmni"

Check: Kernel parameter for "shmall"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              2097152       2097152       2097152       passed
  rac1              2097152       2097152       2097152       passed
Result: Kernel parameter check passed for "shmall"

Check: Kernel parameter for "file-max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              6815744       6815744       6815744       passed
  rac1              6815744       6815744       6815744       passed
Result: Kernel parameter check passed for "file-max"

Check: Kernel parameter for "ip_local_port_range"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed
  rac1              between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed
Result: Kernel parameter check passed for "ip_local_port_range"

Check: Kernel parameter for "rmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              1048576       1048576       262144        passed
  rac1              1048576       1048576       262144        passed
Result: Kernel parameter check passed for "rmem_default"

Check: Kernel parameter for "rmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4194304       4194304       4194304       passed
  rac1              4194304       4194304       4194304       passed
Result: Kernel parameter check passed for "rmem_max"

Check: Kernel parameter for "wmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              262144        262144        262144        passed
  rac1              262144        262144        262144        passed
Result: Kernel parameter check passed for "wmem_default"

Check: Kernel parameter for "wmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              1048576       1048576       1048576       passed
  rac1              1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "wmem_max"

Check: Kernel parameter for "aio-max-nr"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              1048576       1048576       1048576       passed
  rac1              1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "aio-max-nr"

Check: Package existence for "make"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          make-3.80-7.EL4           make-3.80                 passed
  rac1          make-3.80-7.EL4           make-3.80                 passed
Result: Package existence check passed for "make"

Check: Package existence for "binutils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          binutils-2.15.92.0.2-25   binutils-2.15.92.0.2      passed
  rac1          binutils-2.15.92.0.2-25   binutils-2.15.92.0.2      passed
Result: Package existence check passed for "binutils"

Check: Package existence for "gcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          gcc(x86_64)-3.4.6-11      gcc(x86_64)-3.4.6         passed
  rac1          gcc(x86_64)-3.4.6-11      gcc(x86_64)-3.4.6         passed
Result: Package existence check passed for "gcc(x86_64)"

Check: Package existence for "libaio(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libaio(x86_64)-0.3.105-2  libaio(x86_64)-0.3.105    passed
  rac1          libaio(x86_64)-0.3.105-2  libaio(x86_64)-0.3.105    passed
Result: Package existence check passed for "libaio(x86_64)"

Check: Package existence for "glibc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc(x86_64)-2.3.4-2.43  glibc(x86_64)-2.3.4-2.41  passed
  rac1          glibc(x86_64)-2.3.4-2.43  glibc(x86_64)-2.3.4-2.41  passed
Result: Package existence check passed for "glibc(x86_64)"

Check: Package existence for "compat-libstdc++-33(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          compat-libstdc++-33(x86_64)-3.2.3-47.3  compat-libstdc++-33(x86_64)-3.2.3  passed
  rac1          compat-libstdc++-33(x86_64)-3.2.3-47.3  compat-libstdc++-33(x86_64)-3.2.3  passed
Result: Package existence check passed for "compat-libstdc++-33(x86_64)"

Check: Package existence for "elfutils-libelf(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          elfutils-libelf(x86_64)-0.97.1-5  elfutils-libelf(x86_64)-0.97  passed
  rac1          elfutils-libelf(x86_64)-0.97.1-5  elfutils-libelf(x86_64)-0.97  passed
Result: Package existence check passed for "elfutils-libelf(x86_64)"

Check: Package existence for "elfutils-libelf-devel"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          elfutils-libelf-devel-0.97.1-5  elfutils-libelf-devel-0.97  passed
  rac1          elfutils-libelf-devel-0.97.1-5  elfutils-libelf-devel-0.97  passed
Result: Package existence check passed for "elfutils-libelf-devel"

Check: Package existence for "glibc-common"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-common-2.3.4-2.43   glibc-common-2.3.4        passed
  rac1          glibc-common-2.3.4-2.43   glibc-common-2.3.4        passed
Result: Package existence check passed for "glibc-common"

Check: Package existence for "glibc-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-devel(x86_64)-2.3.4-2.43  glibc-devel(x86_64)-2.3.4  passed
  rac1          glibc-devel(x86_64)-2.3.4-2.43  glibc-devel(x86_64)-2.3.4  passed
Result: Package existence check passed for "glibc-devel(x86_64)"

Check: Package existence for "glibc-headers"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-headers-2.3.4-2.43  glibc-headers-2.3.4       passed
  rac1          glibc-headers-2.3.4-2.43  glibc-headers-2.3.4       passed
Result: Package existence check passed for "glibc-headers"

Check: Package existence for "gcc-c++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          gcc-c++(x86_64)-3.4.6-11  gcc-c++(x86_64)-3.4.6     passed
  rac1          gcc-c++(x86_64)-3.4.6-11  gcc-c++(x86_64)-3.4.6     passed
Result: Package existence check passed for "gcc-c++(x86_64)"

Check: Package existence for "libaio-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libaio-devel(x86_64)-0.3.105-2  libaio-devel(x86_64)-0.3.105  passed
  rac1          libaio-devel(x86_64)-0.3.105-2  libaio-devel(x86_64)-0.3.105  passed
Result: Package existence check passed for "libaio-devel(x86_64)"

Check: Package existence for "libgcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libgcc(x86_64)-3.4.6-11   libgcc(x86_64)-3.4.6      passed
  rac1          libgcc(x86_64)-3.4.6-11   libgcc(x86_64)-3.4.6      passed
Result: Package existence check passed for "libgcc(x86_64)"

Check: Package existence for "libstdc++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libstdc++(x86_64)-3.4.6-11  libstdc++(x86_64)-3.4.6   passed
  rac1          libstdc++(x86_64)-3.4.6-11  libstdc++(x86_64)-3.4.6   passed
Result: Package existence check passed for "libstdc++(x86_64)"

Check: Package existence for "libstdc++-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libstdc++-devel(x86_64)-3.4.6-11  libstdc++-devel(x86_64)-3.4.6  passed
  rac1          libstdc++-devel(x86_64)-3.4.6-11  libstdc++-devel(x86_64)-3.4.6  passed
Result: Package existence check passed for "libstdc++-devel(x86_64)"

Check: Package existence for "sysstat"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          sysstat-5.0.5-25.el4      sysstat-5.0.5             passed
  rac1          sysstat-5.0.5-25.el4      sysstat-5.0.5             passed
Result: Package existence check passed for "sysstat"

Check: Package existence for "pdksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          pdksh-5.2.14-30.6         pdksh-5.2.14              passed
  rac1          pdksh-5.2.14-30.6         pdksh-5.2.14              passed
Result: Package existence check passed for "pdksh"

Check: Package existence for "expat(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          expat(x86_64)-1.95.7-4    expat(x86_64)-1.95.7      passed
  rac1          expat(x86_64)-1.95.7-4    expat(x86_64)-1.95.7      passed
Result: Package existence check passed for "expat(x86_64)"

Checking for multiple users with UID value 0
Result: Check for multiple users with UID value 0 passed

Check: Current group ID
Result: Current group ID check passed

Starting check for consistency of primary group of root user
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed

Check for consistency of root user's primary group passed

Starting Clock synchronization checks using Network Time Protocol(NTP)...

NTP Configuration file check started...
Network Time Protocol(NTP) configuration file not found on any of the nodes. Oracle Cluster Time Synchronization Service(CTSS) can be used instead of NTP for time synchronization on the cluster nodes
No NTP Daemons or Services were found to be running

Result: Clock synchronization check using Network Time Protocol(NTP) passed

Checking Core file name pattern consistency...
Core file name pattern consistency check passed.

Checking to make sure user "oracle" is not in "root" group
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    does not exist
  rac1          passed                    does not exist
Result: User "oracle" is not part of "root" group. Check passed

Check default user file creation mask
  Node Name     Available                 Required                  Comment
  ------------  ------------------------  ------------------------  ----------
  rac2          0022                      0022                      passed
  rac1          0022                      0022                      passed
Result: Default user file creation mask check passed
Checking consistency of file "/etc/resolv.conf" across nodes

Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined
File "/etc/resolv.conf" does not have both domain and search entries defined
Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes...
domain entry in file "/etc/resolv.conf" is consistent across nodes
Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes...
search entry in file "/etc/resolv.conf" is consistent across nodes
Checking DNS response time for an unreachable node
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
The DNS response time for an unreachable node is within acceptable limit on all nodes

File "/etc/resolv.conf" is consistent across nodes


UDev attributes check for OCR locations started...
Result: UDev attributes check passed for OCR locations

UDev attributes check for Voting Disk locations started...
Result: UDev attributes check passed for Voting Disk locations

Check: Time zone consistency
Result: Time zone consistency check passed
Checking VIP configuration.
Checking VIP Subnet configuration.
Check for VIP Subnet configuration passed.
Checking VIP reachability
Check for VIP reachability passed.

Checking Oracle Cluster Voting Disk configuration...
Oracle Cluster Voting Disk configuration check passed
Clusterware version consistency passed
Pre-check for cluster services setup was unsuccessful on all the nodes.
Pre-check is unsuccessful because of the above mentioned check.

Configure a SCAN IP to be used with 11gR2 GI upgrade.

Create the new asm admin groups.
groupadd asmadmin
groupadd asmdba
groupadd asmoper
Modify the Oracle user from
id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)
To
usermod -g oinstall -G dba,oper,asmdba,asmoper,asmadmin oracle
id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asmadmin),505(asmdba),506(asmoper)

Start the clusterware upgrade while the cluster stack is up
crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac10g2.db application    ONLINE    ONLINE    rac1
ora....21.inst application    ONLINE    ONLINE    rac1
ora....22.inst application    ONLINE    ONLINE    rac2
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
Execute runInstaller

Select all nodes and ASM upgrade.

It is not possible to do a rolling ASM upgrade with 10gR2. When it is time to do a ASM upgrade all database instance will be shutdown. But the GI install and configuration will happen in a rolling manner.

Specify the new scan ip

Password for less privilege ASMSNMP user. Used to monitor ASM.

Specify new ASM admin groups

New location for GI used in the out-of-place upgrade.

Manually verify the failed check by checking the ignoreall check box.

Upgrade Summary


Execute rootupgrade.sh script one node at a time. Database and ASM will be brought down and back up again once the script has finished executing.

Running rootupgrade.sh on first node (rac1)
# /opt/app/11.2.0/grid/rootupgrade.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /opt/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /opt/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Replacing Clusterware entries in inittab
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configure Oracle Grid Infrastructure for a Cluster ... succeeded
Software version is upgrade but active version remain 10.2.0.5 until all nodes are upgraded
crsctl query crs activeversion
CRS active version on the cluster is [10.2.0.5.0]

crsctl query crs softwareversion
CRS software version on node [rac1] is [11.2.0.3.0]
Running rootupgrade.sh on second node (rac2)
# /opt/app/11.2.0/grid/rootupgrade.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /opt/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /opt/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
OLR initialization - successful
Replacing Clusterware entries in inittab
clscfg: EXISTING configuration version 5 detected.
clscfg: version 5 is 11g Release 2.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Start upgrade invoked..
Started to upgrade the Oracle Clusterware. This operation may take a few minutes.
Started to upgrade the OCR.
Started to upgrade the CSS.
Started to upgrade the CRS.
The CRS was successfully upgraded.
Oracle Clusterware operating version was successfully set to 11.2.0.3.0
Preparing packages for installation...
cvuqdisk-1.0.9-1
Configure Oracle Grid Infrastructure for a Cluster ... succeeded
Active version is upgraded to 11.2.0.3
crsctl query crs activeversion
CRS active version on the cluster is [11.2.0.3.0]
When the OK button is clicked on Execute Configuration Script dialog other configuration tasks starts. During ASM upgrade all database instances will be brought down automatically and once ASM is upgraded will be brought up.

This conclude the clusterware upgrade to grid infrastructure and GI will be using the raw devices for ocr and vote disk.
crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   a3b3d5071afb7fc0ffb0f7bc4a90fd43 (/dev/raw/raw2) []
Located 1 voting disk(s).

ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          3
         Total space (kbytes)     :     103596
         Used space (kbytes)      :       6032
         Available space (kbytes) :      97564
         ID                       :  972426829
         Device/File Name         : /dev/raw/raw1
                                    Device/File integrity check succeeded

                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
         Cluster registry integrity check succeeded
         Logical corruption check succeeded
Some resource types will have auto start option set never. These could be changed as required
Resource Name                       Type                      Auto Start State
-----------                         ------                    ----------------
ora.DATA.dg                         ora.diskgroup.type        never
ora.FLASH.dg                        ora.diskgroup.type        never
ora.LISTENER.lsnr                   ora.listener.type         restore
ora.LISTENER_SCAN1.lsnr             ora.scan_listener.type    restore
ora.asm                             ora.asm.type              never
ora.cvu                             ora.cvu.type              restore
ora.gsd                             ora.gsd.type              always
ora.net1.network                    ora.network.type          restore
ora.oc4j                            ora.oc4j.type             restore
ora.ons                             ora.ons.type              always
ora.rac1.vip                        ora.cluster_vip_net1.type restore
ora.rac10g2.db                      application               restore
ora.rac10g2.rac10g21.inst           application               1
ora.rac10g2.rac10g22.inst           application               1
ora.rac2.vip                        ora.cluster_vip_net1.type restore
ora.scan1.vip                       ora.scan_vip.type         restore
Script to get the above output is available in 11.1.0.7 to 11.2.0.3 post and how to modify the option availablehere.




Next step is to upgrade the RAC software and upgrade the database. As per 1358166.1 there's no pre-patch required if the timezone is 4 on 10gR2 but it's advised to upgrade the timezone to 14 after the upgrade. This could be done while upgrading the database. Current timezone is 4
SQL>  SELECT version FROM v$timezone_file;

   VERSION
----------
         4
Execute runInstaller from database software location.

Select all nodes part of the RAC

New location for out-of-place upgrade.

OS groups for database administration.

Summary

Execute root.sh on all nodes

End of root.sh and clicking OK button will result in start of DBUA. All but one instance will be brought down, upgrade will continue on the instance that is up and once completed all instance will be brought up.


Upgrade timezone during the database upgrade

Pre-upgrade summary

Upgrade result

Conclude the RAC software and database upgrade

Similar to 11.1.0.7 to 11.2.0.3 remote listener entry will have both tnsnames.ora entries from 10gR2 and scan ip
remote_listener                      string      LISTENERS_RAC10G2, rac-scan:1521

Even though 10gR2 RAC had Jan 2012 PSU applied and _external_scn_rejection_threshold_hours set it was commented during upgrade and was not present after the upgrade.

Create an application service for FCF.

Useful metalink notes
Checklist for PRVF-10037 : Failed to retrieve storage type for xx on node xx [ID 1233505.1]
ASM upgrade failure from 10.2.0.4 to 11.2.0.2 [ID 1336812.1]
Alternative Way To Upgrade An ASM RAC Configuration From Release 10.2 Or 11.1 To Release 11.2 [ID 1422415.1]
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.3 Patchset [ID 1358166.1]
Things to Consider Before Upgrading to 11.2.0.3 to Avoid Poor Performance or Wrong Results [ID 1392633.1]
Oracle 11gR2 Upgrade Companion [ID 785351.1]

Friday, March 9, 2012

Upgrade from 11.1.0.7 to 11.2.0.3 (Clusterware, ASM & RAC)

This blog list the steps for two node cluster upgrade from 11.1.0.7 and 11.2.0.3 Two nodes are named rac1 and rac2 running on RHEL 5 with block devices for ocr and vote disks. There's an earlier blog which shows upgrade from 11.1.0.7 to 11.2.0.1 and a recent post with highlights of upgrading from 11.1.0.7 to 11.2.0.4

Relevant section for 11.1 upgrade to 11.2 from GI Install guide.
After you have completed the Oracle Clusterware 11g release 2 (11.2) upgrade, if you did not choose to upgrade Oracle ASM when you upgraded Oracle Clusterware, then you can do it separately using the Oracle Automatic Storage Management Configuration Assistant (asmca) to perform rolling upgrades. You can use asmca to complete the upgrade separately, but you should do it soon after you upgrade Oracle Clusterware, as Oracle ASM management tools such as srvctl will not work until Oracle ASM is upgraded.

ASMCA performs a rolling upgrade only if the earlier version of Oracle ASM is either 11.1.0.6 or 11.1.0.7. Otherwise, ASMCA performs a normal upgrade, in which ASMCA brings down all Oracle ASM instances on all nodes of the cluster, and then brings them all up in the new Grid home.

You can use Oracle Database release 9.2, release 10.x and release 11.1 with Oracle Clusterware 11g release 2 (11.2). However, placing Oracle Database homes on Oracle ACFS that are prior to Oracle Database release 11.2 is not supported, because earlier releases are not designed to use Oracle ACFS.

If you upgrade an existing version of Oracle Clusterware and Oracle ASM to Oracle Grid Infrastructure 11g release 11.2 (which includes Oracle Clusterware and Oracle ASM), and you also plan to upgrade your Oracle RAC database to 11.2, then the required configuration of existing databases is completed automatically when you complete the Oracle RAC upgrade, and this section does not concern you.

However, if you upgrade to Oracle Grid Infrastructure 11g release 11.2, and you have existing Oracle RAC installations you do not plan to upgrade, or if you install older versions of Oracle RAC (9.2, 10.2 or 11.1) on a release 11.2 Oracle Grid Infrastructure cluster, then you must complete additional configuration tasks or apply patches, or both, before the older databases will work correctly with Oracle Grid Infrastructure.

Before you start an Oracle RAC or Oracle Database installation on an Oracle Clusterware 11g release 11.2 installation, if you are upgrading from releases 11.1.0.7, 11.1.0.6, and 10.2.0.4, then Oracle recommends that you check for the latest recommended patches for the release you are upgrading from, and install those patches as needed on your existing database installations before upgrading.

During an upgrade, all cluster member nodes are pinned automatically, and no manual pinning is required for existing databases. This procedure is required only if you install older database versions after installing Oracle Grid Infrastructure release 11.2 software.

To upgrade existing 11.1 Oracle Clusterware installations to Oracle Grid Infrastructure 11.2.0.3 or later, you must patch the release 11.1 Oracle Clusterware home with the patch for bug 7308467.
(Included in PSU 11.1.0.7.6 for CRS) This cluster has 11.1.0.7.7 CRS PSU installed and Jan 2012 PSU installed on RAC.

With Oracle Clusterware 11g release 1 and later releases, the same user that owned the Oracle Clusterware 10g software must perform the Oracle Clusterware 11g upgrade. Before Oracle Database 11g, either all Oracle software installations were owned by the Oracle user, typically oracle, or Oracle Database software was owned by oracle, and Oracle Clusterware software was owned by a separate user, typically crs.

During a major version upgrade to 11g release 2 (11.2), the software in the 11g release 2 (11.2) Oracle Grid Infrastructure home is not fully functional until the upgrade is completed. Running srvctl, crsctl, and other commands from the 11g release 2 (11.2) home is not supported until the final rootupgrade.sh script is run and the upgrade is complete across all nodes. To manage databases in the existing earlier version (release 10.x or 11.1) database homes during the Oracle Grid Infrastructure upgrade, use the srvctl from the existing database homes.


From the Upgrade guide
A subset of nodes cannot be selected when upgrading from an earlier release to 11.2.0.3. Before the new database release 11.2.0.3 software can be installed on the system, the root script for upgrading Oracle Grid Infrastructure invokes ASMCA to upgrade Oracle ASM to release 11.2.0.3.

The cluster verification tool allows a pre-upgrade test. Some noteworthey checks that failed are
Check: Kernel parameter for "shmmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4096          unknown       4096          failed        Configured value too low.
  rac1              4096          unknown       4096          failed        Configured value too low.
Result: Kernel parameter check failed for "shmmni"
Even though this is an existing 11gR1 system and this value is set it is considered as unknown. Running the fix script generated by clufy fixed this.

11gR2 has a different port range than 11gR1
Check: Kernel parameter for "ip_local_port_range"
Also install cvuqdisk-1.0.9-1.rpm for ocr block device sharedness check otherwise this check will fail.

If ntp service is not used for time synchronization remove it, to pass the ntp service check
NTP Configuration file check started...
The NTP configuration file "/etc/ntp.conf" is available on all nodes
NTP Configuration file check passed
No NTP Daemons or Services were found to be running
PRVF-5507 : NTP daemon or service is not running on any node but NTP configuration file exists on the following node(s):
rac2,rac1
Result: Clock synchronization check using Network Time Protocol(NTP) failed
To fix (if ntp is not used)
mv /etc/ntp.conf /etc/ntp.conf.orig

/sbin/chkconfig ntp off
/sbin/chkconfig --list | grep ntp
ntpd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
cluvfy also check for patch 11724953. This is the 2011 April CRS PSU so if this is applied no additional patches are needed.

The full output from the cluvfy check is given below.
./runcluvfy.sh stage -pre crsinst -upgrade -n rac1,rac2 -rolling -src_crshome /opt/crs/oracle/product/11.1.0/crs -dest_crshome /opt/app/11.2.0/grid -dest_version 11.2.0.3.0 -fixup -fixupdir /home/oracle/fixupscript -verbose

Performing pre-checks for cluster services setup

Checking node reachability...

Check: Node reachability from node "rac1"
  Destination Node                      Reachable?
  ------------------------------------  ------------------------
  rac2                                  yes
  rac1                                  yes
Result: Node reachability check passed from node "rac1"


Checking user equivalence...

Check: User equivalence for user "oracle"
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
Result: User equivalence check passed for user "oracle"

Checking CRS user consistency
Result: CRS user consistency check successful

Checking node connectivity...

Checking hosts config file...
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed

Verification of the hosts config file successful


Interface information for node "rac2"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.86    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:DD:3E:76 1500
 eth0   192.168.0.90    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:DD:3E:76 1500
 eth1   192.168.0.88    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:F4:97:4E 1500


Interface information for node "rac1"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.85    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:AA:B9:2B 1500
 eth0   192.168.0.89    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:AA:B9:2B 1500
 eth1   192.168.0.87    192.168.0.0     0.0.0.0         192.168.0.100   08:00:27:37:7D:FC 1500


Check: Node connectivity for interface "eth0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  rac2[192.168.0.86]              rac2[192.168.0.90]              yes
  rac2[192.168.0.86]              rac2[192.168.0.88]              yes
  rac2[192.168.0.86]              rac1[192.168.0.85]              yes
  rac2[192.168.0.86]              rac1[192.168.0.89]              yes
  rac2[192.168.0.86]              rac1[192.168.0.87]              yes
  rac2[192.168.0.90]              rac2[192.168.0.88]              yes
  rac2[192.168.0.90]              rac1[192.168.0.85]              yes
  rac2[192.168.0.90]              rac1[192.168.0.89]              yes
  rac2[192.168.0.90]              rac1[192.168.0.87]              yes
  rac2[192.168.0.88]              rac1[192.168.0.85]              yes
  rac2[192.168.0.88]              rac1[192.168.0.89]              yes
  rac2[192.168.0.88]              rac1[192.168.0.87]              yes
  rac1[192.168.0.85]              rac1[192.168.0.89]              yes
  rac1[192.168.0.85]              rac1[192.168.0.87]              yes
  rac1[192.168.0.89]              rac1[192.168.0.87]              yes
Result: Node connectivity passed for interface "eth0"


Check: TCP connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  rac1:192.168.0.85               rac2:192.168.0.86               passed
  rac1:192.168.0.85               rac2:192.168.0.90               passed
  rac1:192.168.0.85               rac2:192.168.0.88               passed
  rac1:192.168.0.85               rac1:192.168.0.89               passed
  rac1:192.168.0.85               rac1:192.168.0.87               passed
Result: TCP connectivity check passed for subnet "192.168.0.0"


Check: Node connectivity for interface "eth1"
Checking subnet mask consistency...
Subnet mask consistency check passed for subnet "192.168.0.0".
Subnet mask consistency check passed.

Result: Node connectivity check passed

Checking multicast communication...

Checking subnet "192.168.0.0" for multicast communication with multicast group "230.0.1.0"...
Check of subnet "192.168.0.0" for multicast communication with multicast group "230.0.1.0" passed.

Check of multicast communication passed.

Checking OCR integrity...
Check for compatible storage device for OCR location "/dev/sdb1"...


Checking OCR device "/dev/sdb1" for sharedness...

OCR device "/dev/sdb1" is shared...


Checking size of the OCR location "/dev/sdb1" ...

Size check for OCR location "/dev/sdb1" successful...

OCR integrity check passed

Checking ASMLib configuration.
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
Result: Check for ASMLib configuration passed.

Check: Total memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          1.9641GB (2059516.0KB)    1.5GB (1572864.0KB)       passed
  rac1          1.9641GB (2059516.0KB)    1.5GB (1572864.0KB)       passed
Result: Total memory check passed

Check: Available memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          1.2643GB (1325668.0KB)    50MB (51200.0KB)          passed
  rac1          1.0908GB (1143820.0KB)    50MB (51200.0KB)          passed
Result: Available memory check passed

Check: Swap space
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          3.9987GB (4192956.0KB)    2.9462GB (3089274.0KB)    passed
  rac1          3.9987GB (4192956.0KB)    2.9462GB (3089274.0KB)    passed
Result: Swap space check passed

Check: Free disk space for "rac2:/opt/app/11.2.0/grid,rac2:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /opt/app/11.2.0/grid  rac2          /             21.5547GB     7.5GB         passed
  /tmp              rac2          /             21.5547GB     7.5GB         passed
Result: Free disk space check passed for "rac2:/opt/app/11.2.0/grid,rac2:/tmp"

Check: Free disk space for "rac1:/opt/app/11.2.0/grid,rac1:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /opt/app/11.2.0/grid  rac1          /             21.2863GB     7.5GB         passed
  /tmp              rac1          /             21.2863GB     7.5GB         passed
Result: Free disk space check passed for "rac1:/opt/app/11.2.0/grid,rac1:/tmp"

Check: User existence for "oracle"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    exists(501)
  rac1          passed                    exists(501)

Checking for multiple users with UID value 501
Result: Check for multiple users with UID value 501 passed
Result: User existence check passed for "oracle"

Check: Group existence for "oinstall"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    exists
  rac1          passed                    exists
Result: Group existence check passed for "oinstall"

Check: Membership of user "oracle" in group "oinstall" [as Primary]
  Node Name         User Exists   Group Exists  User in Group  Primary       Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              yes           yes           yes           yes           passed
  rac1              yes           yes           yes           yes           passed
Result: Membership check for user "oracle" in group "oinstall" [as Primary] passed

Check: Run level
  Node Name     run level                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          3                         3,5                       passed
  rac1          3                         3,5                       passed
Result: Run level check passed

Check: Hard limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              hard          65536         65536         passed
  rac1              hard          65536         65536         passed
Result: Hard limits check passed for "maximum open file descriptors"

Check: Soft limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              soft          1024          1024          passed
  rac1              soft          1024          1024          passed
Result: Soft limits check passed for "maximum open file descriptors"

Check: Hard limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              hard          16384         16384         passed
  rac1              hard          16384         16384         passed
Result: Hard limits check passed for "maximum user processes"

Check: Soft limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  rac2              soft          2047          2047          passed
  rac1              soft          2047          2047          passed
Result: Soft limits check passed for "maximum user processes"

Checking for Oracle patch "11724953" in home "/opt/crs/oracle/product/11.1.0/crs".
  Node Name     Applied                   Required                  Comment
  ------------  ------------------------  ------------------------  ----------
  rac2          11724953                  11724953                  passed
  rac1          11724953                  11724953                  passed
Result: Check for Oracle patch "11724953" in home "/opt/crs/oracle/product/11.1.0/crs" passed

There are no oracle patches required for home "/opt/app/11.2.0/grid".

Check: System architecture
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          x86_64                    x86_64                    passed
  rac1          x86_64                    x86_64                    passed
Result: System architecture check passed

Check: Kernel version
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          2.6.18-194.el5            2.6.18                    passed
  rac1          2.6.18-194.el5            2.6.18                    passed
Result: Kernel version check passed

Check: Kernel parameter for "semmsl"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              3010          3010          250           passed
  rac1              3010          3010          250           passed
Result: Kernel parameter check passed for "semmsl"

Check: Kernel parameter for "semmns"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              385280        385280        32000         passed
  rac1              385280        385280        32000         passed
Result: Kernel parameter check passed for "semmns"

Check: Kernel parameter for "semopm"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              3010          3010          100           passed
  rac1              3010          3010          100           passed
Result: Kernel parameter check passed for "semopm"

Check: Kernel parameter for "semmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              128           128           128           passed
  rac1              128           128           128           passed
Result: Kernel parameter check passed for "semmni"

Check: Kernel parameter for "shmmax"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              68719476736   68719476736   1054472192    passed
  rac1              68719476736   68719476736   1054472192    passed
Result: Kernel parameter check passed for "shmmax"

Check: Kernel parameter for "shmmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4096          4096          4096          passed
  rac1              4096          4096          4096          passed
Result: Kernel parameter check passed for "shmmni"

Check: Kernel parameter for "shmall"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4294967296    4294967296    2097152       passed
  rac1              4294967296    4294967296    2097152       passed
Result: Kernel parameter check passed for "shmall"

Check: Kernel parameter for "file-max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              6815744       6815744       6815744       passed
  rac1              6815744       6815744       6815744       passed
Result: Kernel parameter check passed for "file-max"

Check: Kernel parameter for "ip_local_port_range"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed
  rac1              between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed
Result: Kernel parameter check passed for "ip_local_port_range"

Check: Kernel parameter for "rmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4194304       4194304       262144        passed
  rac1              4194304       4194304       262144        passed
Result: Kernel parameter check passed for "rmem_default"

Check: Kernel parameter for "rmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              4194304       4194304       4194304       passed
  rac1              4194304       4194304       4194304       passed
Result: Kernel parameter check passed for "rmem_max"

Check: Kernel parameter for "wmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              1048576       1048576       262144        passed
  rac1              1048576       1048576       262144        passed
Result: Kernel parameter check passed for "wmem_default"

Check: Kernel parameter for "wmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              2097152       2097152       1048576       passed
  rac1              2097152       2097152       1048576       passed
Result: Kernel parameter check passed for "wmem_max"

Check: Kernel parameter for "aio-max-nr"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  rac2              3145728       3145728       1048576       passed
  rac1              3145728       3145728       1048576       passed
Result: Kernel parameter check passed for "aio-max-nr"

Check: Package existence for "make"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          make-3.81-3.el5           make-3.81                 passed
  rac1          make-3.81-3.el5           make-3.81                 passed
Result: Package existence check passed for "make"

Check: Package existence for "binutils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          binutils-2.17.50.0.6-14.el5  binutils-2.17.50.0.6      passed
  rac1          binutils-2.17.50.0.6-14.el5  binutils-2.17.50.0.6      passed
Result: Package existence check passed for "binutils"

Check: Package existence for "gcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          gcc(x86_64)-4.1.2-48.el5  gcc(x86_64)-4.1.2         passed
  rac1          gcc(x86_64)-4.1.2-48.el5  gcc(x86_64)-4.1.2         passed
Result: Package existence check passed for "gcc(x86_64)"

Check: Package existence for "libaio(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libaio(x86_64)-0.3.106-5  libaio(x86_64)-0.3.106    passed
  rac1          libaio(x86_64)-0.3.106-5  libaio(x86_64)-0.3.106    passed
Result: Package existence check passed for "libaio(x86_64)"

Check: Package existence for "glibc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc(x86_64)-2.5-49      glibc(x86_64)-2.5-24      passed
  rac1          glibc(x86_64)-2.5-49      glibc(x86_64)-2.5-24      passed
Result: Package existence check passed for "glibc(x86_64)"

Check: Package existence for "compat-libstdc++-33(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          compat-libstdc++-33(x86_64)-3.2.3-61  compat-libstdc++-33(x86_64)-3.2.3  passed
  rac1          compat-libstdc++-33(x86_64)-3.2.3-61  compat-libstdc++-33(x86_64)-3.2.3  passed
Result: Package existence check passed for "compat-libstdc++-33(x86_64)"

Check: Package existence for "elfutils-libelf(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          elfutils-libelf(x86_64)-0.137-3.el5  elfutils-libelf(x86_64)-0.125  passed
  rac1          elfutils-libelf(x86_64)-0.137-3.el5  elfutils-libelf(x86_64)-0.125  passed
Result: Package existence check passed for "elfutils-libelf(x86_64)"

Check: Package existence for "elfutils-libelf-devel"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          elfutils-libelf-devel-0.137-3.el5  elfutils-libelf-devel-0.125  passed
  rac1          elfutils-libelf-devel-0.137-3.el5  elfutils-libelf-devel-0.125  passed
Result: Package existence check passed for "elfutils-libelf-devel"

Check: Package existence for "glibc-common"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-common-2.5-49       glibc-common-2.5          passed
  rac1          glibc-common-2.5-49       glibc-common-2.5          passed
Result: Package existence check passed for "glibc-common"

Check: Package existence for "glibc-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-devel(x86_64)-2.5-49  glibc-devel(x86_64)-2.5   passed
  rac1          glibc-devel(x86_64)-2.5-49  glibc-devel(x86_64)-2.5   passed
Result: Package existence check passed for "glibc-devel(x86_64)"

Check: Package existence for "glibc-headers"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          glibc-headers-2.5-49      glibc-headers-2.5         passed
  rac1          glibc-headers-2.5-49      glibc-headers-2.5         passed
Result: Package existence check passed for "glibc-headers"

Check: Package existence for "gcc-c++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          gcc-c++(x86_64)-4.1.2-48.el5  gcc-c++(x86_64)-4.1.2     passed
  rac1          gcc-c++(x86_64)-4.1.2-48.el5  gcc-c++(x86_64)-4.1.2     passed
Result: Package existence check passed for "gcc-c++(x86_64)"

Check: Package existence for "libaio-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libaio-devel(x86_64)-0.3.106-5  libaio-devel(x86_64)-0.3.106  passed
  rac1          libaio-devel(x86_64)-0.3.106-5  libaio-devel(x86_64)-0.3.106  passed
Result: Package existence check passed for "libaio-devel(x86_64)"

Check: Package existence for "libgcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libgcc(x86_64)-4.1.2-48.el5  libgcc(x86_64)-4.1.2      passed
  rac1          libgcc(x86_64)-4.1.2-48.el5  libgcc(x86_64)-4.1.2      passed
Result: Package existence check passed for "libgcc(x86_64)"

Check: Package existence for "libstdc++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libstdc++(x86_64)-4.1.2-48.el5  libstdc++(x86_64)-4.1.2   passed
  rac1          libstdc++(x86_64)-4.1.2-48.el5  libstdc++(x86_64)-4.1.2   passed
Result: Package existence check passed for "libstdc++(x86_64)"

Check: Package existence for "libstdc++-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          libstdc++-devel(x86_64)-4.1.2-48.el5  libstdc++-devel(x86_64)-4.1.2  passed
  rac1          libstdc++-devel(x86_64)-4.1.2-48.el5  libstdc++-devel(x86_64)-4.1.2  passed
Result: Package existence check passed for "libstdc++-devel(x86_64)"

Check: Package existence for "sysstat"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          sysstat-7.0.2-3.el5       sysstat-7.0.2             passed
  rac1          sysstat-7.0.2-3.el5       sysstat-7.0.2             passed
Result: Package existence check passed for "sysstat"

Check: Package existence for "ksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          ksh-20100202-1.el5        ksh-20060214              passed
  rac1          ksh-20100202-1.el5        ksh-20060214              passed
Result: Package existence check passed for "ksh"

Checking for multiple users with UID value 0
Result: Check for multiple users with UID value 0 passed

Check: Current group ID
Result: Current group ID check passed

Starting check for consistency of primary group of root user
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed

Check for consistency of root user's primary group passed

Check: Package existence for "cvuqdisk"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  rac2          cvuqdisk-1.0.9-1          cvuqdisk-1.0.9-1          passed
  rac1          cvuqdisk-1.0.9-1          cvuqdisk-1.0.9-1          passed
Result: Package existence check passed for "cvuqdisk"

Starting Clock synchronization checks using Network Time Protocol(NTP)...

NTP Configuration file check started...
Network Time Protocol(NTP) configuration file not found on any of the nodes. Oracle Cluster Time Synchronization Service(CTSS) can be used instead of NTP for time synchronization on the cluster nodes
No NTP Daemons or Services were found to be running

Result: Clock synchronization check using Network Time Protocol(NTP) passed

Checking Core file name pattern consistency...
Core file name pattern consistency check passed.

Checking to make sure user "oracle" is not in "root" group
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  rac2          passed                    does not exist
  rac1          passed                    does not exist
Result: User "oracle" is not part of "root" group. Check passed

Check default user file creation mask
  Node Name     Available                 Required                  Comment
  ------------  ------------------------  ------------------------  ----------
  rac2          0022                      0022                      passed
  rac1          0022                      0022                      passed
Result: Default user file creation mask check passed
Checking consistency of file "/etc/resolv.conf" across nodes

Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined
File "/etc/resolv.conf" does not have both domain and search entries defined
Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes...
domain entry in file "/etc/resolv.conf" is consistent across nodes
Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes...
search entry in file "/etc/resolv.conf" is consistent across nodes
Checking file "/etc/resolv.conf" to make sure that only one search entry is defined
All nodes have one search entry defined in file "/etc/resolv.conf"
Checking all nodes to make sure that search entry is "domain.net" as found on node "rac2"
All nodes of the cluster have same value for 'search'
Checking DNS response time for an unreachable node
  Node Name                             Status
  ------------------------------------  ------------------------
  rac2                                  passed
  rac1                                  passed
The DNS response time for an unreachable node is within acceptable limit on all nodes

File "/etc/resolv.conf" is consistent across nodes


UDev attributes check for OCR locations started...
Checking udev settings for device "/dev/sdb1"
  Device            Owner         Group         Permissions   Result
  ----------------  ------------  ------------  ------------  ----------------
  sdb1              root          oinstall      640           passed

  sdb1              root          oinstall      640           passed

Result: UDev attributes check passed for OCR locations


UDev attributes check for Voting Disk locations started...
Checking udev settings for device "/dev/sdb2"
  Device            Owner         Group         Permissions   Result
  ----------------  ------------  ------------  ------------  ----------------
  sdb2              oracle        oinstall      640           passed

  sdb2              oracle        oinstall      640           passed

Result: UDev attributes check passed for Voting Disk locations

Check: Time zone consistency
Result: Time zone consistency check passed
Checking VIP configuration.
Checking VIP Subnet configuration.
Check for VIP Subnet configuration passed.
Checking VIP reachability
Check for VIP reachability passed.

Checking Oracle Cluster Voting Disk configuration...
Oracle Cluster Voting Disk configuration check passed
Clusterware version consistency passed
Pre-check for cluster services setup was successful.
11gR2 GI uses a SCAN IP which is a pre-req for the upgrade.

Even though upgrade must be done with the same user new user groups could be created for ASM administration. Using the same DBA and OPER group used for oracle user would give a warning.

Create the new asm admin groups.
groupadd asmadmin
groupadd asmdba
groupadd asmoper
Modify the Oracle user from
id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)
To
usermod -g oinstall -G dba,oper,asmdba,asmoper,asmadmin oracle
id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asmadmin),505(asmdba),506(asmoper)
Start the clusterware upgrade while the cluster is up
crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac11g1.db application    ONLINE    ONLINE    rac1
ora....11.inst application    ONLINE    ONLINE    rac1
ora....12.inst application    ONLINE    ONLINE    rac2
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
Execute runInstaller and follow the wizard. (only key steps are shown).
Select both (or all) nodes.
Specify the scan ip
Password for less privilege user (asmsnmp) to monitor ASM
Use the newly created ASM admin OS groups.
New GI Home location for the out-of-place ugprade
Pre-req check.
Summary



Until the rootupgrade.sh is run cluster stack is up on all nodes. When rootupgrade.sh is run on one node cluster stack on that node is brought down while other node's clusterware stack remains up and open for use. This way by default the upgrades are rolling upgrades. Once rootupgrade.sh is finished running, cluster stack on the node it was run will be brought up and ready for use while the other node's cluster stack is brought down with the rootupgrade.sh

Run rootupgrade.sh on rac1
# /opt/app/11.2.0/grid/rootupgrade.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /opt/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /opt/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Replacing Clusterware entries in inittab
clscfg: EXISTING configuration version 4 detected.
clscfg: version 4 is 11 Release 1.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    OFFLINE
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac11g1.db application    ONLINE    ONLINE    rac2
ora....11.inst application    ONLINE    ONLINE    rac1
ora....12.inst application    ONLINE    ONLINE    rac2
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
gsd is not up on 11gR2 this is normal.

Until all the nodes are upgraded the active version remains the lower version in this case 11.1.0.7 but the software version will be the new version on the upgraded node.
crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.1.0.7.0]

crsctl query crs softwareversion
Oracle Clusterware version on node [rac1] is [11.2.0.3.0]
Upgrade rac2
# /opt/app/11.2.0/grid/rootupgrade.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /opt/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /opt/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
OLR initialization - successful
Replacing Clusterware entries in inittab
clscfg: EXISTING configuration version 5 detected.
clscfg: version 5 is 11g Release 2.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Start upgrade invoked..
Started to upgrade the Oracle Clusterware. This operation may take a few minutes.
Started to upgrade the OCR.
Started to upgrade the CSS.
Started to upgrade the CRS.
The CRS was successfully upgraded.
Oracle Clusterware operating version was successfully set to 11.2.0.3.0

Configure Oracle Grid Infrastructure for a Cluster ... succeeded

crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac1
ora.cvu        ora.cvu.type   ONLINE    ONLINE    rac2
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE
ora....network ora....rk.type ONLINE    ONLINE    rac1
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac2
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    OFFLINE   OFFLINE
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1
ora.rac11g1.db application    ONLINE    ONLINE    rac1
ora....11.inst application    ONLINE    ONLINE    rac1
ora....12.inst application    ONLINE    ONLINE    rac2
ora....SM2.asm application    ONLINE    ONLINE    rac2
ora....C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    OFFLINE   OFFLINE
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2
ora....ry.acfs ora....fs.type OFFLINE   OFFLINE
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1
After all the nodes are upgraded active version will updated
crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.2.0.3.0]

crsctl query crs softwareversion
Oracle Clusterware version on node [rac2] is [11.2.0.3.0]
After rootupgrade.sh has finished on the last node click the OK button on the configuration script dialog. This would start configurations steps which also include the ASM upgrade.

ASM is upgraded in a rolling fashion, each database instance that is using the ASM instance being upgraded will be brought down automatically before the ASM upgrade and will be started once ASM is upgraded. Following could be observed on the ASM alert log
Reconfiguration complete
Thu Mar 08 19:13:39 2012
ALTER SYSTEM START ROLLING MIGRATION TO 11.2.0.3.0
The 11gR1 srvctl must be used to administer the database. Using the 11gR2 srvctl from the GI home would throw the following error
which srvctl
/opt/app/11.2.0/grid/bin/srvctl stop database -d rac11g1
PRCD-1027 : Failed to retrieve database rac11g1
PRCD-1027 : Failed to retrieve database rac11g1
PRKP-1088 : Failed to retrieve configuration of cluster database rac11g1
PRKR-1078 : Database rac11g1 of version 11.0.0.0.0 cannot be administered using current version of srvctl. Instead run srvctl from /opt/app/oracle/product/11.1.0/db_1



Next step is to upgrade the RAC, and this will be done as an out of place upgrade.
It is possible to upgrade the software and database at the same time.
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.3 Patchset [ID 1358166.1] gives details on timezone upgrade information for 11.2.0.3. In this upgrade path (11.1.0.7 -> 11.2.0.3) there's no need to apply any patches beforehand but after upgrade it's advised to ugprade the timezone. This could be done during DBUA exeuction by selecting the upgrade timezone option. Current timezone is
SQL> SELECT version FROM v$timezone_file;

   VERSION
----------
         4
If there are lot of em console related files in $ORACLE_HOME/hostname_instance/sysman/emd/upload/ file copying could take long time.

Execute runInstaller
Select all nodes
New location for out of place upgrade
RAC admin with same OS groups
Summary



Once the root.sh is run and OK button is clicked DBUA runs and database upgrade starts. For the cluster database all instances are shutdown and upgrade continues only on one node with one instance. At the end of the upgrade all instances are started.
Upgrade timezone with database upgrade.
Upgrade summary
Upgrade result
Once the database is upgraded RAC upgrade concludes.

Once the upgrade is finished uninstall 11gR1 clusterware home and database software.

Post upgrade notes.

remote listener has both tnsnames.ora entries from 11gR1 and scan ip on all nodes
remote_listener                      string      LISTENERS_RAC11G1, rac-scan:1521
Even though 11gR1 RAC had Jan 2012 PSU applied and _external_scn_rejection_threshold_hours set it was commented during upgrade and was not present after the upgrade.

After the upgrade database service will not work with FCF create an application service.

Some of the resource types will have auto_start option set to never. Execute following in a shell script
awk \
  'BEGIN {printf "%-35s %-25s %-18s\n", "Resource Name", "Type", "Auto Start State";
          printf "%-35s %-25s %-18s\n", "-----------", "------", "----------------";}'    
crsctl stat res -p | egrep -w "NAME|TYPE|AUTO_START" | grep -v DEFAULT_TEMPLATE | awk \
 'BEGIN { FS="="; state = 0; }
  $1~/NAME/ {appname = $2; state=1};
  state == 0 {next;}
  $1~/TYPE/ && state == 1 {apptarget = $2; state=2;}
  $1~/AUTO_START/ && state == 2 {appstate = $2; state=3;}
  state == 3 {printf "%-35s %-25s %-18s\n", appname, apptarget, appstate; state=0;}'


Resource Name                       Type                      Auto Start State
-----------                         ------                    ----------------
ora.DATA.dg                         ora.diskgroup.type        never
ora.FLASH.dg                        ora.diskgroup.type        never
ora.LISTENER.lsnr                   ora.listener.type         restore
ora.LISTENER_SCAN1.lsnr             ora.scan_listener.type    restore
ora.asm                             ora.asm.type              never
ora.cvu                             ora.cvu.type              restore
ora.gsd                             ora.gsd.type              always
ora.net1.network                    ora.network.type          restore
ora.oc4j                            ora.oc4j.type             restore
ora.ons                             ora.ons.type              always
ora.rac1.vip                        ora.cluster_vip_net1.type restore
ora.rac11g1.db                      ora.database.type         restore
ora.rac11g1.sbx.svc                 ora.service.type          restore
ora.rac2.vip                        ora.cluster_vip_net1.type restore
ora.registry.acfs                   ora.registry.acfs.type    restore
ora.scan1.vip                       ora.scan_vip.type         restore
Set the desired auto_start option.

Useful metalink notes
RACcheck 11.2.0.3 Upgrade Readiness Assessment [ID 1457357.1]
Things to Consider Before Upgrading to 11.2.0.3 Grid Infrastructure/ASM [ID 1363369.1]
Things to Consider Before Upgrading to 11.2.0.3 to Avoid Poor Performance or Wrong Results [ID 1392633.1]

Related Posts
Upgrading from 10.2.0.4 to 10.2.0.5 (Clusterware, RAC, ASM)
Upgrade from 10.2.0.5 to 11.2.0.3 (Clusterware, RAC, ASM)
Upgrade from 11.1.0.7 to 11.2.0.4 (Clusterware, ASM & RAC)
Upgrading from 11.1.0.7 to 11.2.0.3 with Transient Logical Standby
Upgrading from 11.2.0.1 to 11.2.0.3 with in-place upgrade for RAC
In-place upgrade from 11.2.0.2 to 11.2.0.3
Upgrading from 11.2.0.2 to 11.2.0.3 with Physical Standby - 1
Upgrading from 11.2.0.2 to 11.2.0.3 with Physical Standby - 2
Upgrading from 11gR2 (11.2.0.3) to 12c (12.1.0.1) Grid Infrastructure
Upgrading RAC from 11.2.0.4 to 12.1.0.2 - Grid Infrastructure

Wednesday, March 7, 2012

Upgrading from 11.1.0.7 to 11.2.0.3 with Transient Logical Standby

The KEEP IDENTITY clause introduced in Oracle 11g enables a logical standby to keep its DBID same as the primary. Using this feature a new upgrade strategy has been developed proposed by Oracle which uses a transient logical standby. This blog post shows the step to upgrading from 11.1.0.7 (with Jan 2012 PSU) to 11.2.0.3 for single instance (No ASM) databases that are in a physical standby configuration.

1. It is assume there is an existing physical standby data guard configuration and switchover between the database is working properly. Steps on how to created the data guard (11gR2 RAC Data guard) is not shown here.

2. 11gR2 database software upgrades could be done in-place as well as out of place (which is the recommended way). In this case out of place upgrade is used and to save time install the 11gR2 database software on the new location both on primary and standby database servers and apply the latest patches. Specially with Jan 2012 PSU this could lead to issues (step 11).

3. Copy the listener.ora and tnsnames.ora file from the existing 11gR1 Oracle Home to 11gR2 Oracle home and modify the Oracle Home value in listener.ora to point to 11gR2 home.

4. There are several constraints when using this method of upgrade. More available on the white papers and metalink notes mentioned at the end of the post. These are ...
1. Dataguard broker must be not be configured for the database. If DG Broker is setup then disable it. ALTER SYSTEM SET DG_BROKER_START=FALSE SCOPE=BOTH;

2. Protection mode must be either maximum performance or maximum availability.

3. Log archive destination to standby database must have the optional option.

4. Compatible parameter value must be same on both primary and standby before the upgrade.

5. Prepare to switchover clause cannot be used for the initial switchover.

6. Since this method uses logical standby , identify the unsupported data types. See if Extended Datatype Support (EDS) could be used which allows SQL Apply to replicate changes to tables that contain some data types not natively supported.
5. Enable flashback logging on both primary and standby databases. This requires database to be shutdown cleanly and then in mount mode. This could incur down time and if flash back is not enabled then to create the restore point database need to be shutdown and mounted in 11gR1. Once mounted enable flashback with
SQL> alter database flashback on;
6. Backup both primary DB and standby DB which would be used to recover if the upgrade fails.

7. The primary database is denoted with DBP and standby database with DBS. Data guard configuration is not using DG Broker and there are no stream replications running. If stream replication is used then stop capture process.

8. Both databases are running on maximum performance mode
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE
Current log_archive_dest on primary database is
NAME                 TYPE        VALUE
-------------------- ----------- ------------------------------
log_archive_dest_1   string      service=DBSTNS LGWR ASYNC NOAFFIRM max_failure=10 max_connections=5
                                 reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=dbs
and on standby
SQL> show parameter log_archive_dest_1

NAME                  TYPE        VALUE
--------------------- ----------- ------------------------------
log_archive_dest_1    string      service=DBPTNS LGWR ASYNC NOAFFIRM max_failure=10 max_connections=5
                                  reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=dbp
Upgrade log_archive_dest on each database to include the OPTIONAL clause.On primary
alter system set log_archive_dest_1= 'service=DBSTNS LGWR ASYNC NOAFFIRM OPTIONAL max_failure=10 
             max_connections=5 reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=dbs' scope=both;
On standby
alter system set log_archive_dest_1= 'service=DBPTNS LGWR ASYNC NOAFFIRM OPTIONAL max_failure=10 
             max_connections=5 reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=dbp' scope=both;
9. Create a guarantee restore point on primary DB.
SQL> create restore point before_upgrade_1  guarantee flashback database;

Restore point created.
Optionally restore point could be created in standby DB as well allowing it to be flash backed in case of failures during upgrade.

10. Next step is the main step in the upgrade, that is converting the physical standby to logical standby with keep identity clause. Cancel log apply on standby
SQL> alter database recover managed standby database cancel;
Create the log miner dictionary in primary DB
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

PL/SQL procedure successfully completed.
Convert the physical standby to logical standby with by running the following on the standby DB
SQL> alter database recover to logical standby keep identity;

SQL> alter database open;

SQL> alter database start logical standby apply immediate;

SQL> execute dbms_logstdby.apply_set( 'log_auto_delete', 'false');

PL/SQL procedure successfully completed.
Check state and wait until state becomes idle
SQL> SELECT SESSION_ID, STATE FROM V$LOGSTDBY_STATE;

SESSION_ID STATE
---------- -------------------
         1 LOADING DICTIONARY

SQL> /

SESSION_ID STATE
---------- ------------------
         1 IDLE
11. To carry out the upgrade defer log shipping on primary
SQL> alter system set log_archive_dest_state_1='defer' scope=memory
On standby
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Create a restore point on standby to be used in case of upgrade failures
SQL> CREATE RESTORE POINT before_upgrade_standby_1 GUARANTEE FLASHBACK DATABASE;
12. Set the oracle home to new version (11gR2) and upgrade the logical standby (DBS). Set environment variables to 11gR2 home
export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
To confirm it's the 11gR2 binaries that are used
which sqlplus
/opt/app/oracle/product/11.2.0/db_1/bin/sqlplus
Stop the listener running out of 11gR1 home and start the listener on 11gR2.
Upgrade the logical standby db from 11.1. to 11.2 either using DBUA or manually with scripts. While upgrade is happening primary is open for use and there's no down time.
When running DBUA following warning may appear, make sure there's enough space for log archive location(s).

Although it is the standby that is upgrade DB Name will show the primary DB name. This is expected as in standby only db unique name is different between primary and standby.




13. Once the upgrade is finished enable log archive destination on primary DB
SQL> alter system set log_archive_dest_state_1='enable' scope=memory;
and start SQL apply on standby
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
14. This is only step where a down time happens ( not counting the downtime needed for enabling flashback logging and according to oracle this is less than 1 minute). Carry out a switchover by making the newly upgraded logical standby (DBS) the new primary.
On current primary (DBP)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO STANDBY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;

Database altered.
On current standby (DBS)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL PRIMARY;

Database altered.
15. At this point there's no disaster recovery as the old primary which is new standby(DBP) is running in a lower version (11.1). To enable disaster recovery this must be flash backed and converted to physical standby.
On new primary (DBS) defer the log archive destination
SQL> alter system set log_archive_dest_state_1='defer' scope=memory;
On new standby (old primary DBP)
SQL> shutdown immediate;
SQL> startup mount

SQL> FLASHBACK DATABASE TO RESTORE POINT before_upgrade_1;

Flashback complete.
16. Convert the new standby (DBP) to physical standby by mounting on the new oracle home (11gR2). Copy the listener.ora and tnsnames.ora files to new oracle home (if not done already) and start the listener from new home. Also copy the spfile and orapwd to new oracle home. Then run the convert command
shutdown immediate;
startup mount;
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

Database altered.
Above command will unmount the DB therefore mount it and start the redo apply.
shutdown immeidate;
startup mount;

SQL> RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Media recovery complete.
On the new primary (DBS) enable the log_archive_dest
SQL> alter system set log_archive_dest_state_1='enable' scope=memory;
when redo apply starts it will register a new incarnation on the new physical standby (DBP) from the primary database (DBS). Following could be seen from the standby db (DBP) alert log.
Wed Mar 07 13:13:53 2012
ALTER DATABASE RECOVER  MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT
Attempt to start background Managed Standby Recovery process (dbp)
Wed Mar 07 13:13:53 2012
MRP0 started with pid=31, OS id=13047
MRP0: Background Managed Standby Recovery process started (dbp)
 started logmerger process
Wed Mar 07 13:13:58 2012
Managed Standby Recovery starting Real Time Apply
MRP0: Background Media Recovery waiting for new incarnation during transient logical upgrade procedure
Errors in file /opt/app/oracle/diag/rdbms/dbp/dbp/trace/dbp_pr00_13049.trc:
ORA-19906: recovery target incarnation changed during recovery
Managed Standby Recovery not using Real Time Apply
Slave exiting with ORA-19906 exception
Errors in file /opt/app/oracle/diag/rdbms/dbp/dbp/trace/dbp_pr00_13049.trc:
ORA-19906: recovery target incarnation changed during recovery
Completed: ALTER DATABASE RECOVER  MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT
Recovery Slave PR00 previously exited with exception 19906
Wed Mar 07 13:14:09 2012
 started logmerger process
Wed Mar 07 13:14:09 2012
Managed Standby Recovery starting Real Time Apply
MRP0: Background Media Recovery waiting for new incarnation during transient logical upgrade procedure
Errors in file /opt/app/oracle/diag/rdbms/dbp/dbp/trace/dbp_pr00_13051.trc:
ORA-19906: recovery target incarnation changed during recovery
Managed Standby Recovery not using Real Time Apply
Slave exiting with ORA-19906 exception
Errors in file /opt/app/oracle/diag/rdbms/dbp/dbp/trace/dbp_pr00_13051.trc:
ORA-19906: recovery target incarnation changed during recovery
Recovery Slave PR00 previously exited with exception 19906
Wed Mar 07 13:14:12 2012
Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST
Wed Mar 07 13:14:13 2012
RFS[1]: Assigned to RFS process 13055
...
...
RFS[1]: New Archival REDO Branch(resetlogs_id): 777303881  Prior: 776883134
RFS[1]: Archival Activation ID: 0x6c441934 Current: 0x0
RFS[1]: Effect of primary database OPEN RESETLOGS
RFS[1]: Managed Standby Recovery process is active
RFS[1]: Incarnation entry added for Branch(resetlogs_id): 777303881 (dbp)
Wed Mar 07 13:14:19 2012
Setting recovery target incarnation to 2
Archived Log entry 78 added for thread 1 sequence 1 rlc 777303881 ID 0x6c441934 dest 1:
Wed Mar 07 13:14:19 2012
RFS[4]: Assigned to RFS process 13063
RFS[4]: Opened log for thread 1 sequence 3 dbid 1815985854 branch 777303881
Archived Log entry 79 added for thread 1 sequence 3 rlc 777303881 ID 0x6c441934 dest 1:
Wed Mar 07 13:14:20 2012
RFS[5]: Assigned to RFS process 13065
RFS[5]: Opened log for thread 1 sequence 4 dbid 1815985854 branch 777303881
Wed Mar 07 13:14:20 2012
RFS[6]: Assigned to RFS process 13067
RFS[6]: Opened log for thread 1 sequence 5 dbid 1815985854 branch 777303881
...
...
Clearing online redo logfile 1 complete
Clearing online redo logfile 2 /opt/app/oracle/oradata/DBP/onlinelog/o1_mf_2_7odd8b6c_.log
Clearing online log 2 of thread 1 sequence number 70
Clearing online redo logfile 2 complete
Clearing online redo logfile 3 /opt/app/oracle/oradata/DBP/onlinelog/o1_mf_3_7odd8bn4_.log
Clearing online log 3 of thread 1 sequence number 60
Clearing online redo logfile 3 complete
Media Recovery Log /opt/app/oracle/flash_recovery_area/DBP/archivelog/2012_03_07/o1_mf_1_61_7ogncljf_.arc
Media Recovery Log /opt/app/oracle/flash_recovery_area/DBP/archivelog/2012_03_07/o1_mf_1_62_7ogncndv_.arc
RFS[6]: Opened log for thread 1 sequence 7 dbid 1815985854 branch 777303881
Media Recovery Log /opt/app/oracle/flash_recovery_area/DBP/archivelog/2012_03_07/o1_mf_1_63_7ogncpqb_.arc
Media Recovery Log /opt/app/oracle/flash_recovery_area/DBP/archivelog/2012_03_07/o1_mf_1_1_7ogqs53q_.arc
Wed Mar 07 13:14:32 2012
Media Recovery Log /opt/app/oracle/flash_recovery_area/DBP/archivelog/2012_03_07/o1_mf_1_2_7ogqs6r2_.arc
Wed Mar 07 13:14:32 2012
Archived Log entry 83 added for thread 1 sequence 6 rlc 777303881 ID 0x6c441934 dest 1:
17. Do a switchover so the database configuraiton is as before the upgrade (DBP is primary and DBS standby). This would add another down time, if the systems are identical the upgrade process could be concluded here incuring only one down time.
On new primary (DBS)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO STANDBY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;

Database altered.
On new standby (DBP)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

Database altered.
Start redo apply on DBS
shutdown immediate;
startup mount
SQL> alter database RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
18. Drop the restore points to save some space
SQL> SELECT NAME FROM V$RESTORE_POINT WHERE GUARANTEE_FLASHBACK_DATABASE ='YES';

NAME
-----------------
BEFORE_UPGRADE_1
On standby
SQL> drop restore point BEFORE_UPGRADE_1;

SQL> SELECT NAME FROM V$RESTORE_POINT WHERE GUARANTEE_FLASHBACK_DATABASE ='YES';

NAME
------------------------
BEFORE_UPGRADE_STANDBY_1

SQL> drop restore point BEFORE_UPGRADE_STANDBY_1;
19. If DG Broker was enable before configure again.

20. If all is in order then upgrade the compatible parameter value. This conclude the upgrade processes.

Useful metalink notes
Extended Datatype Support (EDS) for SQL Apply [ID 559353.1]
Oracle11g Data Guard: Database Rolling Upgrade Shell Script [ID 949322.1]

White Papers
1. Database Rolling Upgrade Using Transient Logical Standby:
Oracle Data Guard 11g Oracle Maximum Availability Architecture White Paper January 2012
2. Database Rolling Upgrades Made Easy by Using a Data Guard Physical Standby Database
Oracle Maximum Availability Architecture White Paper October 2011

Best Practices for Zero Risk, Zero Downtime Database Maintenance