Como lo prometido es deuda, se inicia la segunda temporada de la serie de artículos «Aprende a parchar como Dios manda».
Por si no lo has hecho aún, te recomiendo darle una mirada a los episodios anteriores:
1. Cómo ejecutar el parchado in-place, la forma más común y también la más peligrosa
2. Cómo ejecutar el parchado out-of-place, la forma recomendada y también la más eficiente
3. Cómo simplificar el parchado out-of-place usando Gold Image
En esta nueva temporada veremos casos más complejos, empezando por: ¿cómo parchar Oracle RAC?
Para ello consideraremos un Cluster de 2 nodos, usando Oracle 19c RU25, el cual queremos actualizar a Oracle 19c RU26.
Situación inicial
Contamos con 2 servidores llamados node1 y node2, en los cuales se tiene instalado Oracle Database Server 19c con release update 19.25, en un Oracle Home llamado DBHome1, que dan soporte a una base de datos en RAC, llamada orcl.
$ echo ${ORACLE_HOME}
/u01/app/oracle/19.0.0/db_1
$ srvctl status database -db orcl
Instance orcl1 is running on node node1
Instance orcl2 is running on node node2
Creación de la Gold Image
En nuestro caso deseamos aplicar el RU 19.26, por lo que los patches que aplicaremos son:
37257886 | gi release update 19.26.0.0.0 |
37102264 | ojvm release update 19.26.0.0.0 |
37542054 | jdk bundle patch 19.0.0.0.250415 |
37470729 | datapump bundle patch 19.26.0.0.0 |
37769923 | database mrp 19.26.0.0.250415 |
Como en el episodio final de la primera temporada se detalla el procedimiento a seguir para la creación de un Gold Image, no repetiremos los pasos.
A diferencia del caso allí presentado, ahora se trata de un Oracle RAC, por lo que no debemos usar el database release update, sino que tenemos que usar el gi release update, esto debido a que es el que contiene el OCW release update, parche requerido para Oracle RAC.
$ ${DB_HOME}/runInstaller -silent -printtime \
-waitforcompletion -ignorePrereqFailure \
ORACLE_HOME_NAME="DBTemp" -applyRU ${STAGE}/37257886 \
-applyOneOffs ${STAGE}/37102264,${STAGE}/37542054,${STAGE}/37470729 \
-responseFile ${DB_HOME}/install/response/db_install.rsp \
INVENTORY_LOCATION=/u01/app/oraInventory \
UNIX_GROUP_NAME=oinstall \
ORACLE_BASE=/u01/app/oracle \
oracle.install.option=INSTALL_DB_SWONLY \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
oracle.install.db.OSDGDBA_GROUP=dgdba \
oracle.install.db.OSKMDBA_GROUP=kmdba \
oracle.install.db.OSRACDBA_GROUP=racdba \
oracle.install.db.rootconfig.executeRootScript=false
$ opatch napply ${STAGE}/37769923 -oh ${DB_HOME} -silent
$ sudo /u01/app/oracle/19.0.0/db_1/root.sh
$ ${DB_HOME}/runInstaller -silent \
-createGoldImage -destinationLocation \
${STAGE}/goldImages -name db_home_19_26.zip
Parchado out-of-place de Oracle RAC con Gold Image
Si no lo has hecho aún, te recomiendo leer primero los pasos para aplicar un parche out-of-place, para una mejor comprensión de lo que viene, y luego regresas.
Ahora sí, ya que contamos con un Gold Image, veamos el procedimiento a seguir para parchar el Oracle RAC:
Copiado del Gold Image
Se procede a descomprimir el software ya parchado de Oracle Database 19c contenido en el Gold Image, en el directorio recién creado.
$ mkdir /u01/app/oracle/19.0.0/db_2
$ export DB_HOME=/u01/app/oracle/19.0.0/db_2
$ export STAGE=/stage
$ unzip -oq ${STAGE}/goldImages/db_home_19_26.zip -d ${DB_HOME}
Esto lo debes ejecutar en todos los nodos de tu Cluster, y puedes hacerlo en paralelo.
1
2
Registrando el nuevo Oracle Home
Se procede a compilar los binarios y registrar el Oracle Home DBHome2 en el inventory.
$ export NODE=$(hostname)
$ ${DB_HOME}/runInstaller -silent -printtime \
-waitforcompletion -ignorePrereqFailure \
ORACLE_HOME_NAME="DBHome2" \
-responseFile ${DB_HOME}/install/response/db_install.rsp \
INVENTORY_LOCATION=/u01/app/oraInventory \
UNIX_GROUP_NAME=oinstall \
ORACLE_BASE=/u01/app/oracle \
oracle.install.option=INSTALL_DB_SWONLY \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
oracle.install.db.OSDGDBA_GROUP=dgdba \
oracle.install.db.OSKMDBA_GROUP=kmdba \
oracle.install.db.OSRACDBA_GROUP=racdba \
oracle.install.db.CLUSTER_NODES=${NODE} \
oracle.install.db.rootconfig.executeRootScript=false
$ sudo /u01/app/oracle/19.0.0/db_2/root.sh
Esto lo debes ejecutar en todos los nodos de tu Cluster, y puedes hacerlo en paralelo.
Luego de esto tenemos el Oracle Home DBHome2 conteniendo los binarios de Oracle Database 19.26.
Suspensión del servicio - node1
Para poder usar el nuevo OH, obligatoriamente se tiene que bajar las instancias como primer paso.
Como se trata de Oracle RAC, la base de datos nunca se detiene, lo que se hace es ir reiniciando instancia por instancia, hasta que no quede ninguna usando el antiguo OH.
Empezaremos por node1:
[oracle@node1]
$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_1
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_SID=orcl1
$ sqlplus / as sysdba
SQL> shutdown immediate
3
4
Reinicio del servicio - node1
[oracle@node1]
$ srvctl modify database -db orcl -oraclehome /u01/app/oracle/19.0.0/db_2
$ srvctl start instance -db orcl -instance orcl1
En este punto tenemos a la instancia orcl1 operando con el nuevo OH y a la instancia orcl2 operando con el viejo OH.
Suspensión del servicio - node2
Finalmente le toca su turno a node2:
[oracle@node2]
$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_1
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_SID=orcl2
$ sqlplus / as sysdba
SQL> shutdown immediate
5
6
Reinicio del servicio - node2
[oracle@node2]
$ srvctl start instance -db orcl -instance orcl2
En este punto tenemos todas las instancias operando con el nuevo OH.
Parchado del catálogo
Se actualizan las variables de entorno para referenciar al nuevo OH, y luego de ello ya se puede continuar con la actualización del catálogo de la base de datos, usando el utilitario datapatch.
Esto lo ejecutamos una sola vez, desde cualquier nodo del Oracle RAC, para nuestro caso lo haremos desde node1.
$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_2
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_SID=orcl1
$ ${ORACLE_HOME/OPatch/datapatch -verbose
7
Conclusiones
En muy pocos minutos tenemos la base de datos operando desde el nuevo Oracle Home DBHome2 y como habrán notado no fue tan difícil.
En este punto, y luego de todo lo que hemos ejecutado, confirmamos nuevamente que el parchado out-of-place con Gold Image es la combinación ganadora: mínimo tiempo de preparación del software y mínima suspensión del servicio.
En el siguiente episodio veremos cómo usar el parchado out-of-place pero ahora para Oracle Grid Infrastructure, así que estén atentos!
Una respuesta
Hola Enrique, excelente artículo con información muy valiosa. Muchas gracias por compartirlo.