AutoUpgrade: rollback luego de parchar?

Todos lo esperábamos, y ya es realidad desde AU 26.4!

Si me sigues, sabrás que he publicado muchos artículos sobre la aplicación de parches en Oracle Database Server. Si no lo has hecho, ¿qué esperas? Empieza con el primer artículo de la serie “Aprende a parchar como Dios manda”.

Los más recientes se enfocan en el uso de AutoUpgrade, herramienta que cumple con nuestro objetivo de simplificar y automatizar, pero quedaba un punto débil: si ya habíamos parchado, no nos servía para un rollback; debíamos hacerlo a mano.

El rollback de un parche no es muy complicado, pero nos quita tiempo y aumenta la probabilidad de errores. Afortunadamente, con la liberación de la versión 26.4, ya nos permite hacerlo.

Sigue leyendo para aprender a ejecutarlo.

Situación inicial

Para mayor claridad, vamos a ejecutar el ciclo completo de parchado y rollback.

Contamos con la base de datos orcl, que opera con el RU 19.30; la llevaremos al RU 19.31 con ayuda de AutoUpgrade, y luego la devolveremos al RU 19.30.

Así figura registrada en el OCR: en el Oracle Home /u01/app/oracle/19.0.0/db_1.
srvctl config database -db orcl

Database unique name: orcl
Database name: db
Oracle home: /u01/app/oracle/19.0.0/db_1
Oracle user: oracle
Spfile: /u01/app/oracle/19.0.0/db_1/dbs/spfileorcl.ora
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DAT01
Services:
OSDBA group:
OSOPER group:
Database instance: orcl

Y así figura el registro de los parches aplicados.

SET LINESIZE 200
SET PAGESIZE 100

COLUMN action_time FORMAT A28
COLUMN action FORMAT A8
COLUMN status FORMAT A8
COLUMN patch_type FORMAT A10
COLUMN description FORMAT A70

SELECT action_time,
       action,
       status,
       patch_id,
       patch_type,
       description
  FROM sys.dba_registry_sqlpatch
 ORDER BY action_time ASC;


ACTION_TIME                  ACTION       STATUS     PATCH_ID PATCH_TYPE DESCRIPTION
---------------------------- ------------ -------- ---------- ---------- ----------------------------------------------------------------------
22-MAY-26 11.09.11.329782 AM APPLY        SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
22-MAY-26 11.10.13.150589 AM APPLY        SUCCESS    38632161 RU         Database Release Update : 19.30.0.0.260120(REL-JAN260130) (38632161)
22-MAY-26 11.10.14.452039 AM APPLY        SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
22-MAY-26 11.10.14.506877 AM APPLY        SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
22-MAY-26 11.10.14.542761 AM APPLY        SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
22-MAY-26 11.10.14.560754 AM APPLY        SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
22-MAY-26 11.10.21.538780 AM APPLY        SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0

Hora de parchar

El primer paso es crear el archivo de configuración de AutoUpgrade. Para hacerlo fácil y sin complicaciones, nos apoyaremos en  la herramienta AutoUpgrade Composer y registraremos los resultados en el archivo patch.cfg:

# Created by AutoUpgrade Composer
# Upgrade, UpgType: regular

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

upg1.sid=orcl
upg1.log_dir=/home/oracle/autoupgrade/log/orcl_Upgrade
upg1.source_home=/u01/app/oracle/19.0.0/db_1
upg1.target_home=/u01/app/oracle/19.0.0/db_2
upg1.restoration=NO
upg1.timezone_upg=NO
Llegó el momento clave:  ejecutamos AutoUpgrade con -mode deploy y solo nos queda esperar con paciencia a que termine.
java -jar autoupgrade.jar \
-config patch.cfg \
-mode deploy

AutoUpgrade 26.4.260701 launched with default internal options
Processing config file ...
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be processed
Type 'help' to list console commands
upg> Job 100 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

