Aprende a parchar como Dios manda (S3E3)

AutoUpgrade: Parchado de Oracle RAC Database con Gold Image

Tabla de Contenidos

En los episodios anteriores de esta temporada, hemos visto cómo AutoUpgrade 26.2 nos ofrece la posibilidad de descargar parches y Gold Images, crear nuevos Oracle Homes con ellos, además de parchar la base de datos, pero nos falta un escenario final: el rolling patching de una base de datos en RAC.

En este episodio les explicaré cómo implementarlo, considerando un clúster de 2 nodos utilizando Oracle 19c RU24, el cual queremos actualizar a Oracle 19c RU30. Sin embargo, les sugiero primero leer este artículo de la segunda temporada para recordar cómo se realiza manualmente.

Situación Inicial

Disponemos de 2 servidores llamados node1 y node2, donde se ha instalado Oracle Database Server 19c con release update 19.24, en un Oracle Home llamado DBHome1, y 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 del Gold Image

Nuestro objetivo es aplicar el RU 19.30, por lo que los patches a incluir son:

38661284OCW release update 19.30.0.0.0
39024581Database MRP 19.30.0.0.260317
38523609OJVM release update 19.30.0.0.260120
38586770JDK bundle patch 19.0.0.0.260120
38844733Datapump bundle patch 19.30.0.0.0

Primero, vamos a descargar los parches desde un computador que tenga conexión a Internet (server1):

$ cat download.cfg

global.global_log_dir=/stage/autoupgrade/log
global.keystore=/stage/autoupgrade/keystore
global.folder=/stage/autoupgrade/patches

patch1.patch=RU:19.30,OPATCH,OCW,MRP,OJVM,JDK,DPBP
patch1.platform=LINUX.X64
patch1.gold_image=NO
$ java -jar autoupgrade.jar \
-config download.cfg \
-patch -mode download

AutoUpgrade Patching 26.2.260205 launched with default internal options
Processing config file ...
Loading AutoUpgrade Patching keystore
AutoUpgrade Patching keystore is loaded

Connected to MOS - Searching for specified patches

-------------------------------------------------------------
Downloading files to /stage/autoupgrade/patches
-------------------------------------------------------------
DATABASE RELEASE UPDATE 19.30.0.0.0(REL-JAN260130)
    File: p38632161_190000_Linux-x86-64.zip - VALIDATED

OPatch 12.2.0.1.49 for DB 19.0.0.0.0 (Jan 2026)
    File: p6880880_190000_Linux-x86-64.zip - VALIDATED

OJVM RELEASE UPDATE 19.30.0.0.0
    File: p38523609_190000_Linux-x86-64.zip - VALIDATED

DATAPUMP BUNDLE PATCH 19.30.0.0.0
    File: p38844733_1930000DBRU_Generic.zip - VALIDATED

GI RELEASE UPDATE 19.30.0.0.0(REL-JAN260130)
    File: p38629535_190000_Linux-x86-64.zip - VALIDATED

JDK BUNDLE PATCH 19.0.0.0.260120
    File: p38586770_190000_Linux-x86-64.zip - VALIDATED

DATABASE MRP 19.30.0.0.260317
    File: p39024581_1930000DBRU_Linux-x86-64.zip - VALIDATED
-------------------------------------------------------------

Con el software ya disponible, procedemos a su instalación en el nuevo Oracle Home (DBHomeTMP), previa creación del correspondiente archivo de configuración.

$ cat create_oh_tmp.cfg

global.global_log_dir=/home/oracle/autoupgrade/log
global.folder=/stage/autoupgrade/patches

install1.patch=RU:19.30,OPATCH,OJVM,DPBP,OCW,JDK,MRP
install1.platform=LINUX.X64
install1.download=no

install1.target_home=/u01/app/oracle/19.0.0/TMP
install1.home_settings.oracle_base=/u01/app/oracle
install1.home_settings.edition=EE
install1.home_settings.inventory_location=/u01/app/oraInventory
install1.home_settings.home_name=DBHomeTMP
install1.home_settings.osdba_group=dba
install1.home_settings.osbackupdba_group=backupdba
install1.home_settings.osdgdba_group=dgdba
install1.home_settings.oskmdba_group=kmdba
install1.home_settings.osracdba_group=racdba
install1.home_settings.ru_apply=yes
$ java -jar autoupgrade.jar \
-config create_oh_tmp.cfg \
-patch -mode create_home

AutoUpgrade Patching 26.2.260205 launched with default internal options
Processing config file ...
+-----------------------------------------+
| Starting AutoUpgrade Patching execution |
+-----------------------------------------+
Type 'help' to list console commands
patch> Job 100 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

# Run the root.sh script as root for the following jobs:
For create_home_1 in server1 -> /u01/app/oracle/19.0.0/TMP/root.sh

Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.log

Creamos el Gold Image en la misma carpeta en la que se guardaron los parches.

${ORACLE_HOME}/runInstaller -silent -createGoldImage \
-destinationLocation /stage/autoupgrade/patches \
-name db_home_19_30-gold.zip \
-exclFiles ${ORACLE_HOME}/.patch_storage
$ ls -la /stage/autoupgrade/patches

total 12982824
drwxrwxr-x 1 Mar 17 19:22 .
drwxrwxr-x 1 Mar 17 20:15 ..
-rw-r--r-- 1 Mar 17 19:22 db_home_19_30-gold.zip
-rw-r--r-- 1 Apr 26  2019 LINUX.X64_193000_db_home.zip
-rw-rw-r-- 1 Mar 17 13:48 p38523609_190000_Linux-x86-64.zip
-rw-rw-r-- 1 Mar 17 13:49 p38586770_190000_Linux-x86-64.zip
-rw-rw-r-- 1 Mar 17 13:49 p38629535_190000_Linux-x86-64.zip
-rw-rw-r-- 1 Mar 17 13:48 p38632161_190000_Linux-x86-64.zip
-rw-r--r-- 1 Mar 17 14:09 p38661284_1930000OCW_Linux_x86-64.zip
-rw-rw-r-- 1 Mar 17 13:48 p38844733_1930000DBRU_Generic.zip
-rw-rw-r-- 1 Mar 17 13:49 p39024581_1930000DBRU_Linux-x86-64.zip
-rw-rw-r-- 1 Mar 17 13:48 p6880880_190000_Linux-x86-64.zip
-rw-rw-r-- 1 Mar 17 13:49 patches_info.json

Instalación usando el Gold Image

Dado que contamos con un Gold Image con todos los parches requeridos, le indicamos a AutoUpgrade que lo use en la instalación, mediante el parámetro gold_image=ALL en el archivo de configuración.

Los servidores están aislados del internet, por lo que en el parámetro folder especificamos que los parches se localizan en una carpeta compartida por NFS.

$ cat create_oh.cfg

global.global_log_dir=/home/oracle/autoupgrade/log
global.folder=/NFS/autoupgrade/patches

install1.patch=RU:19.30,OCW
install1.platform=LINUX.X64
install1.gold_image=ALL

install1.target_home=/u01/app/oracle/19.0.0/db_2
install1.home_settings.oracle_base=/u01/app/oracle
install1.home_settings.edition=EE
install1.home_settings.inventory_location=/u01/app/oraInventory
install1.home_settings.home_name=DBHome2
install1.home_settings.osdba_group=dba
install1.home_settings.osbackupdba_group=backupdba
install1.home_settings.osdgdba_group=dgdba
install1.home_settings.oskmdba_group=kmdba
install1.home_settings.osracdba_group=racdba

Como se señaló en el episodio previo, AutoUpgrade necesita un archivo donde se anota el mapeo de las etiquetas de los parches conocidos con su correspondiente patch number. Este archivo se llama aru-bug-map.json y será necesario crearlo con los datos del parche OCW (confiamos en que esto se solucione en la siguiente versión).

ARU=/home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/aru
mkdir -p ${ARU}
cat <<EOF | tee ${ARU}/aru-bug-map.json
[{"prefix":"OCW","version":"19.30","bugNumber":38661284}]
EOF

Con todo preparado, iniciamos la instalación del software y, dado que es un clúster, AutoUpgrade procederá a ejecutarlo en todos los nodos disponibles.

$ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -config create_oh.cfg -patch -mode create_home

AutoUpgrade Patching 26.2.260205 launched with default internal options
Processing config file ...
Oracle Grid Infrastructure detected. Target Oracle home will be a RAC DB. To change that, use "home_settings.binopt.rac=NO" configuration setting.
+-----------------------------------------+
| Starting AutoUpgrade Patching execution |
+-----------------------------------------+
Type 'help' to list console commands
patch> Job 100 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

# Run the root.sh script as root for the following jobs:
For create_home_1 in node1 -> /u01/app/oracle/19.0.0/db_2/root.sh
For create_home_1 in node2 -> /u01/app/oracle/19.0.0/db_2/root.sh

Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/patch/auto/status/status.log
Completamos el procedimiento ejecutando root.sh en ambos servidores.
[node1]
# /u01/app/oracle/19.0.0/db_2/root.sh

[node2]
# /u01/app/oracle/19.0.0/db_2/root.sh

Parchado de la Base de Datos

En resumen, disponemos de la base de datos orcl con 2 instancias (orcl1 en node1 y orcl2 en node2) que están prestando servicio a las aplicaciones. Además, hemos instalado Oracle Database Server 19c con RU 19.30 en el Oracle Home DBHome2.

Preparativos

El Datapump bundle patch es «non rolling«, lo que obliga a AutoUpgrade a ejecutar el parchado bajando la base de datos por completo. Sin embargo, como no queremos detener el servicio y estamos seguros de que no hay tareas activas con Datapump, le diremos que lo haga instancia por instancia, con el parámetro: rac_rolling=force.

$ cat patch_1930.cfg

global.global_log_dir=/home/oracle/autoupgrade/log

patch1.sid=orcl1
patch1.source_home=/u01/app/oracle/19.0.0/db_1
patch1.target_home=/u01/app/oracle/19.0.0/db_2
patch1.restoration=no
patch1.rac_rolling=force
patch1.drain_timeout=wait

Ya que deseamos tener el control de en qué momento se baja cada instancia, utilizamos el parámetro drain_timeout=wait para que AutoUpgrade nos consulte primero.

Ahora sí, comenzaremos el proceso de parchado:

$ java -jar autoupgrade.jar \
-config patch_1930.cfg \
-mode deploy

AutoUpgrade 26.2.260205 launched with default internal options
Processing config file ...
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 CDB(s) plus 2 PDB(s) will be processed
Type 'help' to list console commands
upg> 

1

2

Shutdown - node1

Tras unos minutos, AutoUpgrade nos informa que los servicios de la instancia orcl1 se han detenido y nos indica el comando para que se empiece con el reinicio de la instancia.

Nota: las sesiones de la instancia orcl1 se reconectan a la instancia orcl2, siempre que los servicios estén configurados para ello.

upg> Relocated instance orcl1 services. 
To continue, run: proceed -job 101

Copiamos el comando sugerido y AutoUpgrade empieza a detener la instancia orcl1, para luego iniciarla nuevamente, pero esta vez desde el nuevo Oracle Home con Oracle 19.30.

upg> proceed -job 101
upg> Continuing with restarting
     instances for job 101
$ srvctl status database -db orcl
Instance is being stopped on node node1
Instance orcl2 is running on node node2
$ srvctl status database -db orcl
Instance orcl1 is not running on node node1
Instance orcl2 is running on node node2
$ srvctl status database -db orcl
Instance orcl1 is running on node node1
Instance orcl2 is running on node node2

Shutdown - node2

Ahora AutoUpgrade nos avisa que los servicios de la instancia orcl2 se han detenido y nos proporciona el comando para que se proceda a su reinicio.

Nota: las sesiones de la instancia orcl2 se reconectan a la instancia orcl1, siempre que los servicios estén configurados para ello.

upg> Relocated instance orcl2 services. 
To continue, run: proceed -job 101

Ejecutamos el comando señalado y AutoUpgrade procede a bajar la instancia orcl2, para después reiniciarla desde el nuevo Oracle Home con Oracle 19.30.

upg> proceed -job 101
upg> Continuing with restarting
     instances for job 101
$ srvctl status database -db orcl
Instance orcl1 is running on node node1
Instance is being stopped on node node2
$ srvctl status database -db orcl
Instance orcl1 is running on node node1
Instance orcl2 is not running on node node2
$ srvctl status database -db orcl
Instance orcl1 is running on node node1
Instance orcl2 is running on node node2

3

4

Parchado del catálogo

Finalmente, AutoUpgrade prosigue con la actualización del catálogo de la base de datos mediante el uso del utilitario datapatch.

upg> Job 101 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]


Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log

Conclusiones

El parchado es una tarea rutinaria y, como tal, es recomendable documentarla adecuadamente y, de ser posible, automatizarla, con el objetivo de minimizar la probabilidad de errores y reducir al mínimo el tiempo de afectación de los servicios.

En cada capítulo de esta serie hemos ido perfeccionando el procedimiento: empezamos usando el parchado out-of-place, luego generando gold images y por último automatizando todo lo posible con AutoUpgrade, que, si bien aún tiene un par de problemillas, está encaminado a ser la herramienta obligada.

Si no lo has usado aún, ¿qué estás esperando?

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Posts Relacionados

Install with Gold Image - AutoUpgrade
Aprende a crear y usar un Gold Image con AutoUpgrade para la instalación de un nuevo Oracle Home.
AutoUpgrade patching - final situation
Aprende a parchar una base de datos Oracle Single Instance con AutoUpgrade.
www.freepik.com
Aprenda a descargar los parches de Oracle, usando el utilitario autoupgrade en adicion a getMOSPatch.

¿Necesitas Ayuda?

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