Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

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

4 Replies
Ricardo_Gerhard
Employee
Employee

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.

Ricardo Gerhard
OEM Solution Architect
LATAM
Clever_Anjos
Employee
Employee

Pedro Barabanov de Assis, 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

Not applicable
Author

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!

Clever_Anjos
Employee
Employee

Pedro Barabanov de Assis, 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