lunes, 2 de enero de 2012

ORA-31634: Job Already Exists - El Trabajo ya existe

Export: Release 10.2.0.3.0
Connected to: Oracle Database 10g Enterprise Edition Release ORA-31634: job already exists
ORA-31664: unable to construct unique job name when defaulted

Este error ocurre generalmente cuando existen trabajos huérfanos de datapump que no se han limpiado de la base de datos

¿Cómo saber donde están esos trabajos?
en la vista dba_datapump_jobs se pueden visualizar (no usar las vistas gv$datapump_job que muestra los trabajos que actualmente están corriendo)

SELECT *  FROM dba_datapump_jobs
WHERE job_name NOT LIKE 'BIN$%'
AND STATE = 'NOT RUNNING'


OWNER_NAME    JOB_NAME    OPERATION    JOB_MODE    STATE        ATTACHED_SESSIONS
SYSTEM    SYS_EXPORT_FULL_01    EXPORT          FULL            NOT RUNNING        0
SYSTEM    SYS_IMPORT_FULL_01    IMPORT          FULL            NOT RUNNING        0
SYSTEM    SYS_EXPORT_FULL_02    EXPORT          FULL            NOT RUNNING        0
SYSTEM    SYS_IMPORT_SCHEMA_01    IMPORT          SCHEMA          NOT RUNNING        0


Los trabajos de datapump q se encuentren en estado NOT RUNNING, son los candidatos a limpiar

Generamos el query para eliminar Luego las tablas master del Datapump

SELECT 'Drop table ' || o.owner || '.' || object_name || ';'
  FROM dba_objects o, dba_datapump_jobs j
 WHERE o.owner = j.owner_name
   AND o.object_name = j.job_name
   AND j.job_name NOT LIKE 'BIN$%'
   AND STATE = 'NOT RUNNING'

Ejecutamos el resultado de este query

Drop table SYSTEM.SYS_EXPORT_FULL_01;
Drop table SYSTEM.SYS_IMPORT_FULL_01;
Drop table SYSTEM.SYS_EXPORT_FULL_02;
Drop table SYSTEM.SYS_IMPORT_SCHEMA_01;


y con esto quedara solucionado el inconveniente :)

8 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Buen trabajo, me ha ayudado mucho .. gracias

    Dejo esta ultima consulta que genera los script de drop.

    SELECT 'Drop table '|| o.owner||'.'||object_name ||';' SCRIPT
    FROM dba_objects o, dba_datapump_jobs j
    WHERE o.owner=j.owner_name AND o.object_name=j.job_name
    and o.owner='&SCHEMA' and j.state='NOT RUNNING' ORDER BY 4,2;

    ResponderEliminar
  3. Fabuloso - Gracias por tu Aporte!!

    ResponderEliminar
  4. Excelente, muchas gracias funciono al 100

    ResponderEliminar
  5. Y no se tiene que borrar el contenido de la tabla dba_datapump_jobs ?

    ResponderEliminar
  6. Graciaaas!!!!... Acabo de salir de mi ignorancia!!! :D

    ResponderEliminar