Aprende a parchar como Dios manda (S1E2)

En el episodio anterior mostramos como aplicar parches directamente en el Oracle Home en uso, proceso conocido como parchado in-place, proceso que se ha demostrado como largo, tedioso, y que demanda una larga suspensión del tiempo de servicio.

Afortunadamente existe una mejor forma de aplicar parches, que se presenta a continuación.

Parchado out-of-place

Recibe este nombre la forma recomendada de aplicar parches, y que implica trabajar sobre un nuevo Oracle Home (en adelante OH) que contendrá los ejecutables parchados.

Veamos cómo se desarrolla un ciclo de parchado bajo esta modalidad.

Situación inicial

Contamos con un servidor llamado server1, en el cual se tiene instalado Oracle Database Server 19c, en un Oracle Home llamado DBHome1, que da soporte a una base de datos single instance.

$ echo $ORACLE_HOME
/u01/app/oracle/19.0.0/db_1

Este OH tiene aplicados los siguientes parches:

34765931 database release update 19.18.0.0.0
34786990 ojvm release update 19.18.0.0.0
34777391 jdk bundle patch 19.0.0.0.230117
35573556 database mrp 19.18.0.0.230718
34972375 datapump bundle patch 19.18.0.0.0

1

2

Creación de nuevo Oracle Home

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

$ mkdir /u01/app/oracle/19.0.0/db_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_2
$ 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.

3

4

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="DBHome2" -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_2/root.sh
Luego de esto tenemos el Oracle Home DBHome2 conteniendo los binarios de Oracle Database 19.23.

Suspensión del servicio

Para poder usar el nuevo OH, obligatoriamente se tiene que bajar la base de datos como primer paso.

SQL> shutdown immediate;

5

6

Parchado de la base de datos

Se actualizan las variables de entorno para referenciar al nuevo OHy luego de ello ya se puede continuar con la actualización del catálogo de la base de datos, usando el utilitario datapatch.

$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_2
$ export PATH=${ORACLE_HOME}/bin:${PATH}:.

SQL> startup;

$ datapatch -verbose

Situación final

Se tiene la base de datos operando normalmente, desde el nuevo Oracle Home DBHome2.

7

Ventajas del parchado out-of-place

1. Mínimo tiempo sin servicio

Como se está usando un nuevo Oracle Home, todo el tiempo que tome prepararlo no afecta la disponibilidad del servicio, a diferencia de lo que ocurre con el parchado in-line.

La suspensión del servicio se limita al momento en el cual se debe hacer uso de los nuevos binarios, con el cambio de OH, y con ello la actualización del catálogo con datapatch:

SQL> shutdown immediate;

$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_2
$ export PATH=${ORACLE_HOME}/bin:${PATH}:.

SQL> startup;

$ datapatch -verbose

A continuación los tiempos que registré en mi ambiente de pruebas, en el que solamente apliqué Release Updates/RU (sin Monthly Recommended Patches/MRP o one-offs adicionales). Se muestra tanto el tiempo que toma para la opción in-place como para la out-of-place:

Es evidente que el tiempo se va incrementando casi exponencialmente con la aplicación de un nuevo RU in-place, mientras que para out-of-place el tiempo es mucho menor y estable.

2. Mínimo espacio consumido

A continuación el espacio consumido que registré en mi ambiente de pruebas, en el que solamente apliqué los Release Updates/RU (sin Monthly Recommended Patches/MRP o one-offs adicionales). Se muestra tanto el espacio que toma para la opción in-place como para la out-of-place:

Ya que por cada parche aplicado, Oracle debe obtener un respaldo de todos los objetos modificados, se hace evidente que el espacio ocupado se va incrementando con la aplicación in-place de cada nuevo RU, mientras que para out-of-place el espacio es mucho menor y estable.

3. Simplicidad en caso de rollback

Si por alguna razón necesitamos deshacer la aplicación del parchado, simplemente debemos regresar al OH anterior y actualizar el catálogo, nuevamente con mínima suspensión del servicio:

SQL> shutdown immediate;

$ export ORACLE_HOME=/u01/app/oracle/19.0.0/db_1
$ export PATH=${ORACLE_HOME}/bin:${PATH}:.

SQL> startup;

$ datapatch -verbose

Conclusiones

Si bien quizás no es la modalidad más usada por los DBAs, el parchado out-of-place es por lejos la más eficiente, demanda poco espacio en disco, y lo que es mejor: presenta los tiempos de indisponibilidad del servicio más bajos.

En el siguiente episodio veremos cómo simplificar aún más el parchado out-of-place, así que estén atentos!

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

Una respuesta

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 y evitar el error ORA-01017 cuando tenga implementado Oracle Data Guard con wallet.
Aprenda a identificar la fila involucrada en la ocurrencia del evento de espera "enq: TX - row lock contention"
Aprenda a resolver el error CRS-2304 GPnP profile signature verification failed al iniciar una base de datos 11.2 en un cluster 19c.

¿Necesitas Ayuda?

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