Grid and Agents – ORA-20600: The specified target is in the process of being deleted.

PROBLEMAS AL AGREGAR UNA INSTANCIA YA ELIMINADA.

(ORA-20600: The specified target is in the process of being deleted.)

Algunas de las cosas que sigo sin comprender es por que tengo que recurrir a opciones manuales cuando GRID CONTROL de oracle tiene tantas cosas automatizadas.

Una de ellas se refiere a cuando elimino un target , ya sea SINGLE o RAC, o cualquier dato como host. etc.

Cuando elimino desde GRID CONTROL o desde la ejecucion de un package, intento agregarla nuevamente y comienzan los problemas.

El error que presento en primer lugar es que me arroja GC.

TASPRO.somedomain.com:
- Connection failure may be due to a slow network, or to the presence of an intervening firewall.
Saving TASPRO.somedomain.com_TASPRO2 ...java.sql.SQLException: ORA-20600: The specified target is in the process of being deleted.(target name = TASPRO.somedomain.com)(target type = rac_database)(target guid = 5B7EF67A10D95539FD55842B846872AD)
ORA-06512: at "SYSMAN.TARGETS_INSERT_TRIGGER", line 36 ORA-04088: error during execution of trigger 'SYSMAN.TARGETS_INSERT_TRIGGER'
ORA-06512: at "SYSMAN.EM_TARGET", line 1936 ORA-06512: at "SYSMAN.MGMT_TARGET", line 2702 ORA-06512: at line 1 - ORA-20600: The specified target is in the process of being deleted.(target name = TASPRO.somedomain.com)(target type = rac_database)(target guid = 5B7EF67A10D95539FD55842B846872AD)
ORA-06512: at "SYSMAN.TARGETS_INSERT_TRIGGER", line 36 ORA-04088: error during execution of trigger 'SYSMAN.TARGETS_INSERT_TRIGGER' ORA-06512: at "SYSMAN.EM_TARGET", line 1936 ORA-06512: at "SYSMAN.MGMT_TARGET", line 2702 ORA-06512: at line 1

Bien , voy a quitarlo de la forma manual , por la linea de comando del SQLPLUS, y comienza mi sorpresa !
No se encuentra !!

SQL> exec sysman.mgmt_admin.cleanup_agent(':3872')
BEGIN sysman.mgmt_admin.cleanup_agent(':3872'); END;

*
ERROR at line 1:
ORA-20206: Target does not exist: :3872
ORA-06512: at "SYSMAN.MGMT_ADMIN", line 788
ORA-06512: at line 1

Analicemos un poco lo que esta ocurriendo.

Hay registros de esta instancia, que se encuentran en diferentes tablas del repositorio de GRIDCONTROL y que no fueron eliminados por la ejecucion del package tanto de la capa de aplicacion del producto , como de la ejecucion manual.

Entonces, nunca podremos agregar esa intancia a la consola grafica, salvo cambiando el nombre de la misma por otro.

Hay una tabla en el repositorio que nos dice las instancias que fueron eliminadas .

Y los mas importante en nuestro caso que nos brinda el GUID.

La tabla es mgmt_targets_delete.

SQL> desc sysman.mgmt_targets_delete
 Name										     Null?    Type
 ----------------------------------------------------------------------------------- -------- --------------------------------------------------------
 TARGET_NAME									     NOT NULL VARCHAR2(256)
 TARGET_TYPE									     NOT NULL VARCHAR2(64)
 TARGET_GUID									     NOT NULL RAW(16)
 EMD_URL										      VARCHAR2(1024)
 TIMEZONE_REGION									      VARCHAR2(64)
 DELETE_REQUEST_TIME									      DATE
 DELETE_COMPLETE_TIME									      DATE
 LAST_UPDATED_TIME									      DATE

Bien, cuando tiramos un query y nos retorna registros podemos trabajar con el que ya eliminamos.

Otra posibilidad es tomar del error del GUID que no arroja en el GRID CONTROL

...
Saving TASPRO.somedomain.com_TASPRO2 ...java.sql.SQLException: ORA-20600: The specified target is in the process of being deleted.(target name = TASPRO.somedomain.com)(target type = rac_database)(target guid = 5B7EF67A10D95539FD55842B846872AD)
...

TRABAJEMOS EN LA SOLUCION

Con esta query podemos averiguar si nuestra instancia esta entre los targets eliminados.

SELECT target_name, delete_complete_time, target_guid
    FROM sysman.mgmt_targets_delete
    WHERE target_type = 'oracle_emd';

Ahora en esta otra podemos buscar los GUID de las instancias eliminadas para su completo borrado del repositorio.

set line 150
set pages 100
col TARGET_NAME format a60
col TARGET_TYPE format a40
SELECT
  TARGET_GUID,
  TARGET_NAME,
  TARGET_TYPE
FROM
  SYSMAN.MGMT_TARGETS_DELETE;

Veamos un ejemplo.

SQL> set line 150
set pages 100
col TARGET_NAME format a60
col TARGET_TYPE format a40
SELECT
  TARGET_GUID,
  TARGET_NAME,
  TARGET_TYPE
