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
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!