Este post es parte de una serie, ¡no te pierdas ningún capítulo!
S1E1. Parchado in-place, la forma más común y también la más peligrosa
S1E2. Parchado out-of-place, la forma recomendada y también la más eficiente
S1E3. Creación de Gold Image para el parchado de Oracle Single Instance Database
S2E1. Parchado de Oracle RAC Database con Gold Image
S2E2. Parchado out-of-place de Oracle Grid Infrastructure (Oracle Restart)
S2E3. Creación de Gold Image para el parchado de Oracle Grid Infrastructure (Oracle Restart)
S3E1. Parchado de Oracle Single Instance Database con AutoUpgrade
S3E2. AutoUpgrade: Creación y uso de Gold Images
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:
| 38661284 | OCW release update 19.30.0.0.0 |
| 39024581 | Database MRP 19.30.0.0.260317 |
| 38523609 | OJVM release update 19.30.0.0.260120 |
| 38586770 | JDK bundle patch 19.0.0.0.260120 |
| 38844733 | Datapump 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
[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?
Este post es parte de una serie, ¡no te pierdas ningún capítulo!
S1E1. Parchado in-place, la forma más común y también la más peligrosa
S1E2. Parchado out-of-place, la forma recomendada y también la más eficiente
S1E3. Creación de Gold Image para el parchado de Oracle Single Instance Database
S2E1. Parchado de Oracle RAC Database con Gold Image
S2E2. Parchado out-of-place de Oracle Grid Infrastructure (Oracle Restart)
S2E3. Creación de Gold Image para el parchado de Oracle Grid Infrastructure (Oracle Restart)
S3E1. Parchado de Oracle Single Instance Database con AutoUpgrade
S3E2. AutoUpgrade: Creación y uso de Gold Images
S3E3. AutoUpgrade: Parchado de Oracle RAC Database con Gold Image