Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 7 anos, 11 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #108487
    Avatar de Iago LourinhoIago Lourinho
    Participante

      Bom dia, senhores

      Alguma bênção pode me ajudar a resolver esse erro na hora da importação do dump:
      ORA-39083: Tipo de objeto JOB falhou ao ser criado com o erro:
      ORA-00001: restrição exclusiva (SYS.I_JOB_JOB) violada
      O código sql com falha é:
      BEGIN
      SYS.DBMS_IJOB.SUBMIT( JOB=> 340, 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;

      O MESMO NÃO CONSEGUER SER CRIADO NA IMPORTAÇÃO DO DUMP,SE POSSIVEL ALGUEM ME AJUDAR A RESOLVER OU TER UMA SOLUÇÃO PRA ESSE PROBLEMAS EU SEREI MUITO GRATO.

      OBRIGDO.

      #108488
      Avatar de rmanrman
      Participante

        @Iago Lourinho


        BEGIN
        SYS.DBMS_IJOB.SUBMIT( JOB=> 340, 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;

        Creio que o job 340 já existe nesse banco de dados.

        #108489
        Avatar de Iago LourinhoIago Lourinho
        Participante

          Irmão, Muito Obrigado eu verifiquei aqui é realmente o job existe.

          Irmão se não for incomodo pode me explicar como funciona esse SYS.DBMS_IJOB.SUBMIT.

          #108491
          Avatar de rmanrman
          Participante

            @Iago Lourinho

            Esse PROCEDURE cria o job de acordo com os parâmetros.

            #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
              
              #108493
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Hmmm… Olhando a minha resposta, Xô fazer uma correçãozinha de segurança nesse código : pra mais segurança, ao invés de assignar um ID geral, busque nesse banco qual o último ID assignado para um JOB de banco : troque o trecho :

                SELECT MAX(OBJECT_ID)+1 INTO v_object_id FROM DBA_OBJECTS;

                por :

                SELECT MAX(JOB)+1 INTO v_object_id FROM DBA_JOBS;

                Sacomé, Segurança em primeiro lugar…

                []s

                Chiappa

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress