Quando aplicamos patch no GRID usando a abordagem Out-Of-Place, um efeito colateral comum é o Listener ficar com status offline ou intermitente no Enterprise Manager Cloud Control.
Exemplo de quando o ORACLE_HOME está desatualizado:

Exemplo de quando o TNS_ADMIN está desatualizado:

Neste post apresento um exemplo com o cenário abaixo:
| Nome do Servidor | lab02.dibiei.com |
| Nome do Listener | LISTENER |
| Nome do Target do Listener no EM | LISTENER_lab02.dibiei.com |
| Oracle Home Original | /u01/app/product/19.0.0.0/GI1920 |
| Oracle Home Novo | /u01/app/product/19.0.0.0/GI1921 |
Solução via Interface Gráfica
Clique com botão direito no nome do Listener e acesse as opções Target Setup -> Monitoring Configuration:

Configuração original com PATH /u01/app/product/19.0.0.0/GI1920

Atualizando com PATH /u01/app/product/19.0.0.0/GI1921:

Solução Via Linha de Comando
Agora como executar o mesmo procedimento usando o utilitário emcli no servidor do Enterprise Manager. Note que este comando não é suportado pelo utilizário emcli disponível no agente instalados no servidores de banco de dados.
No servidor do EM, autentique-se com um usuário admin:
emcli login -username=sysman
Execute a opção sync:
emcli sync
Na opção modify_target, usamos o parâmetro -properties para atualizar os atributos “OracleHome” e “ListenerOraDir”:
export NEW_ORACLE_HOME=/u01/app/product/19.0.0.0/GI1921 emcli modify_target \ -type="oracle_listener" \ -name="LISTENER_lab02.dibiei.com" \ -properties="OracleHome:$NEW_ORACLE_HOME;ListenerOraDir:$NEW_ORACLE_HOME/network/admin" -on_agent
Verificando o status do Listener após a modificação:
emcli get_targets -targets="LISTENER_lab02.dibiei.com:oracle_listener"
Exemplo:



Exemplo de Script
Para alterações em maior escala, como uma lista de servidores, podemos usar a opção “get_targets” para listar todos os targets do tipo “oracle_listener” e aplicar um filtro com um ou alguns hostnames.
No exemplo abaixo, a variável SERVER_NAME recebe um hostname ou uma lista de hostnames separados por pipe ( “|” ), que é usado para fazer um grep no resultado do comando “emcli get_targets”.
As opções “-script” e “-noheader” são utilizadas para o emcli retornar o resultado em um formato de tabulação que pode ser usado para fazer parse do texto. O awk é usado com o separador ” ‘\t’ “, que é compatível com o formato de tabulação retornado pelo em get_targets.
export SERVER_NAME="lab01|lab02"
export NEW_ORACLE_HOME=/u01/app/product/19.0.0.0/GI1921
for TARGET_NAME in $( emcli get_targets -targets="oracle_listener" -script -noheader | awk -F'\t' '{print $4}' | egrep $SERVER_NAME ); do
emcli modify_target \
-type="oracle_listener" \
-name="$TARGET_NAME" \
-properties="OracleHome:$NEW_ORACLE_HOME;ListenerOraDir:$NEW_ORACLE_HOME/network/admin" -on_agent
done;
Exemplo:

[…] curioso sobre o que dá pra resolver no dia a dia via linha de comando, pode ver o post “Out-Of-Place Patching: Como Atualizar o ORACLE_HOME e TNS_ADMIN do Listener no Enterprise Manager vi…” onde demonstro como utilizá-lo para atualizar propriedades de um Listener registrado no […]