Pular para o conteúdo
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #86519
    dralves
    Participante

      Amigos,

      estou executando uma consulta via TOAD em uma tabela de 100 milhões de registro e tento salva-lá em em arquivo txt, porém durante o salvamento do arquivo aparece a seguinte mensagem “snaphot”.

      Pelo que pude averiguar junto ao DBA é que o registro que estou tentando salvar está sofrendo alteração.

      Existe alguma possibilidade de salvar este registro que está sofrendo alteração e importa-lo somente no final?

      Desde já agradeço

      #86520
      Manoel872
      Participante

        Exato o que o DBA ti informou, então faça o seguinte…. crie uma logica para pegar o maximo e o minimo valor da pk da tabela… e crie uma estrutura de loop que será executada ate o valor da variavel de controle do loop seja igual ao ao valor final… fazendo o processamendo da query de 2000 em 2000 registro.

        LOOP
        Exit when valorpkmin >= valorpkmax
        LOOP
        valorpkmin = valorpkmin + 2000;
        for i in (Select * from tabela
        where pk between valorpkmin – 2000 and valorpkmin;) loop
        end loop;
        end loop;
        end loop;

        Acho q isso deu para ter uma ideia

        #86521
        Manoel872
        Participante

          Errata:

          LOOP
          Exit when valorpkmin >= valorpkmax
          valorpkmin = valorpkmin + 2000;
          for i in (Select * from tabela
          where pk between valorpkmin – 2000 and valorpkmin) loop
          end loop;
          end loop;

          [quote=”Manoel872″:2y8qi46o]Exato o que o DBA ti informou, então faça o seguinte…. crie uma logica para pegar o maximo e o minimo valor da pk da tabela… e crie uma estrutura de loop que será executada ate o valor da variavel de controle do loop seja igual ao ao valor final… fazendo o processamendo da query de 2000 em 2000 registro.

          LOOP
          Exit when valorpkmin >= valorpkmax
          LOOP
          valorpkmin = valorpkmin + 2000;
          for i in (Select * from tabela
          where pk between valorpkmin – 2000 and valorpkmin;) loop
          end loop;
          end loop;
          end loop;

          Acho q isso deu para ter uma ideia[/quote]

          #86522
          dralves
          Participante

            Como vou saber o valorpk da minha tabela?
            Eu nã tenho esse campo na mesma.

            #86523
            Manoel872
            Participante

              Amigo,
              Conversa com DBA a melhor forma de você fazer essa exportação para txt seria fazendo um bloco anonimo em PL/SQL usando utl_file.put_line para exporta ou utilizar rotinas de export(SQL*Loader), da uma olhada no forum tem bastante informação sobre exportação.

              Att,

              Manoel Jr.

              #86524
              vieri
              Participante

                pede para o dba aumentar o undo_retention,
                temporariamente…

                #86525
                dralves
                Participante

                  Esse é o problema isso vai demorar muito e vamos gastar um dinheiro de desenvolvimento. Já dei uma olhada mais o UTL_FILE.PUT_LINE só rodam no servidor. Como eu sou usuario somente tenho acesso de leitura. Sendo assim gostaria de deixar rodando esse comando que o colega sugeriu e tentar pegar o arquivo amanhã.

                  Vocês poderiam me ajudar com essa questão? Basicamente o que eu quero é salvar o resultado do grid em um arquivo txt na minha máquina.

                  Ah estou utilizando o TOAD 7.4

                  #86528
                  CleitonHanzen
                  Participante

                    Opá..

                    Pelo que entendi vc quer gerar esse arquivo para importar posteriormente no SQL Server, certo?

                    Se for isso, utilize o Integration Services da Microsoft. Vai ser muito mais rápido e menos “custoso” do que programar para gerar um arquivo, para daí importar no SQL Server.

                    Flws.

                    #86532
                    dralves
                    Participante

                      Já tentei pelo integration services, mas não deu certo. Procurei salvar novamente a consulta e o erro persistiu. Dá uma olhada.

                      The following error has occurred:

                      ORA-01555: snapshot too old: rollback segment number 1 with name “RBS1” too small

                      #86533
                      CleitonHanzen
                      Participante

                        Opá…

                        Entaum vc vai ter de seguir a dica do outro profissional (Manoel), que é “quebrar” a tabela em quantidade menor de valores (por exemplo, separar por uma quantidade x de meses), aí ao invés de vc jogar 100milhões de linhas de um única vez para o arquivo, você vai jogando em “pedaços”, por exemplo de 1milhão em 1 milhão ou até quantidade menores.

                        Caso considerar isto impossível, converse com o seu DBA e verifique se existe algum horário da semana/final de semana que tenha menos carga no teu banco (tende a ter menos atualizações) e ainda assim solicite para ele colocar a undo_retention com valor maior.

                        #86534
                        dralves
                        Participante

                          Vc tem algum exemplo? Ele comentou de pegar o min e o max do valorpk que não entendi o que é.

                          Vc poderia me auxiliar? A consulta é essa e já faço alguns filtros.

                          SELECT ACCOUNT_ID, ACTION_ID, EXECUTION_DATE, STATUS
                          FROM ICS_E_ACTION_LAUNCHER A
                          WHERE STATUS IN (‘ACTIVE’,’OK’)
                          AND EXISTS (SELECT B.ACCOUNT_ID,MAX(B.EXECUTION_DATE)
                          FROM ICS_E_ACTION_LAUNCHER B
                          WHERE A.ACCOUNT_ID = B.ACCOUNT_ID
                          AND B.STATUS IN (‘ACTIVE’,’OK’)
                          GROUP BY B.ACCOUNT_ID HAVING MAX(B.EXECUTION_DATE) = A.EXECUTION_DATE)

                          #86565
                          dralves
                          Participante

                            Galera,

                            Consegui pegar o valor minimo e máximo do campo PK da tabela em questão. Porém o que eu estou querendo é pegar a ultima ação de cobrança para cada cliente conforme a consulta postada anteriormente.

                            Pelo que foi sugerido pelo Manoel não iria funcionar visto que estou querendo pegar a ultima ação para cada cliente.

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