FROM
  SYSMAN.MGMT_TARGETS_DELETE;SQL> SQL> SQL> SQL>   2    3    4    5    6  

TARGET_GUID			 TARGET_NAME						      TARGET_TYPE
-------------------------------- ------------------------------------------------------------ ----------------------------------------
0C48C5AE0FAFB42ED91F897FF398FC84 Management Services and Repository			      oracle_emrep
02B12E961DEA69599FB2F6990490B7CC sdat4101lx.somedomain.com_oms_csa_collector	      oracle_csa_collector
2A8309FA110086253A1C6D6DF460C4DF TESTR7 						      oracle_database
3883FB68928192C5764B281C43B5DC7A TSTR2N.somedomain.com				      oracle_database
AE8776C8A4EFDE2278E8EF7C383B2F47 TSTR2N_SDAT1010LX_sdat1010lx.somedomain.com	      oracle_listener
2599AB7549D2543B5F3E60551AD7CACA TEST_SDAT1010LX_sdat1010lx.somedomain.com	      oracle_listener
D739F5E5CAD03634460458A1ED1F1414 +ASM_sdat4103lx.somedomain.com			      osm_instance
84919D70546D0F532B6216C4189ACC32 LISTENER_SDAT1010LX_sdat1010lx.somedomain.com	      oracle_listener
6AC580566181F348968035A56D8CD75C sdat1010lx.somedomain.com 			      host
6FED8183F8C07EEA3DDE4093B9749C62 LISTENER_sdat4101lx.somedomain.com		      oracle_listener
861D54B16D650F7C008EFB4C7A59524C sdat2010lx.somedomain.com 			      host
53C04B1B71F5E4AC94F13D6E5EB8FB9F LISTENER_RMAN_sdat1010lx.somedomain.com		      oracle_listener
986B082BE7F98385B08C28B78FDB82C6 sdat1010lx.somedomain.com 			      host
DAA0BF83B3B3865C1BB0C8B1F4AC5023 PROPE.somedomain.com				      oracle_database
DB0039609F65B31409CDFB6886735E56 TESTPROPE 						      oracle_database

15 rows selected.

Con los datos obtenidos en el paso anterior podemos:

  • Ejecutar un paquete.
  • Removerlo de forma manual (Para mi fue lo mas efectivo).

Query para eliminar con paquetes.

select 'execute sysman.mgmt_admin.delete_target_internal ('''||target_name||''','''||target_type||'''); ' from sysman.mgmt_targets_delete

En el caso que las anteriores querys no hayan retornado nada, debemos tomar el GUID del error que nos arroja el GRID CONTROL, que nos fue brindada por la aplicacion a la hora de querer agregarlo nuevamente.

Definimos el GUID

DEFINE TARGET_GUID = "0C48C5AE0FAFB42ED91F897FF398FC84"

Corremos las querys que nos dice donde se encuentran todos los registros relacionados a ese GUID.

REM Or check ALL raw columns
SELECT 'SELECT COUNT(*) FROM ' || table_name || ' WHERE ' || column_name || ' = HEXTORAW(''&TARGET_GUID'');'
  FROM (
       SELECT table_name, column_name
         FROM dba_tab_columns NATURAL JOIN dba_tables
        WHERE owner = 'SYSMAN'
          AND data_type = 'RAW'
       )
/

Deleteamos los registros que estan asociados a ese GUID:

REM Or check ALL raw columns
--SELECT 'SELECT COUNT(*) FROM ' || table_name || ' WHERE ' || column_name || ' = HEXTORAW(''&TARGET_GUID'');'
  SELECT   'DELETE FROM ' || table_name || ' WHERE target_guid = HEXTORAW(''&TARGET_GUID'');'
  FROM (
       SELECT table_name, column_name
         FROM dba_tab_columns NATURAL JOIN dba_tables
        WHERE owner = 'SYSMAN'
          AND data_type = 'RAW'
       )
/

Ahora podemos agregar nuestra instancia felizmente.
Hasta la proxima !
Ate mais !
Regards !

2 thoughts on “Grid and Agents – ORA-20600: The specified target is in the process of being deleted.

  1. Buenas Noches.
    Soy un estudiante de ciclo formativo de grado superior en desarrollo de aplicaciones informáticas.
    Utilizando la herramienta de Oracle Oracle Forms developer, he desarrollado una base de datos que inicio desde Forms.
    La cuestión es que cuando compilo, supuéstamente estoy logueado en la base de datos con el nombre de usuario y contraseña (de lo contrario, no me dejaría compilar ya que las tablas y vistas pertenecen a la base de datos).
    La historia de todo esto es que tengo que “simular” una especie de login en el que cuando introduzca un usuario y un password automáticamente se me habiliten los controles.
    Mis compañeros lo que están haciendo es que ponen un usuario que se inventan y un password y comprueban sin acceder a la base de datos. Yo, por el contrario, he conseguido comprobar si existe el usuario en la base de datos. Cuando he intentado validar la contraseña, me he dado cuenta que esta está en hexadecimal. Hay alguna forma de validar mi contraseña a través de PL/SQL?
    Gracias y Un saludo!

    Like

Comments are closed.