Luego de unos minutos, el parchado ha concluido satisfactoriamente, por lo que procedemos a comprobarlo revisando el archivo status.log.

status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Fri Jul 10 10:06:37 PET 2026
[Number of Jobs] 1
==========================================
[Job ID] 100
==========================================
[DB Name]                orcl
[Version Before Upgrade] 19.30.0.0.0
[Version After Upgrade]  19.31.0.0.0
------------------------------------------
[Stage Name]    PREUPGRADE
[Status]        SUCCESS
[Start Time]    2026-07-10 09:59:26
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/preupgrade
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2026-07-10 09:59:26
[Duration]      0:00:16
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/prechecks
[Detail]        /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/prechecks/orcl_preupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    PREFIXUPS
[Status]        SUCCESS
[Start Time]    2026-07-10 09:59:42
[Duration]      0:00:46
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/prefixups
[Detail]        /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/prefixups/prefixups.html
------------------------------------------
[Stage Name]    DRAIN
[Status]        SUCCESS
[Start Time]    2026-07-10 10:00:29
[Duration]      0:05:23
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/drain
------------------------------------------
[Stage Name]    DBUPGRADE
[Status]        SUCCESS
[Start Time]    2026-07-10 10:05:52
[Duration]      0:00:38
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/dbupgrade
------------------------------------------
[Stage Name]    POSTCHECKS
[Status]        SUCCESS
[Start Time]    2026-07-10 10:06:30
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/postchecks
[Detail]        /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/postchecks/orcl_postupgrade.log
                Check passed and no manual intervention needed
------------------------------------------
[Stage Name]    POSTFIXUPS
[Status]        SUCCESS
[Start Time]    2026-07-10 10:06:31
[Duration]      0:00:06
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/postfixups
[Detail]        /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/postfixups/postfixups.html
------------------------------------------
[Stage Name]    POSTUPGRADE
[Status]        SUCCESS
[Start Time]    2026-07-10 10:06:37
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/postupgrade
------------------------------------------
[Stage Name]    SYSUPDATES
[Status]        SUCCESS
[Start Time]    2026-07-10 10:06:37
[Duration]      0:00:00
[Log Directory] /home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/sysupdates
------------------------------------------
Summary:/home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/dbupgrade/datapatch_summary.log

En el OCR se refleja el cambio al nuevo Oracle Home /u01/app/oracle/19.0.0/db_2.

srvctl config database -db orcl

Database unique name: orcl
Database name: db
Oracle home: /u01/app/oracle/19.0.0/db_2
Oracle user: oracle
Spfile: /u01/app/oracle/19.0.0/db_2/dbs/spfileorcl.ora
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DAT01
Services:
OSDBA group:
OSOPER group:
Database instance: orcl

También se actualizó el registro de los parches aplicados (ver las líneas 30 en adelante).

SET LINESIZE 200
SET PAGESIZE 100

COLUMN action_time FORMAT A28
COLUMN action FORMAT A8
COLUMN status FORMAT A8
COLUMN patch_type FORMAT A10
COLUMN description FORMAT A70

SELECT action_time,
       action,
       status,
       patch_id,
       patch_type,
       description
  FROM sys.dba_registry_sqlpatch
 ORDER BY action_time ASC;


ACTION_TIME                  ACTION       STATUS     PATCH_ID PATCH_TYPE DESCRIPTION
---------------------------- ------------ -------- ---------- ---------- ----------------------------------------------------------------------
22-MAY-26 11.09.11.329782 AM APPLY        SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
22-MAY-26 11.10.13.150589 AM APPLY        SUCCESS    38632161 RU         Database Release Update : 19.30.0.0.260120(REL-JAN260130) (38632161)
22-MAY-26 11.10.14.452039 AM APPLY        SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
22-MAY-26 11.10.14.506877 AM APPLY        SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
22-MAY-26 11.10.14.542761 AM APPLY        SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
22-MAY-26 11.10.14.560754 AM APPLY        SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
22-MAY-26 11.10.21.538780 AM APPLY        SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0
--- PATCH (19.30 -> 19.31) ---
10-JUL-26 10.06.04.078647 AM ROLLBACK     SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
10-JUL-26 10.06.04.119547 AM APPLY        SUCCESS    38906621 INTERIM    OJVM RELEASE UPDATE: 19.31.0.0.260421 (38906621)
10-JUL-26 10.06.04.136593 AM ROLLBACK     SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
10-JUL-26 10.06.04.197918 AM ROLLBACK     SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
10-JUL-26 10.06.04.229539 AM ROLLBACK     SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
10-JUL-26 10.06.04.239443 AM ROLLBACK     SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
10-JUL-26 10.06.04.589098 AM ROLLBACK     SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0
10-JUL-26 10.06.12.285543 AM APPLY        SUCCESS    39034528 RU         Database Release Update : 19.31.0.0.260421 (39034528)
10-JUL-26 10.06.15.459901 AM APPLY        SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
10-JUL-26 10.06.15.509353 AM APPLY        SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
10-JUL-26 10.06.15.531860 AM APPLY        SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
10-JUL-26 10.06.28.583074 AM APPLY        SUCCESS    39196236 INTERIM    DATAPUMP BUNDLE PATCH 19.31.0.0.0

Vuelta atrás

Acá viene la novedad: con AutoUpgrade 26.4 se introduce el parámetro rollback, que debemos complementar indicando el número de job. En nuestro caso, se trata del job 100, por lo que ejecutamos AutoUpgrade con -rollback -jobs 100 y esperamos a que concluya.
java -jar autoupgrade.jar \
-config patch.cfg \
-rollback -jobs 100

Previous execution found loading latest data
Total jobs being restored: 1
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
Job 100 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs restored                  [1]
Jobs failed                    [0]
-------------------- JOBS PENDING --------------------
Job 100 for orcl

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
Exiting

Transcurridos unos minutos más, el rollback ha concluido, por lo que procedemos a revisar el archivo status.log y comprobamos que todo está en orden.

status.log
==========================================
          Autoupgrade Summary Report
==========================================
[Date]           Fri Jul 10 10:19:57 PET 2026
[Number of Jobs] 1
==========================================
[Job ID] 100
==========================================
[DB Name]                orcl
[Version Before Upgrade] 19.30.0.0.0
[Version After Upgrade]  19.31.0.0.0
------------------------------------------
[Stage Name]    GRPRESTORE
[Status]        SUCCESS
[Start Time]
[Duration]
------------------------------------------
Summary:/home/oracle/autoupgrade/log/orcl_Upgrade/orcl/100/dbupgrade/datapatch_summary.log

En el OCR se refleja el retorno al Oracle Home anterior /u01/app/oracle/19.0.0/db_1.

srvctl config database -db orcl

Database unique name: orcl
Database name: db
Oracle home: /u01/app/oracle/19.0.0/db_1
Oracle user: oracle
Spfile: /u01/app/oracle/19.0.0/db_1/dbs/spfileorcl.ora
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DAT01
Services:
OSDBA group:
OSOPER group:
Database instance: orcl

De forma similar, se actualizó el registro de los parches aplicados (ver las líneas 42 en adelante).

SET LINESIZE 200
SET PAGESIZE 100

COLUMN action_time FORMAT A28
COLUMN action FORMAT A8
COLUMN status FORMAT A8
COLUMN patch_type FORMAT A10
COLUMN description FORMAT A70

SELECT action_time,
       action,
       status,
       patch_id,
       patch_type,
       description
  FROM sys.dba_registry_sqlpatch
 ORDER BY action_time ASC;


