En esta entrada vamos a describir cómo aplicar un parche a nuestra base de datos. En este ejemplo, nuestra base de datos se encuentra en la versión 19.3.0.0 y vamos a aplicar el parche 19.20.0.0 (Patch 35320081: DATABASE RELEASE UPDATE 19.20.0.0.0), aunque el procedimiento suele ser similar recomiendo siempre leer el README de los parches para tener claro los pasos del mismo si se siguiera esta guía para aplicar un parche diferente. En nuestro caso parchearemos una base de datos en local, sin ASM y en modo «No Rolling», es decir con parada de la base de datos.
En primer lugar, cómo es lógico es conocer la versión de parcheo actual de nuestra base de datos, lo podemos hacer de varias maneras, una de ellas es la siguiente.
Con las variables de entorno de la base de datos a parchear cargadas, lanzamos el siguiente comando (opatch lspatches).
[oracle@localhost OPatch]$ ./opatch lspatches
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)
OPatch succeeded.
En nuestro caso la base de datos se encuentra en la release 19.3.0.0.
Bajamos el parche de 19.20.0.0 de la web oficial de Oracle, en nuestro caso para Linux x86-64.
Antes de poder aplicar el parche, y cómo indica el README de los prerrequisitos del parche, es necesario disponer de la versión de Opatch 12.2.0.1.37 o superior. Yo siempre aconsejo bajar la última versión de OPatch disponible.
1) Bajamos el OPatch de la siguiente dirección de Oracle.
https://updates.oracle.com/download/6880880.html
Actualmente la versión disponible es la versión 12.2.0.1.40
Para aplicar esta versión, dirígete al ORACLE_HOME de tu base de datos, renombra el directorio actual «OPatch» y descomprime el parche recién bajado.
[oracle@localhost sw]$ cd $ORACLE_HOME
[oracle@localhost sw]$ mv OPatch/ OPatch_old
[oracle@localhost sw]$ unzip p6880880_190000_Linux-x86-64.zip
Archive: p6880880_190000_Linux-x86-64.zip
creating: OPatch/
creating: OPatch/docs/
inflating: OPatch/docs/cversion.txt
inflating: OPatch/docs/Users_Guide.txt
inflating: OPatch/docs/Prereq_Users_Guide.txt
inflating: OPatch/docs/FAQ
.
.
.
.
Comprobamos que la versión del OPatch es la correcta.
[oracle@localhost OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.40
OPatch succeeded.
2) Descomprimimos el parche
cd /tmp/parche1920/35320081
unizp p35320081_190000_Linux-x86-64.zip
ls -lrt /tmp/parche1920/35320081
drwxr-xr-x. 5 oracle oracle 4096 jul 15 21:54 35320081
-rw-rw-r–. 1 oracle oracle 1749054 jul 18 15:03 PatchSearch.xml
-rw-rw-r–. 1 oracle oracle 1769419773 nov 15 17:54 p35320081_190000_Linux-x86-64.zip
3) Ejecutamos el Precheck para comprobar que no hay discrepancias.
Dentro del directorio creado al descomprimir (/tmp/parche1920/35320081/35320081), lanzamos el siguiente comando:
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Installer de Parche Temporal de Oracle versión 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation. Todos los Derechos Reservados.
PREREQ session
Directorio raíz de Oracle : /u01/sw
Inventario central: /u01/oraInventory
de : /u01/sw/oraInst.loc
Versión de OPatch : 12.2.0.1.40
Versión de OUI : 12.2.0.7.0
Ubicación del archivo log : /u01/sw/cfgtoollogs/opatch/opatch2023-11-15_18-17-30PM_1.log
Invoking prereq «checkconflictagainstohwithdetail»
Prereq «checkConflictAgainstOHWithDetail» passed.
OPatch succeeded.
En entornos RAC, el parche se instalará en modo rolling (no downtime). Si no estamos en entornos RAC, cómo es nuestro ejemplo, es necesario realizar un shutdown de todas las bases de datos pertenecientes al ORACLE_HOME a parchear, al igual que los listener asociados a dichas Bases de datos antes de poder aplicar el parche.
[oracle@localhost 35320081]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Wed Nov 15 23:39:23 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@localhost 35320081]$ lsnrctl stop
LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 15-NOV-2023 23:40:10
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
En este momento es posible aplicar el parcheo.
La forma más sencilla es ir al directorio donde está localizado el parche que hemos descomprimido y ejecutar la utilidad OPatch de la siguiente manera:
unzip -d <PATCH_TOP_DIR> p35320081_<version>_<platform>.zip
cd <PATCH_TOP_DIR> 35320081
opatch apply
Aquí mostramos la salida:
[oracle@localhost 35320081]$ opatch apply
Installer de Parche Temporal de Oracle versión 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation. Todos los Derechos Reservados.
Directorio raíz de Oracle : /u01/sw
Inventario central: /u01/oraInventory
de : /u01/sw/oraInst.loc
Versión de OPatch : 12.2.0.1.40
Versión de OUI : 12.2.0.7.0
Ubicación del archivo log : /u01/sw/cfgtoollogs/opatch/opatch2023-11-15_23-48-57PM_1.log
Verifying environment and performing prerequisite checks…
OPatch continues with these patches: 35320081
¿Desea continuar? [y|n]
y
User Responded with: Y
All checks passed.
Cierre las instancias Oracle que se estén ejecutando fuera de este ORACLE_HOME en el sistema local.
(Directorio Raíz de Oracle = ‘/u01/sw’)
¿Está el sistema local listo para aplicarle un parche? [y|n]
y
User Responded with: Y
Backing up files…
Aplicando parche a componente oracle.xdk.rsf, 19.0.0.0.0…
Aplicando parche a componente oracle.ldap.client, 19.0.0.0.0…
Aplicando parche a componente oracle.mgw.common, 19.0.0.0.0…
Aplicando parche a componente oracle.odbc, 19.0.0.0.0…
.
.
Patch 35320081 successfully applied.
Comprobamos que el parche de base de datos ha sido correctamente aplicado.
[oracle@localhost 35320081]$ opatch lspatches
35320081;Database Release Update : 19.20.0.0.230718 (35320081)
En este punto, podemos abrir la base de datos y levantar el listener asociados al ORACLE_HOME parcheado.