All Things Oracle

¿Vas a aplicar un patch?, verifica posibles conflictos

De cuando en cuando nos topamos con algún problema que afecta el normal desempeño de la base de datos, o quizás de alguna aplicación, y luego de investigar llegamos a la conclusión de que es inevitable aplicar uno o varios patches, pero habrán notado que en el README.txt que acompaña a todo patch se indica:

You must have NO OTHER PATCHES installed on your Oracle Server since the latest patch set

Esta advertencia hará dudar a algunos y habrá quienes harán caso omiso al mismo, siendo cuestión de suerte que todo salga bien, pero afortunadamente es posible determinar con anticipación si los patches por aplicar entran en conflicto entre ellos o con patches previamente aplicados, lo cual nos ahorrará muchos dolores de cabeza.

Patching "a lo macho"

Tenemos plena confianza en que todo saldrá bien y aplicamos el patch sin pensarlo mucho y cruzando los dedos, a veces se aplicará sin problemas, otras veces fallará, como en este caso en el que deseamos aplicar el patch 4459936 FGA doesn’t work correctly with ansi outer joins in 10g.

[oracle@caliope 4459936]$ opatch apply
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.5
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-11-38AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

ApplySession applying interim patch '4459936' to OH '/u01/app/oracle/product/10.2.0/db_1'
Interim Patch 4459936 has Conflict with patch(es) [  6996030 ] in OH /u01/app/oracle/product/10.2.0/db_1

Conflict patches:   6996030

Patch(es)  6996030 conflict with the patch currently being installed (4459936).

If you continue, patch(es)  6996030 will be rolled back and the new patch (4459936) will be installed.

If a merge of the new patch (4459936) and the conflicting patch(es) ( 6996030) is required, contact Oracle Support Services and request a Merged patch.

Do you want to proceed? [y|n]

Pues ocurre que el nuevo patch entra en conflicto con el patch 6996030 Merge label request on top of 10.2.0.4 for audit trail clean-up, y si deseamos aplicarlo entonces Oracle tendrá que desinstalar el ya existente, algo que usualmente no deseamos hacer, pero mientras tanto perdimos tiempo pues tuvimos que suspender el servicio y posiblemente trabajar en un horario fuera de lo normal.

Patching Planificado

Afortunadamente es posible evitar esta situación si previamente verificamos que no existan conflictos, algo que se puede lograr de forma muy sencilla con OPatch, pero antes de ver cómo, primero veamos qué patches ya tenemos instalados:
[oracle@caliope 5099019]$ opatch lsinventory
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.5
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-45-36AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Lsinventory Output file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2008-12-31_01-45-36AM.txt

--------------------------------------------------------------------------------
Installed Top-level Products (3):

Oracle Database 10g                                                  10.2.0.1.0
Oracle Database 10g Products                                         10.2.0.1.0
Oracle Database 10g Release 2 Patch Set 3                            10.2.0.4.0
There are 3 products installed in this Oracle Home.


Interim patches (2) :

Patch  5099019      : applied on Wed Dec 31 01:42:18 PET 2008
   Created on 1 Dec 2008, 08:03:06 hrs PST8PDT
   Bugs fixed:
     5099019

Patch  6996030      : applied on Wed Sep 10 11:08:30 PET 2008
   Created on 21 Oct 2008, 06:57:58 hrs PST8PDT
   Bugs fixed:
     6964283, 6940487, 4740049, 6996030, 6954407, 6023472, 4085593, 6340297
     6655588, 6726958

--------------------------------------------------------------------------------

OPatch succeeded.

Tenemos un par de patches ya aplicados, el 5099019 dbms_stats doesn’t count leaf_blocks correctly, y el 6996030 Merge label request on top of 10.2.0.4 for audit trail clean-up, pero ahora queremos aplicar muchos más:

