[SP-pm] Comparando grande massa de dados

Andre Carneiro andregarciacarneiro at gmail.com
Thu May 20 11:50:26 PDT 2010


Tenho quase certeza que o teu hash não vai trabalhar mais rápido que o
índice do Oracle. Acho bem difícil.

Você não vai ter segmento de UNDO e REDO, porque você estaria carregando com
sqlldr. Não tem volta!!!! ;) Esse é um dos motivos dele ser rápido!!!!

Você pode perder desempenho se os índices não estiverem ok! Nesse caso vc
deve regerá-los. Mas isso seria apenas no momento de execução teu SELECT .

Eu tô sugerindo essas coisas, porque trabalhar diretamente com os dados,
embora bom para o aprendizedo, aumenta as chances de erros. Se vc está
trabalhando no ambiente do RDBMS, pelo menos alguns erros(principalmente no
que se refere a referências), são mais facilmente detectáveis através da
interface com o banco de dados.

Mas se você prefere fazer 'no braço', não tem problema também. Você pode
usar o módulo do CVS que eu sugeri, você pode usar diff(ordenando as
pesquisas nos dois bancos de dados, vc consegue capturar as diferenças).

diff -Bub arq_Oracle.dat arq_Sybase.dat >dedoduro.txt

Enfim, várias soluções possíveis. Se eu conseguir lembrar de mais alguma
coisa eu posto .


Cheers!




2010/5/20 Guarnieri, Carlos [ICG-IT] <carlos.guarnieri at citi.com>

>  Hallo,
>     O Otavio pegou a ideia. Eh exatamente isso que quero fazer comparar os
> hashes (e apenas inserir as PKS e hashes no banco) porque... na verdade
> tenho que comparar um arquivo txt (que vem de mainframe) com os bancos de
> dados. Os dois usam UTF-8 porque temos enderecos russos em cirilico e em
> outras formatos estranhos :p
>
> Nao quero jogar os dados todos no banco porque quero um processo rapido e
> nao quero correr o risco de exaurir a temp do banco ou segmento de rollback.
>
> Talvez o melhor seja retirar as coisas do banco e gerar os hashes em
> arquivos temporarios...
>
> Nao temos timing para comprar ferramenta especifica pra isso (e eu acho tb
> q nao compensa) e o processo tem de rodar toda semana e/ou sob demanda
> porque contem informacoes criticas de cliente (que soh podem ficar em area
> militarizada).
>
> Valew pelas dicas.  Vou acabar comparando em arquivos locais mesmo. O
> servidor de processo eh bem parrudo
>
>  ------------------------------
> *From:* saopaulo-pm-bounces+carlos.guarnieri=citi.com at pm.org [mailto:
> saopaulo-pm-bounces+carlos.guarnieri<saopaulo-pm-bounces%2Bcarlos.guarnieri>
> =citi.com at pm.org] *On Behalf Of *Andre Carneiro
> *Sent:* quinta-feira, 20 de maio de 2010 14:20
>
> *To:* saopaulo-pm at mail.pm.org
> *Subject:* Re: [SP-pm] Comparando grande massa de dados
>
>  2010/5/20 Otavio Pereira <otavio.pereira at gmail.com>
>
>> Na verdade, eu acho que entendi.
>>
>> Ele tem pks identicas nos dois bancos, então ele quer tratar o registro
>> inteiro (50+ colunas) como uma string e gerar um hash disso e então comparar
>> com os hashes obtidos no outro banco. Onde os hashs não baterem, levantará
>> um flag (a tabela dedo-duro que ele comentou) para averiguação.
>>
>>
> Eu entendi mais ou menos isso... rsrs!!! Mesmo assim não vejo porque salvar
> em arquivos. Mas se são as mesmas PKs, porque não salvar uma tabela
> temporária no banco que será sincronizado e utilizar essa tabela mesmo para
> fazer a comparação??
>
>
>> Se for isso, o único problema que vejo é qto aos charsets dos bancos e
>> caracteres extras que eles possam inserir (tipo fazer padding a direita com
>> espaços ou 0x0), sei lá.
>>
>>
> Já eu sinceramente espero que os dois bancos estejam em UTF-8. Se não
> estiver, terás que usar Encode para converter os dados antes de comparar, e
> provalemente, tabelas de conversão de caracteres.
>
> Não sei se vai ser uma boa idéia carregar hashes tão grandes na memória.
> Pode-se salvar tudo em CSV  e usar DBD::CSV para comparar, por exemplo.
>
>
>
>> Já tentei fazer isso com um banco de dados médico pra tentar diferenciar
>> homônimos, funcionou mais ou menos... mas é que tinha muitos José Silvas e
>> Marias Severinas no banco rs.
>>
>> Espero que tenha entendido certo!
>>
>>
> Entendi sim, valeu!
>
>
>> []
>> Otávio
>>
>>
>> 2010/5/20 Andre Carneiro <andregarciacarneiro at gmail.com>
>>
>> Nossa! Q confusão!
>>>
>>> Deixa eu ver se entendi:
>>>
>>> 1) Você quer sincronizar uma base Oracle com uma Sybase(vice-versa???);
>>> 2) Se vc já vai carregar coisas com o sqlldr numa tabela temporária, já
>>> na base de produção, pra que vc precisa de hashes??? Não entendi. Se os
>>> dados já estão lá, compara com a tabela em produção diretamente com SQL,
>>> procedures etc...(se eu estiver falando besteira, pode me xingar);
>>> 3)Você já pensou em utilizar alguma ferramenta de migração de dados ? Se
>>> isso é crítico no seu trabalho, talvez(só uma sugestão) uma solução pronta
>>> possa resolver de maneira mais efetiva( não sei se resolve, mas vi essa
>>> aqui:
>>> http://www.swissql.com/products/oracle-to-sybase/oracle-to-sybase.html);
>>>
>>>
>>> Cheers!
>>>
>>>
>>>
>>> 2010/5/20 Guarnieri, Carlos [ICG-IT] <carlos.guarnieri at citi.com>
>>>
>>>  o problema eh q teria de lidar com o sqldr (oracle) e o bcpin (sybase).
>>>> Nao posso usar base de teste; apenas prod 2 prod. Os arquivos vem de
>>>> mainframe. Preciso comparar conteudo de campos para garantir que estejam em
>>>> sincronia (nao.. nao tem um lastUpdateDate....) Sao dados sensiveis de
>>>> companhias que tem permissao do FED para transferir certas quantias...
>>>>
>>>> Aqui esta uma ideia:
>>>>
>>>>     1) pego o arquivo e usando a PK dele (um codigo unico e
>>>> obrigatorio, global da empresa no FED) gero um hash pros campos que quero
>>>> comparar
>>>>         carrego esse arquivo no dbms  que quero fazer comparacao
>>>> (usando sqldr / bcpin) - talvez de 300 em 300 mil
>>>>         (hj o cadastro eh mais de 1 milhao mas continua crescendo. nao
>>>> posso correr o risco de enche a temp do banco)
>>>>     1.1) pros IDS carregados gero em outra tabela temporaria os hashes
>>>> dos registros que ja estavam no dbms e comparo os hashes.
>>>>     1.2) Os IDS que tem hashes separados vao pra minha tabela dedo duro
>>>> dos registros fora de sync.
>>>>     1.3) limpa a tabela dos hashes e repete 1.1 e 1.2 ateh o final do
>>>> arquivo
>>>>     1.4) manda os arquivos fora de sync pro mainframe, apaga as temp,
>>>>     1.5) cd /pub; more beer;  while(true) do; sleep; done
>>>>
>>>> razoavel?
>>>>
>>>>
>>>>
>>>>
>>>>  ------------------------------
>>>>  *From:* saopaulo-pm-bounces+carlos.guarnieri=citi.com at pm.org [mailto:
>>>> saopaulo-pm-bounces+carlos.guarnieri<saopaulo-pm-bounces%2Bcarlos.guarnieri>
>>>> =citi.com at pm.org] *On Behalf Of *Andre Carneiro
>>>> *Sent:* quinta-feira, 20 de maio de 2010 08:41
>>>>
>>>> *To:* saopaulo-pm at mail.pm.org
>>>> *Subject:* Re: [SP-pm] Comparando grande massa de dados
>>>>
>>>>   Existe o sqlldr para Oracle(mas você já sabia disso :D). Ele serve
>>>> exatamente para carregar grandes quantidades de dados rapidamente.
>>>>
>>>> Existem alguns módulos para manipular e executar cargas de dados no
>>>> CPAN, utilizando o SQLLoader. O que eu achei mais simples foi esse aqui:
>>>>
>>>>
>>>> http://search.cpan.org/~ezra/Oracle-SQLLoader-0.9/lib/Oracle/SQLLoader.pm<http://search.cpan.org/%7Eezra/Oracle-SQLLoader-0.9/lib/Oracle/SQLLoader.pm>
>>>>
>>>> O problema é que não é atualizado desde 2006!!!
>>>>
>>>>
>>>>
>>>> 2010/5/19 Guarnieri, Carlos [ICG-IT] <carlos.guarnieri at citi.com>
>>>>
>>>>>  entao... sao oracle e sybase... mas como os arquivos sao grandes to
>>>>> com medo de joga pro banco.
>>>>>
>>>>
>>>> Deixe disso! Faça muitos testes em tabelas temporárias(se possível em
>>>> uma base de testes), e seja feliz!
>>>>
>>>>
>>>>> Tava pensando mais em pegar os dados e comparar no unix...
>>>>>
>>>>>
>>>>
>>>> Que tipo de comparação?
>>>>
>>>>
>>>>
>>>>>  o q acham?
>>>>>
>>>>
>>>> Não sei, mais detalhes por favor(se possível)!!!
>>>>
>>>>
>>>>
>>>>>
>>>>>  ------------------------------
>>>>> *From:* saopaulo-pm-bounces+carlos.guarnieri=citi.com at pm.org [mailto:
>>>>> saopaulo-pm-bounces+carlos.guarnieri<saopaulo-pm-bounces%2Bcarlos.guarnieri>
>>>>> =citi.com at pm.org] *On Behalf Of *Andre Carneiro
>>>>> *Sent:* quarta-feira, 19 de maio de 2010 18:09
>>>>> *To:* saopaulo-pm at mail.pm.org
>>>>> *Subject:* Re: [SP-pm] Comparando grande massa de dados
>>>>>
>>>>>
>>>>>
>>>>> Em 19 de maio de 2010 17:39, Guarnieri, Carlos [ICG-IT] <
>>>>> carlos.guarnieri at citi.com> escreveu:
>>>>>
>>>>>> Pessoal,
>>>>>> Preciso fazer a reconciliacao de um banco de dados. Essa reconciliacao
>>>>>> tera de rodar automatica todo final de semana para garantir que alguns
>>>>>> sistemas estejam em sync. Não temos poder sobre o formato do arquivo que
>>>>>> vamos receber, mas terei de comparar com algumas tabelas em nosso banco de
>>>>>> dados.
>>>>>>
>>>>>> Enfim temos umas 50 colunas (algumas de endereco [char 64] / mas a
>>>>>> maioria char 20]) e mais de 1 milhao de registros. Entao não quero fazer um
>>>>>> sqlload em nosso banco para comparar via banco.
>>>>>> Alguem tem alguma sugestao interessante de como comparar esses dados?
>>>>>> Criar tabela de espalhamento e testar um contra outro, exportar o banco no
>>>>>> mesmo formato do arquivo e fazer diff no unix (:d)...
>>>>>>
>>>>>> Sugestoes são bem vindas.
>>>>>>
>>>>>>
>>>>> Certo!
>>>>>
>>>>> 1) qual RDBMS você está usando (Postgres, Oracle, SQLServer, MySQL) ?;
>>>>>
>>>>> 2) Você mencionou sqlload. Então eu suponho que vc vai ter que
>>>>> transformar os dados no formato que o sqlload aceita. Se for isso, você pode
>>>>> usar templates, por exemplo. Um template para cada arquivo recebido com
>>>>> formato específico, e alguns módulos que receberão os dados e usarão os
>>>>> templates para formatá-los corretamente;
>>>>>
>>>>> 3) Exitem módulos para você trabalhar com o sqlload no CPAN. Sugiro que
>>>>> você dê uma procurada e posta o RDBMS que vc está usando para que nós
>>>>> possamos sugerir algum módulo para você;
>>>>>
>>>>>
>>>>>
>>>>> Cheers!
>>>>>
>>>>>
>>>>>>
>>>>>> Valew
>>>>>> _______________________________________________
>>>>>> SaoPaulo-pm mailing list
>>>>>> SaoPaulo-pm at pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> André Garcia Carneiro
>>>>> Analista/Desenvolvedor Perl
>>>>> (11)82907780
>>>>>
>>>>> _______________________________________________
>>>>> SaoPaulo-pm mailing list
>>>>> SaoPaulo-pm at pm.org
>>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> André Garcia Carneiro
>>>> Analista/Desenvolvedor Perl
>>>> (11)82907780
>>>>
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm at pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>
>>>
>>>
>>>
>>> --
>>> André Garcia Carneiro
>>> Analista/Desenvolvedor Perl
>>> (11)82907780
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
> (11)82907780
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
(11)82907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100520/7994bc77/attachment-0001.html>


More information about the SaoPaulo-pm mailing list