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:

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:

One thought on “Out-Of-Place Patching: Como Atualizar o ORACLE_HOME e TNS_ADMIN do Listener no Enterprise Manager via Linha de Comando (emcli)”

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading