Pular para o conteúdo

Fóruns Banco de dados Oracle ORA-00001: restrição exclusiva (SYS.I_JOB_JOB) vio ORA-00001: restrição exclusiva (SYS.I_JOB_JOB) vio

#108492
Avatar photoJosé Laurindo Chiappa
Moderador

    Bom, vou me meter, xo ver se consigo te ajudar – seguinte, tudo dentro de um database Oracle (uma tabela, um índice, um job de banco, enfim, qualquer Objeto que vc vá criar dentro dum banco) é guardado em tabelas internas Oracle, E ao mesmo tempo possui um OBJECT_ID, um Identificador, uma CHAVE Interna… Muito bem : para alguns objetos (por exemplo, TABELAS e ÍNDICES), o comando de criação do objeto (um CREATE TABLE, digamos, ou um CREATE INDEX, o que for) já vai dar pro objeto um ID completamente novo, mas para outros (é o caso de DATABASE JOBS, por exemplo, que são criados por esse DBMS_IJOB.SUBMIT aí – ESSA é a função dele, ok ?) é você que tem que indicar o ID na hora da criação… OKDOC ??? Consulte o manual de DBA Oracle da sua versão no capítulo sobre JOBs que vc encontra refs sobre isso…

    O seu problema está CLARO, então : coincidentemente vc já tinha um outro objeto (JOB, provavelmente) criado no banco de destino com esse mesmo ID 340 que o job ganhou lá no banco origem, E o import normalmente tenta criar JOBs chamando o DBMS_IJOB ** exatamente o mesmo ** OBJECT_ID que veio do banco-origem..

    A solução é SIMPLES, seria vc recriar o job passando um outro ID que não esteja em uso pra rotina de criação de jobs : vc conecta no banco-destino (usando a ferramenta de conexão que quiser, sqlplus, SQL Developer, TOAD, o que vc tiver/puder/quiser), logando com um usuário que ** tenha o privilégio ** necessário (pode ser o SYS), busca o próximo OBJECT_ID posterior ao último usado nesse banco e executa a rotina de criação passando esse OBJECT_ID que vc sabe que está sem uso… O código pra isso seria mais ou menos tipo :

    DECLARE
    v_object_id number;
    BEGIN
    SELECT MAX(OBJECT_ID)+1 INTO v_object_id FROM DBA_OBJECTS;
    SYS.DBMS_IJOB.SUBMIT( JOB=> v_object_id, LUSER=> ‘PACAJUS_PROD’, PUSER=> ‘PACAJUS_PROD’, CUSER=> ‘PACAJUS_PROD’,
    NEXT_DATE=> TO_DATE(‘2016-10-04 00:00:00’, ‘YYYY-MM-DD:HH24:MI:SS’),
    INTERVAL=> ‘TRUNC(SYSDATE) + 1’, BROKEN=> FALSE, WHAT=> ‘GSH_DESAB_USUARIO_TEMPO_ACESSO;
    END;

    ===> SE a tal rotina ‘GSH_DESAB_USUARIO_TEMPO_ACESSO’ foi importada certinho E SE o tal usuário PACAJUS_PROD foi criado ok (confira isso no banco-destino), deve ser esse aqui o procedimento de Correção da falha de importação do tal job….

    []s

    Chiappa