Pular para o conteúdo
  • Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 11 anos, 5 meses atrás por caadecarvalho.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #106925
    Thiago Duarte Azadinho
    Participante

      Pessoal,

      Precisamos fazer uma carga via insert num banco oracle que esta em noarchivelog, pensei na alternativa(uma das!!) de colocar as tabelas em modo nologging e depois da carga concluida, volta-las para logging, teria algum ganho de tempo ja que o banco esta em noarchivelog? (Que foi uma outra opção encontrada)

      Obrigado.

      #106927
      Douglas Paiva de Sousa
      Participante

        Em primeiro lugar, eu te aconselho a colocar o banco em modo archive, embora ele não venha com isso habilitado por default, não há nenhuma razão para utilizar-se do banco neste modo, você não ganha nada em performance e menos ainda em segurança, pois perde a capacidade de ter backups HOT usar tecnologias de flashback entre outros.

        Já com relação ao esse seu processo de insert massivo te aconselho a faze-lo utilizando BULK COLLECT, dá uma olhada neste artigo, eu já utilizei isso na prática e funciona bem e é performático.

        http://www.oracle-base.com/articles/9i/bulk-binds-and-record-processing-9i.php

        Att,
        Douglas Paiva de Sousa
        douglas.paiva@oradata.com.br
        http://www.oradata.com.br

        #106930
        rman
        Participante

          @Thiago Duarte Azadinho

          Se isso for uma solução pontual de manutenção, em outras palavras, isso não for uma funcionalidade de sistema, e que não precisar ser automatizado, utilize o SQL LOADER para fazer a carga.

          #106933
          Thiago Duarte Azadinho
          Participante

            @rman

            Desculpa mas acho que me expressei mal, na verdade quando disse carga não seria de uma arquivo externo, então acho que o Loader não rola, seriam de tabelas ja existentes no banco e que seriam tratados dados e feitos inserts massivos em outras tabelas, porém um trabalho unico e pontual, uma manutenção. Dai a idéia do nologging, tiramos o banco de archive somente para ajudar na performance e depois de feito o trabalho voltariamos o archive. Será que se colocarmos essas tabelas em nologging ajudaria mais na performance?

            Obrigado.

            #106935
            rman
            Participante

              @Thiago Duarte Azadinho

              Creio que o SQL Loader ainda será muito mais rápido do que qualquer bloco de INSERT. Além do mais, é possível fazer a carga por direct path.

              Segue documentação oficial:

              http://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_concepts.htm#SUTIL994

              Quantos registros tem a tabela que vai receber a carga?

              Quantos registros tem a carga?

              Quanto tempo leva a carga hoje sem fazer nenhuma otimização?

              Se realmente o tempo hoje é absurdo, e você ainda precisa baixar o tempo de carga, você pode desabilitar as constraints de FK e remover os INDEXES, e recria-los depois da carga.

              Faça um arquivo no formato do SQL LOADER e depois faça a importação.

              Alterar o DATABASE para NOARCHIVELOG para diminuir o tempo de carga creio que não seja motivo suficiente para ser fazer. Durante o processo de carga o seu DATABASE está desprotegido.

              #107002
              caadecarvalho
              Participante

                @Thiago Duarte Azadinho,

                Utilize NOLOGGING nas tabelas e mantenha o banco em NOARCHIVELOG durante a carga, entenda que esta recomendação de manter o banco neste estado deverá permanecer apenas durante a carga. Por vias de recuperabilidade, mantenha o banco em modo ARCHIVE.

                Se a carga é a partir de uma tabela, faça-a com INSERT AS SELECT usando o hint APPEND para utilizar de DIRECT PATH e, se o hardware permitir, habilite paralelismo para DML na sessão. Desabilite os índices e constraints e habilite tudo no final da carga.

                Entenda que o modo NOARCHIVELOG apenas trará beneficio perceptível se você estiver efetuando uma carga massiva no SGBD, pois não haverá I/O para gerar os archived logs, os checkpoints nos controlfiles diminuem, e etc.

                Abraços.

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