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