Pular para o conteúdo
Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #106925
    Avatar de Thiago Duarte AzadinhoThiago Duarte Azadinho
    Participant

      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
      Avatar de Douglas Paiva de SousaDouglas Paiva de Sousa
      Participant

        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
        Avatar de rmanrman
        Participant

          @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
          Avatar de Thiago Duarte AzadinhoThiago Duarte Azadinho
          Participant

            @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
            Avatar de rmanrman
            Participant

              @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
              Avatar de caadecarvalhocaadecarvalho
              Participant

                @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.

              Viewing 6 posts - 1 through 6 (of 6 total)
              • You must be logged in to reply to this topic.
              plugins premium WordPress