Después de aplicar un parche "Out-Of-Place" (OOP) en Oracle, en mi caso para la Grid Infrastructure (GI) la base de datos (BBDD), te enfrentas a una tarea tediosa: actualizar todas las referencias al Oracle Home antiguo en Oracle Enterprise Manager (OEM). Si eres como yo, probablemente no te apetezca pasar horas haciendo clic target por target en OEM, especialmente si tienes un montón de ellos.
La buena noticia es que no tienes que hacerlo todo a mano. Aquí te voy a contar cómo hacerlo mucho más rápido.
Oracle Enterprise Manager mantiene las propiedades de los targets, como la versión de la base de datos y la ruta de Oracle Home. Cuando aplicas un parche OOP, las rutas del Oracle Home cambian, pero OEM puede seguir usando las viejas rutas, lo que genera información desactualizada. Esto podría ocasionar problemas en tus métricas y alertas, así que es importante actualizar esas rutas. La forma "rápida" de hacerlo
¿Quién tiene tiempo para ir target por target en OEM seleccionando manualmente cada uno? Afortunadamente, hay una forma más rápida y eficiente: ¡usando una consulta SQL para generar los comandos necesarios! Así, solo ejecutas un par de líneas y listo, sin necesidad de navegar por la interfaz de OEM.
Aquí te dejo la consulta SQL que usé para generar los comandos que después ejecuté con emcli (la herramienta de línea de comandos de Oracle) en el catálogo de OEM:
SELECT 'emcli modify_target -name=''' || t.target_name || ''' -type=''' || t.target_type || ''' -properties=''' || p.property_name || ':' ||
CASE
WHEN p.property_value = '/u01/app/oracle/product/19.24.0' THEN '/u01/app/oracle/product/19.26'
WHEN p.property_value = '/u01/app/19.24/grid' THEN '/u01/app/19.26/grid'
ELSE p.property_value
END || ''' -on_agent'
FROM
sysman.mgmt_target_properties p,
sysman.mgmt_targets t
WHERE
p.property_name = 'OracleHome'
AND t.target_guid = p.target_guid
AND ( p.property_value = '/u01/app/oracle/product/19.24.0' -- Filtro por referencias al home antiguo
OR p.property_value = '/u01/app/19.24/grid' )
AND upper(t.target_name) LIKE '%XXX%'; -- En mi caso ubico por el nombre de los targets afectados
¿Qué hace esta consulta?
Selecciona los targets afectados: La consulta filtra aquellos targets que siguen apuntando a las versiones antiguas del Oracle Home. Parametriza con tus rutas (antiguas y nuevas), no seas vago.
Genera los comandos emcli: Crea un comando para actualizar cada target con la nueva ruta del Oracle Home.
Agiliza el proceso: En lugar de ir seleccionando y actualizando manualmente cada target en la interfaz de OEM, solo ejecutas los comandos generados. ¡Mucho más rápido!
Ejecución de los comandos
Una vez que la consulta te haya dado los comandos emcli, solo tienes que ejecutarlos en tu terminal y todos los targets se actualizarán en un abrir y cerrar de ojos.
[propietariocc@cloudcontrolhost ~]$ emcli login -username=sysman
Enter password :
Login successful
[propietariocc@cloudcontrolhost ~]$ emcli sync
Synchronized successfully
[propietariocc@cloudcontrolhost ~]$ emcli modify_target -name='has_rac-xxx-002.xxxxxx.local' -type='has' -properties='OracleHome:/u01/app/19.26/grid' -on_agent
Target "has_rac-xxx-002.xxxxxx.local:has" modified successfully
[propietariocc@cloudcontrolhost ~]$ emcli modify_target -name='has_rac-xxx-001.xxxxxx.local' -type='has' -properties='OracleHome:/u01/app/19.26/grid' -on_agent
Target "has_rac-xxx-001.xxxxxx.local:has" modified successfully
[propietariocc@cloudcontrolhost ~]$ emcli modify_target -name='rac-xxx' -type='cluster' -properties='OracleHome:/u01/app/19.26/grid' -on_agent
Target "rac-xxx:cluster" modified successful
...
¿Por qué es tan útil?
En entornos con muchos targets, este enfoque no solo ahorra tiempo, sino que también reduce el riesgo de olvidarse de algún target o cometer un error manual. Es mucho más eficiente y te permite dedicar tu tiempo a otras cosas importantes (como disfrutar de un café). En resumen
Actualizar las referencias al Oracle Home después de un parche OOP no tiene que ser un dolor de cabeza. Usando una consulta SQL para generar los comandos emcli, puedes hacerlo de forma rápida, sin tener que ir target por target en la interfaz de OEM. ¡Automatiza y ahorra tiempo!
NOTA:
Se puede automatizar mediante un script, pero eso ya da para otro café…