[oracle@caliope ~]$ ls /home/oracle/patches
4459936  5586604  6051177  6084232  6399168  6894671  6926448  7123643  7191744
7243560  5523375  5895190  6055481  6369463  6678845  6897966  7025450  7189722
7226463  7331929
Ahora veamos si entre ellos existe algún conflicto:
[oracle@caliope ~]$ opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir /home/oracle/patches
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.5
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-47-03AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Invoking prereq "checkconflictamongpatcheswithdetail"

Prereq "checkConflictAmongPatchesWithDetail" failed.

Summary of Conflict Analysis:

Patches that can be applied now without any conflicts are :
4459936, 5523375, 5586604, 5895190, 6051177, 6055481, 6084232, 6369463, 6399168, 6678845, 6894671, 6897966, 6926448, 7123643, 7189722, 7226463, 7243560, 7331929

Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches :
7025450, 7191744

Conflicts/Supersets for each patch are:

Patch : 7025450

        Generic Conflict with 7191744
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

Patch : 7191744

        Generic Conflict with 7025450
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

OPatch succeeded.

OPatch nos notifica que existe un conflicto entre los patches 7025450 dbms_shared_pool.keep doesn’t keep future child cursors, y 7191744 update in wrong schema, pero ¿existirán conflictos adicionales con los patches ya instalados? pues averigüémoslo:

[oracle@caliope ~]$ opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /home/oracle/patches/
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.5
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-47-28AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" failed.

Summary of Conflict Analysis:

Patches that can be applied now without any conflicts are :
5523375, 5586604, 5895190, 6051177, 6055481, 6084232, 6369463, 6678845, 6894671, 6897966, 6926448, 7123643, 7189722, 7226463, 7243560, 7331929

Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches :
6996030, 4459936, 5099019, 6399168, 7025450, 7191744

Following patches will be rolled back from Oracle Home on application of the patches in the given list :
6996030, 5099019

Conflicts/Supersets for each patch are:

Patch : 4459936

        Generic Conflict with 6996030
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kzft.o

Patch : 6399168

        Generic Conflict with 5099019
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/rdbms/admin/prvtstat.plb

Patch : 7025450

        Generic Conflict with 7191744
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

Patch : 7191744

        Generic Conflict with 7025450
        Conflict details:
        /u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

OPatch succeeded.

Pues desafortunadamente hay conflictos adicionales, esta vez entre el patch 4459936 FGA doesn’t work correctly with ansi outer joins in 10g, y el 6996030 Merge label request on top of 10.2.0.4 for audit trail clean-up, algo que ya habíamos visto, y también entre el patch 6399168 gather statistics on table with bitmap indexes runs forever, y el 5099019 dbms_stats doesn’t count leaf_blocks correctly.

Con esta información ya podemos continuar con la aplicación de los patches que no presentarán conflictos y para los casos en que sí, debemos abrir un Service Request en My Oracle Support, solicitando se nos proporcione un merged patch tal como OPatch nos ha sugerido:

Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches : 6996030, 4459936, 5099019, 6399168, 7025450, 7191744

Recomendaciones Finales

Procura tener la última versión de OPatch, misma que puedes obtener buscando el patch 6880880; instalarlo es muy fácil solo tienes que descomprimirlo en $ORACLE_HOME/OPatch.

Luego que lo tengas instalado procede a obtener todos los patches que te interesa aplicar y descomprímelos bajo una misma carpeta, ahora usa OPatch para verificar la presencia de conflictos entre ellos y los ya aplicados. De existir algún conflicto solicita a Oracle que te proporcione un merged patch.

Finalmente, te recomiendo leer las notas:

458485.1How to find whether the one-off Patches will conflict or not?
551394.1What Are The MANDATORY Information Required To File A Merge Patch Request?
¿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!

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Posts Relacionados

Primer post de una serie dedicada al arte de parchar Oracle. Empezamos con el parchado in-place, la forma más común y también la más peligrosa.
Aprenda a descargar los parches de Oracle, tanto manualmente como de forma automatizada, usando el utilitario getMOSPatch.
Link a articulo publicado en Toad World, sobre como aplicar un patch out-of-place a Grid Infrastructure, usando un Golden Image.

¿Necesitas Ayuda?

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