miércoles, 21 de marzo de 2012

Actualizar Clusterware de 11.2.0.2 a 11.2.0.3 en RHEL 5

Hace poco tuve que hacer una actualización de 11.2.0.2 a 11.2.0.3. Aquí te presento la primera parte que es la que contempla lo que es el Clusterware.

De aquí en adelante voy hacer las siguientes suposiciones:

GI_HOME.- Es la locación donde se encuentra el software de Oracle Clusterware
RDBMS_HOME.- Es la locación donde se encuentra el software del RDBMS de Oracle
OCR.- Oracle Cluster Registry

De igual manera también estoy suponiendo que tienes roles separados , el usuario oracle es el dueño del RDBMS y el usuario grid es el dueño del Clusterware.

Por ultimo, si el titulo tiene un asterisco marcado en rojo (*) , esto lo tienes que hacer en cada nodo.

Como el usuario root crea una variable de ambiente, que contenga tu GI_HOME, así como el ORACLE_SID de la instancia de ASM, ya que vamos a estar saliendo y entrando a este ambiente, lo veo mas sencillo que cada vez tener que definirlas.

Respaldar tu OCR

Lo primero que hay que hacer es tener en plan de respaldo en caso de que algo salga mal, así que como el usuario root corre la utilería de ocrconfig para respaldar manualmente tu OCR, y aunque en 11g el OCR se respalda automáticamente, soy un poco paranoico :)

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -
[root@servidor1 ~]#  . /home/grid/bin/ASM

root@servidor1.oracleenespanol.blogspot.com /root
root $ ocrconfig -manualbackup

servidor1     2012/03/16 01:17:22     /mount/oracle/grid/11.2.0.2/cdata/orclespdev1/backup_20120316_011722.ocr

La opción -showbackup te lista los respaldos de OCR que tienes.

Respaldar el GI_HOME

Como el usuario root vamos hacer un archivo tar de nuestro GI_HOME en una locación donde podemos asegurar que nuestros respaldos van a estar asegurados

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd $ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /mount/oracle/grid/11.2.0.2
root $ tar -cvf /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/GI_OH_11.2.0.2_SERV1.tar .

Descomprimir el Software del Clusterware 11.2.0.3 (*)

Como el usuario grid vamos a descomprimir el archivo 3 del Software 11.2.0.3 descargado de MOS, que lo puedes encontrar como el parche 10404530.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
root $ unzip p10404530_112030_Linux-x86-64_3of7.zip

Si tienes ACFS verificar que este habilitados los mounts (*)

Esto es únicamente si estas manejando ACFS, verifica que estén habilitados los mounts para la actualización, si no lo están habilitalos con el comando asmcmd volenable -a

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ asmcmd volinfo -a
Diskgroup Name: ASM_COPY1

         Volume Name: ACFS_COPY1
         Volume Device: /dev/asm/acfs_copy1-299
         State: ENABLED
         Size (MB): 1913856
         Resize Unit (MB): 256
         Redundancy: UNPROT
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: ACFS
         Mountpath: /mount/acfsdevesp1/copy01

Preparando para instalar el Parche  6880880 y 12539000 (*)

Uno de los prerequisitos para la actualización del clusterware a 11.2.0.3 es que por lo menos tenga el PSU1 y el parche 12539000 este instalado en el GI_HOME. Como estamos en Marzo del 2012, supongo que ya tienes instalado el PSU1, así que nada mas me voy a concentrar en el 12539000.

Necesitas descargar de MOS los siguientes parches:

12539000.-11203:ASM UPGRADE FAILED ON FIRST NODE WITH ORA-03113
6880880.- El ultimo opatch

Como el usuario oracle, deten los servicios que esten relacionados con el GI_HOME y el RDBMS_HOME que vas a parchar, si tienes una base de datos que no esta usando el GI_HOME o el RDBMS_HOME, no lo tienes que detener. Esto lo vas  hacer cada vez que vas a correr la utileria opatch, asi permites que los servicios esten arriba en el segundo nodo, mientras parchas el primero, y viceversa

oracle@servidor1.oracleenespanol.blogspot.com /home/bin
root $ srvctl stop home -o $ORACLE_HOME -n servidor1.oracleenespanol.blogspot.com

Descomprime el parche 6880880 en el $GI_HOME y en el $RDBMS_HOME de cada nodo, asegurate antes de descomprimirlos, de mover o borrar el directorio  $GI_HOME/OPatch y $RDBMS_HOME/OPatch. Un ejemplo de como hacerlo esta aquí:

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
oracle $ scp p6880880_112000_Linux-x86-64.zip $ORACLE_HOME

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
oracle $ cd $ORACLE_HOME

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3
oracle $ mv OPatch OPatch.Antes.Parche.Mar2012

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3
oracle $ unzip p6880880_112000_Linux-x86-64.zip

Como el usuario grid tengo que crear el archivo de respuesta para ocm, esto es necesario, ya que a la mitad de estar aplicando el parche, te va a solicitar la ruta de este archivo. Este archivo se genera en la ruta donde corriste la utileria emocmrsp, en este caso fue en $GI_HOME/OPatch/ocm/bin

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid
grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd $GI_HOME/OPatch/ocm/bin

grid@servidor1.oracleenespanol.blogspot.com /mount/oracle/grid/11.2.0.2OPatch/ocm/bin
root $ ./emocmrsp

Email address/User Name: micorreo_con_que_acceso_metalink@oracleenespanol.blogspot.com
Provide your My Oracle Support password to receive security updates via your My Oracle Support account.
Password (optional):
If you do not wish to configure OCM through an Oracle Support Hub, enter NONE
Oracle Support Hub URL: NONE
If you want to remain uninformed of critical security issues in your
configuration, enter NONE
Proxy specification: NONE
The OCM configuration response file (ocm.rsp) was successfully created.

Como el usuario root asegurate que la ruta del OPatch se encuentre en la variable PATH

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid
root@servidor1.oracleenespanol.blogspot.com /root
root $ export GI_HOME=/mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ export PATH=$PATH:$GI_HOME/OPatch

El parche 12539000 tiene que estar descomprimido en un directorio vacío , no debe de contener ningún otro parche o software, ya que la manera en que se va a aplicar es de manera automática y fallaría y/o te puede causar muchos mas problemas.

En este caso lo descomprimí en un directorio llamado stage_dir

root@servidor1.oracleenespanol.blogspot.com /home/grid/bin
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ unzip p12539000_112023_Linux-x86-64.zip
Archive:  p12539000_112023_Linux-x86-64.zip
   creating: 12539000/
   creating: 12539000/files/
   creating: 12539000/files/lib/
   creating: 12539000/files/lib/libserver11.a/
  inflating: 12539000/files/lib/libserver11.a/ksxp.o
   creating: 12539000/etc/
   creating: 12539000/etc/config/
  inflating: 12539000/etc/config/inventory.xml
  inflating: 12539000/etc/config/actions.xml
  inflating: 12539000/etc/config/deploy.xml
   creating: 12539000/etc/xml/
  inflating: 12539000/etc/xml/GenericActions.xml
  inflating: 12539000/etc/xml/ShiphomeDirectoryStructure.xml
  inflating: 12539000/README.txt

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ chown -R root:oinstall 12539000

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ chmod -R g+r 12539000

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ which opatch
/mount/oracle/grid/11.2.0.2/OPatch/opatch

Aplicando el parche 12539000 a tu GI_HOME

Este parche se le llama polling patch, asi que lo vas a aplicar en el primer nodo, esperar a que el Clusterware se reinicie y luego vas a aplicarlo en el segundo nodo, acuerdate que sigues con el usuario root y que en el directorio stage_dir unicamente se encuentra descomprimido el parche 12539000.

Cuando el parche te solicite la ruta de tu ocm.rsp, fue el que creamos arriba: $GI_HOME/OPatch/ocm/bin/ocm.rsp

Cuando el parche te haga la siguiente pregunta, teclea 'yes' sin las comillas.

Enter 'yes' if you have unzipped this patch to an empty directory to proceed (yes/no):yes

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/grid/11.2.0.2

Una vez que el primer nodo termine, haz lo mismo en el segundo nodo.

root@servidor2.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/grid/11.2.0.2

Aplicando el parche 12539000 a tu RDBMS_HOME

De igual manera que aplicamos el parche para el GI_HOME, vamos a aplicar el parche para el RDBMS_HOME, nos va solicitar el mismo archivo de ocm.rsp y nos va  ha hacer la misma pregunta, y de igual manera seguimos como el usuario root.

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/product/11.2.0.2v3

Una vez que termine el primer nodo , haz lo mismo en el segundo nodo, acuerdate que una vez que termine el primer nodo puedes subir los servicios en este y tienes que bajar los servicios relacionados con el RDBMS_HOME en el segundo nodo.

root@servidor2.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/product/11.2.0.2v3


Aplicar el parche 11.2.0.3 a tu Clusterware

Una vez que aplicamos el parche 12539000, estamos listos para actualizar el clusterware. Lo primero que tenemos que hacer es crear el directorio donde va residir nuestro 11.2.0.3 GI_HOME, esto lo vas a hacer en cada nodo

root@servidor1.oracleenespanol.blogspot.com /root
root $ mkdir -p /mount/oracle/grid/11.2.0.3

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown grid:oinstall /mount/oracle/grid/11.2.0.3

Vamos a correr como el usuario grid la utileria runcluvfy.sh, cualquier error o conflicto que resulte de correr esta utileria, la tienes que resolver antes de actualizar a 11.2.0.3.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid
root $ ./runcluvfy.sh stage -pre crsinst -upgrade -n all -rolling -src_crshome /mount/oracle/grid/11.2.0.2 -dest_crshome /mount/oracle/grid/11.2.0.3 -dest_version 11.2.0.3.0 -fixup -fixupdir /home/grid/bin/fixup verbose

Hasta ahora todo lo había hecho desde una sesión de putty de ssh, pero para la siguiente parte, me voy a conectar a una sesión de vnc con el usuario grid.

Si no sabes como arrancar este servicio, aquí una entrada anterior de como arrancar tus servicios de vnc

Lo que voy a hacer es quitar de mi ambiente las siguientes variables

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_SID

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset DB_NAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_UNQNAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_BASE

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORA_NLS10

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

Una vez que quitamos la variables mencionadas, ya nada mas nos queda correr el runInstaller

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid
root $ ./runInstaller

En mi caso, que no necesariamente tiene que ser tu caso, seleccione las siguientes opciones en cada pantalla que me fue apareciendo, asegurate que la respuesta que des, corresponda a lo que andes buscando o necesitando.


Pantalla
Respuesta
Download Software Updates
‘Skip software updates’
Select Installation Option
‘Upgrade Oracle Grid Infrastructure or Oracle Automatic Storage Management’
Select Product Languages
‘English’; ‘Next’
Grid Infrastructure Node Selection
‘servidor1’, ‘servidor2’; ‘Next’
Privileged Operating System Groups
‘asmdba’,’asmoper’,’asmadmin’;‘Next’
Specify Installation Location
ORACLE_BASE:/mount/oracle/gridbase
GI_HOME:/mount/oracle/grid/11.2.0.3
Summary
‘Next’


 
Una vez que este corriendo el proceso de actualización, te va a solicitar que corras el script rootupgrade.sh.

Así que tienes que abrir una sesión aparte con el usuario root, esta parte es la que va actualizar a ASM y tu OCR a 11.2.0.3 así que va a bajar los servicios todos los servicios de ASM e igualmente los va reiniciar.

Cuando termine el script en el primer nodo, tienes que correrlo en el siguiente nodo, no lo vayas a correr a la misma vez en todos tus nodos, es de uno en uno.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# /mount/oracle/grid/11.2.0.3/rootupgrade.sh

El OCR no se actualiza hasta que llegues a correr el rootupgrade.sh en el ultimo nodo, así que básicamente no estas en 11.2.0.3 hasta que haya corrido en el ultimo nodo.

Ya para verificar, corre los siguientes comandos

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ sqlplus "/as sysasm"

+ASM1 > select version from v$instance;
VERSION
-----------------
11.2.0.3.0

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.2.0.3.0]

Desintalar el GI_HOME de 11.2.0.2 (*)

Ya por ultimo lo que nos falta el desintalar el GI_HOME de 11.2.0.2 , asiq ue como el usuario root , vamos a cambiar los permisos de GI_HOME 11.2.0.2

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid

root@servidor1.oracleenespanol.blogspot.com /root
root $ chmod -R 755 /mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown -R grid /mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown grid /mount/oracle/grid/11.2.0.2

Como el usuario grid vamos a correr deinstall, asegurate que ninguna variable como ORACLE_HOME o GI_HOME, apunte a tu versión de 11.2.0.3

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_SID

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset DB_NAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_UNQNAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_BASE

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ export ORACLE_HOME=/mount/oracle/grid/11.2.0.2

grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/grid
root $ cd /mount/oracle/grid/11.2.0.2
 
grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/grid/11.2.0.2
root $ ./deinstall


Conclusión
Hasta aquí acabamos con la primera parte, que es el Clusterware, en la siguiente entrada, vamos a ver el RDBMS_HOME a 11.2.0.3