4 Replies Latest reply: Oct 10, 2013 9:36 AM by Clever Anjos RSS

    Melhor forma de extração do Oracle

      Olá a todos!

       

      Estou com uma demanda onde terei que ler um banco de dados relativamente grande, com informações desde 1990. Queria saber boas práticas e formas de melhorar a performance da extração dos dados do banco, sendo que a maior parte dos dados serão extraídos a cada 2 horas.

       

      Tem algum mecanismo para fazer carga incremental como na utilização de QVD's? Enfim, o que vcs puderem ajudar, ajudem, hehe...

        • Re: Melhor forma de extração do Oracle
          Ricardo Gerhard

          O importante é entender como estão estas informações de 1990, se todas podem sofrer alteração ou não.

          Se apenas o mês corrente é alterado no banco, fica simples vc realizar uma carga anual e cargas mensais.

          Outra solução seria gerar cargas incrementais somente dos dados alterados por algum campo do banco.

          É bom entender isso para poder criar uma regra definitiva e que não o tempo máximo para disponibilizar a aplicação aos usuários ou até mesmo os recursos do servidor de banco de dados.

          • Re: Melhor forma de extração do Oracle
            Clever Anjos

            pedrobarabanov, eu faria da seguinte forma

            1) Definir junto à área usuária qual o tempo que um registro pode sofrer alteração (ou ser deletado)

            2) Com este parametro implementaria uma logica para particionar os QVD´s (mensal ou até mesmo diario)

            3) Sendo assim, na implantação do projeto você extrairia todos os QVD´s e na recarga normal de produção você extrairia, por exemplo, apenas os dois últimos meses

            Segue abaixo um esboço de código

             

            SET MesesProcessar=2;  // Na implantação configure para 276 meses - 1990


            for i = $(MesesProcessar) - 1 to 0 step -1

              Let InicioMes=date(MonthStart(AddMonths(today(),-$(i) )),'YYYY-MM-DD hh:mm:ss');

              Let FimMes=date(MonthEnd(AddMonths(today(),-$(i) )),'YYYY-MM-DD hh:mm:ss');

              LET COMP= date(AddMonths(today(),-$(i) ),'YYYYMM');


              tbl:

               LOAD *;

               SQL [sua query utilizando os parametros acima];


               store tbl into meuqvd$(COMP).qvd(qvd)

               drop table tbl;

             

            next

            • Re: Melhor forma de extração do Oracle

              Então, o problema é que os dados podem ser modificados no banco e não tem data "limite", não tem como definir isso com o usuário, pois o sistema é bem volátil. Com certeza é algo errado, mas não tenho muito poder de barganha quanto a isso. Por isso o incremental fica um pouco complicado...

               

              Estou em discussão com o pessoal de TI aqui, pra entender mais o banco, só que quanto mais eu converso, mais "poréns" aparecem, hahaha...

               

              Vou tentar entender melhor e vou postando como vai ficar ao longo do projeto!

              • Re: Melhor forma de extração do Oracle
                Clever Anjos

                pedrobarabanov, meio estranho mesmo, hehe.

                De qualquer forma o script continua válido, é melhor executar várias querys e salvar em QVD´s separados.

                Normalmente recomendo não ultrapassar 100mb em cada QVD, pois pode começar a gerar problemas de I/O com arquivos muito grandes