Como renomear os alvos no Oracle EM 12c

This post is also available in: English

Durante muitos meses, a única maneira que eu encontrei para renomear um target no OEM Cloud Control era apagando e adicionando novamente. No entanto, existe outra maneira como mostrarei adiante. Este procedimento foi testado e validado no EM 12.1.0.2. Portanto, se você optar por experimentar em outra versão, faça assumindo um risco!

Todos os alvos do Enteprise Manager Cloud Control 12c tem um "Display Name" e um "Target Name".

Além disso , há dois tipos de alvos:

  • Alvos de Repositório ("Repository Side")
  • Alvos de Agente ("Agent Side")

Para consultar os alvos de Repositório, utilize a seguinte query dentro do seu repositório do EM:

SELECT ENTITY_TYPE,
       TYPE_DISPLAY_NAME,
       ENTITY_NAME,
       DISPLAY_NAME
FROM   SYSMAN.EM_MANAGEABLE_ENTITIES
WHERE  MANAGE_STATUS = 2
AND    REP_SIDE_AVAIL = 1
ORDER  BY 1,
          2;

Para consultar os alvos de Agente, use esta query dentro do seu repositório EM:

SELECT ENTITY_TYPE,
       TYPE_DISPLAY_NAME,
       ENTITY_NAME,
       DISPLAY_NAME,
       EMD_URL
FROM   SYSMAN.EM_MANAGEABLE_ENTITIES
WHERE  MANAGE_STATUS = 2
AND    REP_SIDE_AVAIL = 0
AND    EMD_URL IS NOT NULL
ORDER  BY 1,
          2,
          3;

Os alvos de Agente são armazenados também dentro do host sendo monitorado. Você pode listá-los com o seguinte script (como usuário owner do EM Agent):

[root@evabddrjs001 ~]# su - emc12
[emc12@evabddrjs001 ~]$ $AGENT_HOME/bin/emctl config agent listtargets
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
[10.221.63.104, host]
[10.221.63.104:3872, oracle_emd]
[agent12c1_2_evabddrjs001, oracle_home]
[COLISEU_104, oracle_database]
[OraDb10g_home1_1_evabddrjs001, oracle_home]
[COLISEU_10.221.63.104, oracle_listener]
[emc12@evabddrjs001 ~]$

Primeiro, vamos ver um exemplo de como renomear alvos do Repositório:

Renomear alvos de Repositório

O que você precisa saber:

  • Esses alvos não são monitorados pelo agente do Cloud Control.
  • Esses alvos não estão presentes nos arquivos do agente do Cloud Control "$AGENT_BASE/sysman/emd/targets.xml"
  • Esses alvos estão apenas presentes no repositóio do Cloud Control repository e eles são mais conhecidos como alvos de "Sistema" ou alvos agregados (como grupos).

O "Display Name" e o "Target Name" são quase sempre iguais para alvos de Repositório.

É possível renomear alvos de Repositório. Para começar, execute o seguinte comando "emcli", como usuário oracle dentro do servidor do OEM:

[root@ec12mntrjr001 ~]# su - oracle
[oracle@ec12mntrjr001 ~]$ emcli login -username=sysman
Enter password :

Login successful
[oracle@ec12mntrjr001 ~]$ emcli sync
Synchronized successfully

Target Name

Para renomear o "Target Name" do nome, use o comando abaixo:

-target_name=<"target name" atual>
-new_target_name=<novo "target name">

Ex: Renomenado um target name de "oracbddrjs_cluster" para "oracbddrjs-cluster".

[oracle@ec12mntrjr001 ~]$ emcli rename_target -target_type="cluster" -target_name="oracbddrjs_cluster" -new_target_name="oracbddrjs-cluster"

Agora verifique com a query de "alvos de Repositório" se o "Target name" e o "Display name" foram alterados.

Se apenas o "target name" tiver sido modificado, execute o seguinte:

Display Name

Para renomar o "Display Name" do alvo, use o comando:

-name=<"Target name"> # Perceba que aqui eu utilizei o novo nome pois eu já o renomeei na etapa anterior.
-display_name=<novo "Display name">

Ex: Renomeando um display name para "oracbddrjs-cluster".

[oracle@ec12mntrjr001 ~]$ emcli modify_target -name="oracbddrjs-cluster" -type="cluster" -display_name="oracbddrjs-cluster"
Target "oracbddrjs-cluster:cluster" modified successfully
[oracle@ec12mntrjr001 ~]$

Agora vamos ver um exemplo de como renomear alvos de Agentes:

Renomear alvos de Agente

O que você precisa saber:

  • Esses alvos são monitorados pelo agente do Cloud Control.
  • Esses alvos estão presentes nos arquivos do agente do Cloud Control "$AGENT_BASE/sysman/emd/targets.xml"

O "Display Name" e o "Target Name" podem ser diferentes para alvos de Agente.
O "Target Name" para um alvo de Agente é o nome do alvo no arquivo "$AGENT_BASE/sysman/emd/targets.xml" do agente do EM Cloud Control.
(Que pode ser obtido executando o comando "emctl config agent listtargets" no agente do EM Cloud Control).

Display Name

Para modificar o "Display Name" de um alvo de Agente, você pode executar o seguinte comando:

Ex: Renomeando o display name do listener para "LISTENER_10.221.63.104".

[root@ec12mntrjr001 ~]# su - oracle
[oracle@ec12mntrjr001 ~]$ emcli login -username=sysman
Enter password :

Login successful
[oracle@ec12mntrjr001 ~]$ emcli modify_target -name="COLISEU_10.221.63.104" -type="oracle_listener" -display_name="LISTENER_10.221.63.104" -on_agent
Target "COLISEU_10.221.63.104:oracle_listener" modified successfully

Verificando no alvo:

[emc12@evabddrjs001 ~]$ emctl config agent listtargets
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
[10.221.63.104, host]
[10.221.63.104:3872, oracle_emd]
[agent12c1_2_evabddrjs001, oracle_home]
[COLISEU_104, oracle_database]
[OraDb10g_home1_1_evabddrjs001, oracle_home]
[COLISEU_10.221.63.104, oracle_listener]
[emc12@evabddrjs001 ~]$

O "Target name" não mudou, mas o "Display name" está agora como na figura abaixo:

Target Name

Atenção: Execute os comando abaixos assumindo um risco. Oracle não suporta isto ainda e será necessário efetuar modificações em packages do SYSMAN.

Neste exemplo, nós iremos renomear o target name de um listener de "COLISEU_10.221.63.104" para "LISTENER_10.221.63.104". Note que o display name já foi alterado na etapa anterior.

Antes de mais nada, pare o agente na máquina alvo, edite o arquivo "$AGENT_BASE/sysman/emd/targets.xml" com o nome desejado para o "Target name" e inicie o agente novamente:

[emc12@evabddrjs001 ~]$ emctl stop agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
Stopping agent ..... stopped.
[emc12@evabddrjs001 ~]$ vim $AGENT_BASE/sysman/emd/targets.xml

Antes:

[emc12@evabddrjs001 ~]$ cat $AGENT_BASE/sysman/emd/targets.xml
...
<Target TYPE="oracle_listener" NAME="COLISEU_10.221.63.104" DISPLAY_NAME="LISTENER_10.221.63.104" ON_HOST="" EMD_URL="https://10.221.63.104:3872/emd/main/" TIMEZONE_REGION="" IDENTIFIER="TARGET_GUID=0AD03AC01B183A0E9762470BD2A4799E">
<Property NAME="Machine" VALUE="10.221.63.104"/>
<Property NAME="Port" VALUE="1521"/>
<Property NAME="ListenerOraDir" VALUE="/software/app/oracle/product/network/admin"/>
<Property NAME="OracleHome" VALUE="/software/app/oracle/product"/>
<Property NAME="LsnrName" VALUE="LISTENER"/>
</Target>
...

Depois:

[emc12@evabddrjs001 ~]$ cat $AGENT_BASE/sysman/emd/targets.xml
 ...
<Target TYPE="oracle_listener" NAME="LISTENER_10.221.63.104" DISPLAY_NAME="LISTENER_10.221.63.104" ON_HOST="" EMD_URL="https://10.221.63.104:3872/emd/main/" TIMEZONE_REGION="" IDENTIFIER="TARGET_GUID=0AD03AC01B183A0E9762470BD2A4799E">
<Property NAME="Machine" VALUE="10.221.63.104"/>
<Property NAME="Port" VALUE="1521"/>
<Property NAME="ListenerOraDir" VALUE="/software/app/oracle/product/network/admin"/>
<Property NAME="OracleHome" VALUE="/software/app/oracle/product"/>
<Property NAME="LsnrName" VALUE="LISTENER"/>
</Target>
...
[emc12@evabddrjs001 ~]$ emctl start agent
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
Starting agent .................. started.
[emc12@evabddrjs001 ~]$ vim $AGENT_BASE/sysman/emd/targets.xml
[emc12@evabddrjs001 ~]$ emctl config agent listtargets
Oracle Enterprise Manager Cloud Control 12c Release 2
Copyright (c) 1996, 2012 Oracle Corporation.  All rights reserved.
[10.221.63.104, host]
[10.221.63.104:3872, oracle_emd]
[agent12c1_2_evabddrjs001, oracle_home]
[COLISEU_104, oracle_database]
[OraDb10g_home1_1_evabddrjs001, oracle_home]
[LISTENER_10.221.63.104, oracle_listener]
[emc12@evabddrjs001 ~]$

O nome do target no cliente foi alterado. No entanto, apenas essas mudanças não são suficiente.s Se você verificar no EM, verá que o "Target name" continua o mesmo.

Agora, teremos 2 métodos diferentes com o mesmo resultado para terminar essa renomeação do target:

Método 1:

Se você tentar renomear o "Target name" como fizemos com os alvos de Repositório, você receberá o seguinte erro:

[oracle@ec12mntrjr001 ~]$ emcli rename_target -target_type="oracle_listener" -target_name="COLISEU_10.221.63.104" -new_target_name="LISTENER_10.221.63.104"
Rename not supported for given Target Type.

Esse comando chama, implicitamente, a procedure SYSMAN.EM_TARGET.RENAME_TARGET.

Infelizmente, se verificarmos o código dentro da procedure, veremos que existe o comentário:

-- we will implement rename of agent side targets when it is fully
-- supported by agent

No entanto, já fizemos essa alteração manual no nome do target do agente.

Para completar a tarefa, você precisará editar a PACKAGE BODY SYSMAN.EM_TARGET. Faça um backup do código e efetive as mudanças:

De:

     -- we will implement rename of agent side targets when it is fully
     -- supported by agent
    IF ( l_trec.manage_status = MANAGE_STATUS_MANAGED AND
         l_trec.emd_url IS NOT NULL) 
    THEN
      raise_application_error(MGMT_GLOBAL.INVALID_PARAMS_ERR,
          MGMT_GLOBAL.INVALID_PARAMS_ERR||' Not allowed') ;
    END IF ;

Para:

     -- we will implement rename of agent side targets when it is fully
     -- supported by agent
    IF ( l_trec.manage_status = MANAGE_STATUS_MANAGED AND
         l_trec.emd_url IS NOT NULL) 
    THEN
      --raise_application_error(MGMT_GLOBAL.INVALID_PARAMS_ERR,
      --    MGMT_GLOBAL.INVALID_PARAMS_ERR||' Not allowed') ;
	  null;
    END IF ;

Agora faça o recompile da package e de qualquer objeto dependente iválido::

SQL> EXEC sys.UTL_RECOMP.recomp_serial('SYSMAN');

PL/SQL procedure successfully completed.

Vamos tentar de novo. Ups, recebemos um erro:

