Olá pessoal,
Espero que estejam bem!
Recentemente um cliente entrou em contato pois estavam com problemas para fazer o rollback de um patch de JDK no $GRID_HOME.
Vamos entender melhor sobre o cenário:
O cliente estava rodando no patch level 19.17 e precisava aplicar o patch 19.19 no seu ambiente. Portanto, antes dele de fato aplicar, ele fez o analyze:
/oracle/app/193/grid/OPatch/opatchauto apply /sapcd/19C/AprilDBPatches/35037840 -analyze
==Following patches FAILED in analysis for apply: Patch: /sapcd/19C/AprilDBPatches/35037840/35042068 Log: /oracle/app/193/grid/cfgtoollogs/opatchauto/core/opatch/opatch2023-08-03_08-31-44AM_1.log Reason: Failed during Analysis: CheckConflictAgainstOracleHome Failed, [ Prerequisite Status: FAILED, Prerequisite output: The details are: Reason - Superset Patch 35042068 has Subset Patch 34419443 which has overlay patches [35004974] and these overlay patches conflict with Superset Patch Subset Patch 34419443 which has overlay patches [35004974] and these overlay patches conflict with Superset Patch OPatch recommends any one of the following actions - Please rebuild the superset patch to make su ...
O cliente abriu um chamado com a Oracle que foi citado o seguinte:
1. Rollback JDK patch 35004974 JDK BUNDLE PATCH 19.0.0.0.230418
2. Apply GI Release Update 35037840 19.19.0.0.0
3. Apply Release Update patch 35042068 DATABASE RELEASE UPDATE 19.19.0.0.0
Há alguns meses, o time de segurança da informação realizou esses scan periódicos por vulnerabilidade e informaram que a versão do binário $GRID_HOME/jdk/bin/java precisava ser atualizada. Desta forma, eles realizaram a instalação do patch 35004974 – JDK BUNDLE PATCH 19.0.0.0.230418.
Para poderem instalar o GI Release Update 19.19, eles precisariam fazer o rollback do patch 35004974 no GRID_HOME. Pois bem, eles tentaram realizar o rollback do patch:
opatch rollback -id 35004974
Após a tentativa do rollback, a seguinte mensagem foi exibida.
[Aug 3, 2023 3:10:13 AM] [INFO] Command call is : /oracle/app/193/grid/bin/patchgen commit -rb 35004974 [Aug 3, 2023 3:10:13 AM] [INFO] /oracle/app/193/grid/bin/patchgen: line 138: /oracle/app/193/grid/jdk/bin/java: No such file or directory [Aug 3, 2023 3:10:13 AM] [SEVERE] OUI-67073:UtilSession failed: RollbackSession failed in system modification phase... '/oracle/app/193/grid/bin/patchgen: line 138: /oracle/app/193/grid/jdk/bin/java: No such file or directory ' [Aug 3, 2023 3:10:13 AM] [INFO] Finishing UtilSession at Thu Aug 03 03:10:13 UTC 2023 [Aug 3, 2023 3:10:13 AM] [INFO] Log file location: /oracle/app/193/grid/cfgtoollogs/opatch/opatch2023-08-03_03-09-39AM_1.log [Aug 3, 2023 3:10:13 AM] [INFO] Stack Description: java.lang.RuntimeException: RollbackSession failed in system modification phase... '/oracle/app/193/grid/bin/patchgen: line 138: /oracle/app/193/grid/jdk/bin/java: No such file or directory ' at oracle.opatch.OPatchSession.runPatchgen(OPatchSession.java:932) at oracle.opatch.RollbackSession.rollback(RollbackSession.java:1993) at oracle.opatch.RollbackSession.autoRollback(RollbackSession.java:903) at oracle.opatch.RollbackSession.processLocal(RollbackSession.java:1627) at oracle.opatch.RollbackSession.process(RollbackSession.java:2528) at oracle.opatch.RollbackSession.process(RollbackSession.java:2639) at oracle.opatch.OPatchACL.processRollback(OPatchACL.java:281) at oracle.opatch.opatchutil.NRollback.legacy_process(NRollback.java:1048) at oracle.opatch.opatchutil.NRollback.process(NRollback.java:242) at oracle.opatch.opatchutil.OUSession.nrollback(OUSession.java:1150) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at oracle.opatch.UtilSession.process(UtilSession.java:355) at oracle.opatch.OPatchSession.process(OPatchSession.java:2643) at oracle.opatch.OPatch.process(OPatch.java:873) at oracle.opatch.OPatch.main(OPatch.java:930) Caused by: java.lang.RuntimeException: RollbackSession failed in system modification phase... '/oracle/app/193/grid/bin/patchgen: line 138: /oracle/app/193/grid/jdk/bin/java: No such file or directory ' ... 18 more
Observem bem essa mensagem:
RollbackSession failed in system modification phase… ‘/oracle/app/193/grid/bin/patchgen: line 138: /oracle/app/193/grid/jdk/bin/java: No such file or directory
Qual não foi a nossa surpresa ao perceber que após a tentativa de rollback, o conteúdo de $GRID_HOME/jdk foi totalmente removido. O diretório ficou vazio!
Como bons DBAs, nós havíamos feito um backup do $GRID_HOME antes, restauramos apenas o $GRID_HOME/jdk e pudemos seguir com o troubleshooting.
O próximo passo foi ativar o DEBUG do opatch para poder tentar entender o que estava acontecendo. Com o usuário grid:
export OPATCH_DEBUG=true
opatch rollback -id 35004974
OK, vamos analisar o debug (output truncado para facilitar a leitura):
[SystemCall.ExecReturn: systemCommand= ("/oracle/app/193/grid/bin/patchgen commit -rb 35004974"), errMsg= mv: cannot move ‘/oracle/app/193/grid/lib/libasmclntsh19.so’ to ‘/oracle/app/193/grid/lib/libasmclntsh19.so.bak’: Permission denied make: *** [update_patchrep] Error 1 , normalMsg= 19 loading the appropriate library for linux patchgensh19.so loaded succesfully. Note: Successfully commited, created .s file with apply and recover patches mv -f /oracle/app/193/grid/lib/libasmclntsh19.so /oracle/app/193/grid/lib/libasmclntsh19.so.bak make libasmclntsh19.so returned code 2 , return code= 99, exec. ok= false] RollbackSession failed in system modification phase... 'mv: cannot move ‘/oracle/app/193/grid/lib/libasmclntsh19.so’ to ‘/oracle/app/193/grid/lib/libasmclntsh19.so.bak’: Permission denied make: *** [update_patchrep] Error 1 ' UtilSession failed: RollbackSession failed in system modification phase... 'mv: cannot move ‘/oracle/app/193/grid/lib/libasmclntsh19.so’ to ‘/oracle/app/193/grid/lib/libasmclntsh19.so.bak’: Permission denied make: *** [update_patchrep] Error 1
Vamos prestar atenção à mensagem:
mv: cannot move ‘/oracle/app/193/grid/lib/libasmclntsh19.so’ to ‘/oracle/app/193/grid/lib/libasmclntsh19.so.bak’: Permission denied
OK, o usuário não teve permissão para mover o arquivo.
Após checar o conteúdo de $GRID_HOME/lib, observei que vários arquivos estavam com o ownership incorreto (essa é uma boa pergunta, como foi alterado? Provavelmente alguém estava com o dedo pesado).
No Linux há uma forma “fácil” de resolver isso caso você tenha um servidor onde as permissões/ownership estejam corretas, o que é o nosso caso.
Vamos salvar todas as permissões/ownership num arquivo. Como root:
cd /oracle/app/193/grid
getfacl -R * >> /sapcd/enkitec/19c/permissions.txt
Isso salvará todas as permissões e ownership dos arquivos e subdiretórios (o -R é para uso recursivo) dentro do arquivo permissions.txt.
Vamos analisar o conteúdo de apenas um trecho do arquivo:
# file: libasmclntsh19.a # owner: grid # group: oinstall user::rw- group::r-- other::r-- # file: libasmclntsh19.so # owner: grid # group: oinstall user::rwx group::r-x other::r-x
Perfeito! Agora vamos ao servidor cujas permissões/ownership precisam ser restauradas, também como root:
cd /oracle/app/193/grid
setfacl -R –restore=/sapcd/enkitec/19c/permissions.txt
Isso vai restaurar, também de forma recursiva, as permissões/ownership dos arquivos.
Agora podemos tentar fazer o rollback novamente. Com o usuário grid:
opatch rollback -id 35004974
Vamos analisar o output do rollback:
Oracle Interim Patch Installer version 12.2.0.1.36 Copyright (c) 2023, Oracle Corporation. All rights reserved. Oracle Home : /oracle/app/193/grid Central Inventory : /oracle/app/oraInventory from : /oracle/app/193/grid/oraInst.loc OPatch version : 12.2.0.1.36 OUI version : 12.2.0.7.0 Log file location : /oracle/app/193/grid/cfgtoollogs/opatch/opatch2023-08-05_23-00-09PM_1.log Patches will be rolled back in the following order: 35004974 The following patch(es) will be rolled back: 35004974 Rolling back patch 35004974... RollbackSession rolling back interim patch '35004974' from OH '/oracle/app/193/grid' Patching component oracle.jdk, 1.8.0.201.0... RollbackSession removing interim patch '35004974' from inventory Log file location: /oracle/app/193/grid/cfgtoollogs/opatch/opatch2023-08-05_23-00-09PM_1.log OPatch succeeded.
Perfeito!
Espero que tenha sido útil!
Um abraço,
Vinicius
Related posts
Disclaimer
Minhas postagens refletem minhas próprias opiniões e não representam necessariamente as opiniões do meu empregador, a Accenture.