This post is also available in:
Jobs órfãos do Data Pump são uma ocorrência comum em ambientes Oracle. Eles aparecem quando uma sessão de import ou export é interrompida de forma abrupta, seja por queda de conexão, kill de sessão ou falha no servidor. O Oracle cria as master tables do job no schema do usuário, mas sem um processo ativo para finalizá-las, elas ficam presas com o status NOT RUNNING.
Além de poluir a view DBA_DATAPUMP_JOBS, esses jobs podem causar conflito em execuções futuras caso o Oracle tente reutilizar o mesmo nome de job.
Diagnóstico
Consulte os jobs ativos e órfãos na view DBA_DATAPUMP_JOBS:
SELECT owner_name, job_name, operation, job_mode, state, attached_sessions
FROM dba_datapump_jobs;Output esperado com jobs órfãos:
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE ATTACHED_SESSIONS
--------------- ------------------------------ ---------- --------- ------------ -----------------
EXPORT SYS_IMPORT_TABLE_02 IMPORT TABLE NOT RUNNING 0
SYS M_IMP_COPY_1521305009006 IMPORT TABLE NOT RUNNING 0Jobs com STATE = NOT RUNNING e ATTACHED_SESSIONS = 0 são órfãos e podem ser removidos com segurança.
💡 Em ambientes RAC, a consulta é idêntica. Execute a partir de qualquer nó.
Remoção
⚠️ Confirme o
JOB_NAMEe oOWNER_NAMEantes de executar o DROP. A master table é uma tabela real no schema do usuário.
Remova as master tables correspondentes a cada job órfão:
DROP TABLE EXPORT.SYS_IMPORT_TABLE_02;
DROP TABLE SYS.M_IMP_COPY_1521305009006;Recyclebin
Se o parâmetro recyclebin estiver habilitado no banco, as tabelas vão para a lixeira em vez de serem excluídas definitivamente. Verifique:
SHOW PARAMETER recyclebin;Se o valor for ON, execute o purge explicitamente:
PURGE TABLE EXPORT.SYS_IMPORT_TABLE_02;
PURGE TABLE SYS.M_IMP_COPY_1521305009006;⚠️ Sem o purge, os jobs continuam aparecendo em
DBA_DATAPUMP_JOBSmesmo após o DROP.
Validação
Confirme que não há mais jobs órfãos:
SELECT owner_name, job_name, operation, job_mode, state, attached_sessions
FROM dba_datapump_jobs;Output esperado:
no rows selectedGerando os comandos automaticamente
Em vez de montar os comandos manualmente, use a query abaixo. Ela gera os DROP e PURGE apenas para jobs com STATE = NOT RUNNING e ATTACHED_SESSIONS = 0:
SELECT
'DROP TABLE ' || owner_name || '.' || job_name || ';' AS cmd_drop,
'PURGE TABLE ' || owner_name || '.' || job_name || ';' AS cmd_purge
FROM dba_datapump_jobs
WHERE state = 'NOT RUNNING'
AND attached_sessions = 0;Copie o output, revise os nomes e execute na sequência: todos os DROP primeiro, depois todos os PURGE.
⚠️ Não execute o output direto com
EXECUTE IMMEDIATEsem revisar. Confirme que nenhum job legítimo aparece na lista antes de prosseguir.
Resumo rápido
-- 1. Identificar jobs orfaos
SELECT owner_name, job_name, state, attached_sessions
FROM dba_datapump_jobs
WHERE state = 'NOT RUNNING';
-- 2. Remover master tables
DROP TABLE <owner>.<job_name>;
-- 3. Purge se recyclebin estiver ON
PURGE TABLE <owner>.<job_name>;
-- 4. Validar
SELECT * FROM dba_datapump_jobs;