ACTION_TIME                  ACTION   STATUS     PATCH_ID PATCH_TYPE DESCRIPTION
---------------------------- -------- -------- ---------- ---------- ----------------------------------------------------------------------
2026-05-22 11:09             APPLY    SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
2026-05-22 11:10             APPLY    SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0
2026-05-22 11:10             APPLY    SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
2026-05-22 11:10             APPLY    SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
2026-05-22 11:10             APPLY    SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
2026-05-22 11:10             APPLY    SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
2026-05-22 11:10             APPLY    SUCCESS    38632161 RU         Database Release Update : 19.30.0.0.260120(REL-JAN260130) (38632161)
2026-07-10 10:06             APPLY    SUCCESS    39034528 RU         Database Release Update : 19.31.0.0.260421 (39034528)
2026-07-10 10:06             ROLLBACK SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0
2026-07-10 10:06             ROLLBACK SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
2026-07-10 10:06             ROLLBACK SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
2026-07-10 10:06             ROLLBACK SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
2026-07-10 10:06             ROLLBACK SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
2026-07-10 10:06             APPLY    SUCCESS    38906621 INTERIM    OJVM RELEASE UPDATE: 19.31.0.0.260421 (38906621)
2026-07-10 10:06             ROLLBACK SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
2026-07-10 10:06             APPLY    SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
2026-07-10 10:06             APPLY    SUCCESS    39196236 INTERIM    DATAPUMP BUNDLE PATCH 19.31.0.0.0
2026-07-10 10:06             APPLY    SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
2026-07-10 10:06             APPLY    SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
--- ROLLBACK (19.31 -> 19.30) ---
2026-07-10 10:15             ROLLBACK SUCCESS    38906621 INTERIM    OJVM RELEASE UPDATE: 19.31.0.0.260421 (38906621)
2026-07-10 10:15             APPLY    SUCCESS    38523609 INTERIM    OJVM RELEASE UPDATE: 19.30.0.0.260120 (38523609)
2026-07-10 10:15             ROLLBACK SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
2026-07-10 10:15             ROLLBACK SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
2026-07-10 10:15             ROLLBACK SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
2026-07-10 10:15             APPLY    SUCCESS    38844733 INTERIM    DATAPUMP BUNDLE PATCH 19.30.0.0.0
2026-07-10 10:15             ROLLBACK SUCCESS    39034528 RU         Database Release Update : 19.31.0.0.260421 (39034528)
2026-07-10 10:15             APPLY    SUCCESS    28907129 INTERIM    XF20.1PX_ADW - TRC - KGHFRF - ORA-600 [17114]
2026-07-10 10:15             APPLY    SUCCESS    38844367 INTERIM    19.30 OJVM PATCH APPLY IS FAILING ON SECOND NODE IN RAC ENVIRONMENT
2026-07-10 10:15             APPLY    SUCCESS    34774667 INTERIM    ORA-7445 IN PURGE QUEUE TABLE
2026-07-10 10:15             APPLY    SUCCESS    29259068 INTERIM    18.2 AUTO STATS JOB DOESNT FINISH DUE TO SLOW MERGE ON MON_MODS_ALL$
2026-07-10 10:15             ROLLBACK SUCCESS    39196236 INTERIM    DATAPUMP BUNDLE PATCH 19.31.0.0.0

Conclusiones

Con la última actualización de AutoUpgrade, el rollback de un parche, si bien puede que nunca necesites ejecutarlo, ahora es una tarea trivial que se limita a un solo paso.

Para ti que aún parchas a mano, AutoUpgrade es, sin pensarlo dos veces, la herramienta ideal para hacerte la vida más fácil. Te recomiendo empezar a probarlo lo antes posible. ¡No te arrepentirás!

¿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

Plugin non-CDB
En Oracle 26ai, multitenant es obligatorio. Aprenda a actualizar de 19c non-CDB a 26ai, migrando correctamente a esta nueva arquitectura.
Patching the database
Aprende a parchar una base de datos Oracle RAC con AutoUpgrade y usando Gold Image.
Install with Gold Image - AutoUpgrade
Aprende a crear y usar un Gold Image con AutoUpgrade para la instalación de un nuevo Oracle Home.

¿Necesitas Ayuda?

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