Pular para o conteúdo
  • Este tópico contém 6 respostas, 2 vozes e foi atualizado pela última vez 9 anos, 1 mês atrás por Avatar de rmanrman.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #107815
    Avatar de MarcusMarcus
    Participante

      Boa Tarde Pessoal.

      Estou precisando de alguma forma, criar algum processo no banco de dados que gere um MD5 de um arquivo .txt de aproximadamente 500 MB.

      E em seguida escrever este MD5 em um arquivo.

      Alguém tem alguma idéa de como fazer isto?

      Meu problema maior é o volume do arquivo. Quando possuo um arquivo pequeno, já consigo realizar este processo.

      #107816
      Avatar de rmanrman
      Participante

        @Marcus

        Se o problema é tempo para gerar o MD5 creio que não dê pra fazer muita coisa. Geração de checksum eu faço através de shell script, realmente para arquivos grandes não é instantâneo.

        #107817
        Avatar de MarcusMarcus
        Participante

          Ola rman.

          Sim, hoje ja possuo uma rotina em shell script que faz isso, mas o pessoal aqui da empresa quer mudar isto, e como meu acesso é limitado, de inicio pensei em de algum modo, dentro do banco chamar este script. Sem sucesso, não encontrei nenhuma maneira.

          No momento estou desenvolvendo uma rotina em java para compilar dentro do banco e ver se rola.

          Meu problema não é tempo não.
          Se tiver alguma sugestão, serão bem vindas.

          Obrigado

          #107818
          Avatar de rmanrman
          Participante

            @Marcus

            Através do Pacote DBMS_SCHEDULER é possível chamar o shell script. Segue um exemplo:

            -- DUMP_SCHEMAS1_SCHEDULE

            BEGIN
            PKG_GUARD_SCHEDULER.PCREATE_SCHEDULE(PSCHEDULE_NAME => 'DUMP_SCHEMAS1_SCHEDULE'
            ,PSTART_DATE => SYSTIMESTAMP AT TIME ZONE 'America/Sao_Paulo'
            ,PREPEAT_INTERVAL => 'FREQ=DAILY;BYHOUR=17;BYMINUTE=0;BYSECOND=0'
            ,PEND_DATE => NULL
            ,PCOMMENTS => NULL);
            END;
            /


            -- PDUMP_SCHEMAS1

            BEGIN
            PKG_GUARD_SCHEDULER.PCREATE_PROGRAM(PPROGRAM_NAME => 'PDUMP_SCHEMAS1'
            ,PPROGRAM_TYPE => 'EXECUTABLE'
            ,PPROGRAM_ACTION => '/home/oracle/script/new/execExpdpSchemas1');
            END;
            /


            -- JDUMP_SCHEMAS1

            BEGIN
            PKG_GUARD_SCHEDULER.PCREATE_JOB(PJOB_NAME => 'JDUMP_SCHEMAS1'
            ,PPROGRAM_NAME => 'PDUMP_SCHEMAS1'
            ,PSCHEDULE_NAME => 'DUMP_SCHEMAS1_SCHEDULE');
            END;
            /

            Detalhe importante é a permissão do arquivo:


            $ chown oracle:oinstall /home/oracle/script/new/execExpdpSchemas1
            $ chmod 740 /home/oracle/script/new/execExpdpSchemas1

            Outro detalhe é as permissões para o owner do job, é necessário das seguintes permissões:
            * CREATE JOB
            * CREATE EXTENAL JOB

            #107820
            Avatar de MarcusMarcus
            Participante

              Opa.

              Ai Sim hein rman. Vou dar uma estudada nesse seu exemplo e no pacote DBMS_SCHEDULER enquanto aguardo as permissões e diretório/nomenclatura do executável.

              Depois retorno para contar como foi.

              Muito Agradecido!

              Abraço

              #107821
              Avatar de MarcusMarcus
              Participante

                rmna.

                Poderia me auxiliar?

                Desculpe a ignorância mas o que acontece é que meu processo não deve ser schedulado para rodar automaticamente.
                Ele deve ser disparado somente quando uma determinada procedure (a que gera o .txt que eu quero obter o md5) terminar sua execução.

                Sabe se tem como fazer isto?

                a ideia seria mais ou menos assim:

                START_DATE = null
                REPEAT_INTERVAL => null
                END_DATE => null

                #107822
                Avatar de rmanrman
                Participante

                  @Marcus

                  Me desculpe, nem tinha reparado, no exemplo anterior eu passei a PACKAGE que eu criei para encapsular a DBMS_SCHEDULER. Segue exemplo utilizando a DBMS_SCHEDULER diretamente.


                  BEGIN
                  DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'execExpdpSchemas1'
                  ,JOB_TYPE => 'EXECUTABLE'
                  ,JOB_ACTION => '/home/oracle/script/new/execExpdpSchemas1'
                  ,START_DATE => SYSDATE
                  ,ENABLED => TRUE
                  ,AUTO_DROP => TRUE
                  ,COMMENTS => 'execExpdpSchemas1');
                  END;

                  Será criado o JOB e será executado automaticamente e após a execução o JOB é removido. Adicione dentro da sua PROCEDURE.

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