Aprende a parchar como Dios manda (S1E3)

En el episodio anterior mostramos como aplicar parches out-of-place, técnica llena de ventajas, especialmente la mínima suspensión del servicio, pero ¿qué ocurre si tenemos que aplicar el parche en múltiples servidores?

Desde luego que podemos aplicar el procedimiento ya conocido, pero eso de repetir los pasos una y otra vez no parece ser muy eficiente, y efectivamente no lo es.

Afortunadamente es posible optimizar el procedimiento, llevando al límite las ventajas del parchado out-of-place, tal como se muestra a continuación.

Gold Image al rescate

¿Qué tal si en lugar de estar instalando el software base y aplicarle los parches requeridos, una y otra vez, simplemente instalamos el software ya parchado tal y como lo necesitamos, ahorrándonos así tiempo y esfuerzo?

Pues esto es posible y es conocido como Gold Image, veamos cómo se crea.

Creación de Oracle Home

Se crea un directorio que luego se asociará con un Oracle Home llamado DBTemp.

$ mkdir /u01/app/oracle/19.0.0/db_1

1

2

Instalación de Oracle Database

Se procede a descomprimir el software base de Oracle Database 19c en el directorio recién creado.

$ export DB_HOME=/u01/app/oracle/19.0.0/db_1
$ export STAGE=/stage

$ unzip -oq ${STAGE}/LINUX.X64_193000_db_home.zip -d ${DB_HOME}
$ rm -rf ${DB_HOME}/OPatch
$ unzip -oq ${STAGE}/p6880880_190000_Linux-x86-64.zip -d ${DB_HOME}

Luego de esto tenemos los binarios de Oracle Database 19.3 en el nuevo directorio.

Parchado del nuevo Oracle Home

Se procede a aplicar los siguientes parches:

36233263 database release update 19.23.0.0.0
36199232 ojvm release update 19.23.0.0.0
36195566 jdk bundle patch 19.0.0.0.240416
36701173 database mrp 19.23.0.0.240618
36420641 datapump bundle patch 19.23.0.0.0
$ ${DB_HOME}/runInstaller -silent -printtime \
-waitforcompletion -ignorePrereqFailure \
ORACLE_HOME_NAME="DBTemp" -applyRU ${STAGE}/36233263 \
-applyOneOffs ${STAGE}/36199232,${STAGE}/36195566,${STAGE}/36420641 \
-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}/36701173 -oh ${DB_HOME} -silent

$ sudo /u01/app/oracle/19.0.0/db_1/root.sh
Luego de esto tenemos el Oracle Home DBTemp conteniendo los binarios de Oracle Database 19.23.

3

4

Creación de Gold Image

Como paso final, creamos el Gold Image en base al Oracle Home que tenemos ya parchado.

$ ${DB_HOME}/runInstaller \
-silent \
-createGoldImage \
-destinationLocation \
${STAGE}/goldImages \
-name db_home_19_23.zip

El resultado final es un archivo zip con los contenidos del Oracle Home DBTemp, que podemos mantener en un directorio compartido con NFS, para su uso en el parchado de todos los servidores con Oracle Database.

$ ls -lt /stage/goldImages
total 27643584
drwxrwxr-x  2       4096 May 21 15:52 .
drwxrwxr-x 27       4096 Jul 15 14:28 ..
-rw-r--r--  1 2960756437 May 21 19:06 db_home_19_23.zip
-rw-r--r--  1 4251067464 May 21 17:52 grid_home_19_23.zip
-rw-r--r--  1 2920473198 Feb  3 14:31 db_home_19_22.zip
-rw-r--r--  1 4029564670 Feb  3 13:23 grid_home_19_22.zip

Parchado out-of-place 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, podemos reemplazar los pasos 3 y 4 de dicho procedimiento por los siguientes:

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.

$ export DB_HOME=/u01/app/oracle/19.0.0/db_2
$ export STAGE=/stage

$ unzip -oq ${STAGE}/goldImages/db_home_19_23.zip -d ${DB_HOME}

1

2

Registrando el nuevo Oracle Home

Se procede a compilar los binarios y registrar el Oracle Home DBHome2 en el inventory.

$ ${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=${NODE1} \
oracle.install.db.rootconfig.executeRootScript=false

$ sudo /u01/app/oracle/19.0.0/db_2/root.sh

Con esto tenemos todo listo para continuar con el procedimiento de parchado out-of-place, desde el paso 5 en adelante.

Conclusiones

La preparación de cada nuevo Oracle Home para un parchado out-of-place, dependiendo de la cantidad de parches considerados, puede tomar 20 minutos o más, pero gracias al trabajo previo de preparar un Golden Image puede tomar tan solo un par de minutos!

En este punto, luego de todo lo que has aprendido, debe quedar claro que el parchado out-of-place con Golden Image es la combinación ganadora: mínimo tiempo de preparación del software y mínima suspensión del servicio.

Si quieres simplificar las tareas y reducir aún más los tiempos, puedes automatizar todos estos pasos, por ejemplo mediante la elaboración de shell scripts, o con algo un poco más sofisticado como puede ser creando playbooks de Ansible.

Con este episodio demos por terminada la primera temporada, sin embargo falta mucho por explorar, por ejemplo: ¿cómo parchar el Grid Home? ¿cómo parchar Oracle RAC?, así que estén atentos a la segunda temporada!

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o ¡contáctame ahora mismo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Posts Relacionados

Aprenda a resolver el error CRS-2304 GPnP profile signature verification failed al iniciar una base de datos 11.2 en un cluster 19c.
Aprenda a corregir los permisos dañados de un Oracle Home, ya sea de Oracle Grid o de Oracle Database Server
Aprenda a mejorar la seguridad de sus aplicaciones usando Oracle Wallet / Secure External Password Store.

¿Necesitas Ayuda?

Completa estos datos y estaré en contacto a la brevedad.