[oracle@ec12mntrjr001 ~]$ emcli rename_target -target_type="oracle_listener" -target_name="COLISEU_10.221.63.107" -new_target_name="LISTENER_10.221.63.107"
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "SYSMAN.EM_TARGET" has been invalidated
ORA-04065: not executed, altered or dropped package body "SYSMAN.EM_TARGET"
ORA-06508: PL/SQL: could not find program unit being called: "SYSMAN.EM_TARGET"
ORA-06512: at "SYSMAN.MGMT_TARGET", line 3373
ORA-06512: at line 1

Se você recebeu este erro, apenas reconecte ou faça o resync da sessão que estava aberta antes da alteração do código da package e tente novamente:

[oracle@ec12mntrjr001 ~]$ emcli sync
Synchronized successfully
[oracle@ec12mntrjr001 ~]$ emcli rename_target -target_type="oracle_listener" -target_name="COLISEU_10.221.63.107" -new_target_name="LISTENER_10.221.63.107"
Target COLISEU_10.221.63.107 successfully renamed to LISTENER_10.221.63.107.

Ótimo. Agora recupere o código da package body original do backup que foi feito e coloque de volta a linha comentada.

Método 2:

Também existe outro caminho para trocar o nome do target dentro do metadados do OEM 12c. Nós podemos chamar diretamente a procedure que foi alterada no "Método 1":

SQL> exec sysman.em_target.rename_target('oracle_listener','COLISEU_10.221.63.104','LISTENER_10.221.63.104');

begin sysman.em_target.rename_target('oracle_listener','COLISEU_10.221.63.104','LISTENER_10.221.63.104'); end;

ORA-20233: -20233 Not allowed
ORA-06512: at "SYSMAN.EM_TARGET", line 5040
ORA-06512: at line 2

Eu recebi o erro acima porque é preciso comentar as linhas do Package Body exatamente como foi feito no "Método 1". Faça então o backup do código, comente, recompile as rependências e execute novamente:

SQL> exec sysman.em_target.rename_target('oracle_listener','COLISEU_10.221.63.104','LISTENER_10.221.63.104');

begin sysman.em_target.rename_target('oracle_listener','COLISEU_10.221.63.104','LISTENER_10.221.63.104'); end;

ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package "SYSMAN.EM_TARGET" has been invalidated
ORA-04065: not executed, altered or dropped package "SYSMAN.EM_TARGET"
ORA-06508: PL/SQL: could not find program unit being called: "SYSMAN.EM_TARGET"
ORA-06512: at line 2

Se você receber este erro, apenas reconecte ou faça o resync da sessão que estava aberta antes da alteração do código da package e tente novamente:

SQL> exec sysman.em_target.rename_target('oracle_listener','COLISEU_10.221.63.104','LISTENER_10.221.63.104');

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

SQL>

Ótimo, agora vamos verificar na tela do EM:

Tudo está funcionando bem. Não esqueça de restaurar o código original da package body com o backup que você fez, colocando de volta as linhas comentadas.

Agora finalmente o seu target foi renomeado.

Esse artigo foi escrito baseado no documento do Metalink Doc ID 1515413.1, com muitas e muitas adaptações.
 
Gostou? Não deixe de comentar ou deixar um 👍!

1 comentário

    • Reginaldo França em novembro 2, 2021 às 19:57
    • Responder

    Boa noite Rodrigo, ótimo artigo.

    Estou com uma dificuldade, você já passou por algo igual?

    Instalei o grid control 13c, e após criar um host e conectar com sucesso ao tentar configurar o alvo de banco de dados não aparece.
    Já instalei o agent com sucesso, consigo visualizar o servidor pelo grid mas não consigo acessar pelo alvo de banco de dados.

    Só consegui configurar um alvo de banco de dados no mesmo servidor onde esta o repositório do grid, mas quando tento em outro servidor, mesmo com o agent instalado e aparecendo o host no grid o banco não aparece.

    Já passou por algo parecido?

    Desde já agradeço
    Obrigado

Deixe um comentário

Seu e-mail não será publicado.