<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.3660" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>Hallo,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>&nbsp;&nbsp;&nbsp; O&nbsp;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</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>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.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>Talvez o melhor seja retirar as coisas do banco e gerar os 
hashes em arquivos temporarios...</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>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).</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=528442617-20052010><FONT face=Arial 
color=#0000ff size=2>Valew pelas dicas.&nbsp; Vou acabar comparando em arquivos 
locais mesmo. O servidor de processo eh bem parrudo</FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> 
saopaulo-pm-bounces+carlos.guarnieri=citi.com@pm.org 
[mailto:saopaulo-pm-bounces+carlos.guarnieri=citi.com@pm.org] <B>On Behalf Of 
</B>Andre Carneiro<BR><B>Sent:</B> quinta-feira, 20 de maio de 2010 
14:20<BR><B>To:</B> saopaulo-pm@mail.pm.org<BR><B>Subject:</B> Re: [SP-pm] 
Comparando grande massa de dados<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV class=gmail_quote>2010/5/20 Otavio Pereira <SPAN dir=ltr>&lt;<A 
href="mailto:otavio.pereira@gmail.com">otavio.pereira@gmail.com</A>&gt;</SPAN><BR>
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Na 
  verdade, eu acho que entendi.<BR><BR>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.<BR><BR></BLOCKQUOTE>
<DIV><BR>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??<BR>&nbsp;</DIV>
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">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á. <BR><BR></BLOCKQUOTE>
<DIV><BR>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.<BR><BR>Não sei se vai ser uma 
boa idéia carregar hashes tão grandes na memória. Pode-se salvar tudo em 
CSV&nbsp; e usar DBD::CSV para comparar, por exemplo.<BR><BR>&nbsp;</DIV>
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">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.<BR><BR>Espero que tenha entendido certo! 
<BR><BR></BLOCKQUOTE>
<DIV><BR>Entendi sim, valeu!<BR>&nbsp;</DIV>
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">[]<BR 
  clear=all>Otávio<BR><BR><BR>
  <DIV class=gmail_quote>2010/5/20 Andre Carneiro <SPAN dir=ltr>&lt;<A 
  href="mailto:andregarciacarneiro@gmail.com" 
  target=_blank>andregarciacarneiro@gmail.com</A>&gt;</SPAN>
  <DIV>
  <DIV></DIV>
  <DIV class=h5><BR>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Nossa! 
    Q confusão!<BR><BR>Deixa eu ver se entendi: <BR><BR>1) Você quer sincronizar 
    uma base Oracle com uma Sybase(vice-versa???);<BR>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);<BR>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: <A 
    href="http://www.swissql.com/products/oracle-to-sybase/oracle-to-sybase.html" 
    target=_blank>http://www.swissql.com/products/oracle-to-sybase/oracle-to-sybase.html</A> 
    );<BR><BR><BR>Cheers!<BR><BR><BR><BR>
    <DIV class=gmail_quote>2010/5/20 Guarnieri, Carlos [ICG-IT] <SPAN 
    dir=ltr>&lt;<A href="mailto:carlos.guarnieri@citi.com" 
    target=_blank>carlos.guarnieri@citi.com</A>&gt;</SPAN>
    <DIV>
    <DIV></DIV>
    <DIV><BR>
    <BLOCKQUOTE class=gmail_quote 
    style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
      <DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff size=2>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...</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff size=2>Aqui 
      esta uma ideia:</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial><FONT 
      color=#0000ff size=2>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</FONT></FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT face=Arial color=#0000ff size=2>carrego&nbsp;esse arquivo no 
      dbms&nbsp; que quero fazer comparacao (usando sqldr / bcpin) - talvez de 
      300 em 300 mil </FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN></SPAN><SPAN><FONT face=Arial color=#0000ff 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (hj o cadastro eh mais 
      de 1 milhao mas continua crescendo. nao posso correr o risco de enche a 
      temp do banco)</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial><FONT 
      color=#0000ff size=2>1.1) pros IDS carregados gero em outra tabela 
      temporaria os hashes dos registros que ja estavam no dbms e comparo os 
      hashes. </FONT></FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial><FONT 
      color=#0000ff size=2>1.2) Os IDS que tem hashes separados vao pra minha 
      tabela dedo duro dos registros fora de sync.</FONT></FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial 
      color=#0000ff size=2>1.3) limpa a tabela dos hashes e repete 1.1 e 1.2 
      ateh o final do arquivo</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial 
      color=#0000ff size=2>1.4) manda os arquivos fora de sync pro mainframe, 
      apaga as temp,</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; <FONT face=Arial 
      color=#0000ff size=2>1.5) cd /pub; more beer;&nbsp; while(true) do; sleep; 
      done</FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2>razoavel? </FONT></SPAN></DIV>
      <DIV dir=ltr align=left><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
      size=2></FONT></SPAN>&nbsp;</DIV>
      <DIV lang=en-us dir=ltr align=left>
      <HR>
      <FONT face=Tahoma size=2>
      <DIV><B>From:</B> saopaulo-pm-bounces+carlos.guarnieri=<A 
      href="http://citi.com" target=_blank>citi.com</A>@<A href="http://pm.org" 
      target=_blank>pm.org</A> [mailto:<A 
      href="mailto:saopaulo-pm-bounces%2Bcarlos.guarnieri" 
      target=_blank>saopaulo-pm-bounces+carlos.guarnieri</A>=<A 
      href="http://citi.com" target=_blank>citi.com</A>@<A href="http://pm.org" 
      target=_blank>pm.org</A>] <B>On Behalf Of </B>Andre 
      Carneiro<BR></DIV><B>Sent:</B> quinta-feira, 20 de maio de 2010 08:41
      <DIV>
      <DIV></DIV>
      <DIV><BR><B>To:</B> <A href="mailto:saopaulo-pm@mail.pm.org" 
      target=_blank>saopaulo-pm@mail.pm.org</A><BR><B>Subject:</B> Re: [SP-pm] 
      Comparando grande massa de dados<BR></DIV></DIV></FONT><BR></DIV>
      <DIV>
      <DIV></DIV>
      <DIV>
      <DIV></DIV>Existe o sqlldr para Oracle(mas você já sabia disso :D). Ele 
      serve exatamente para carregar grandes quantidades de dados 
      rapidamente.<BR><BR>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:<BR><BR><A 
      href="http://search.cpan.org/%7Eezra/Oracle-SQLLoader-0.9/lib/Oracle/SQLLoader.pm" 
      target=_blank>http://search.cpan.org/~ezra/Oracle-SQLLoader-0.9/lib/Oracle/SQLLoader.pm</A><BR><BR>O 
      problema é que não é atualizado desde 2006!!! <BR><BR><BR><BR>
      <DIV class=gmail_quote>2010/5/19 Guarnieri, Carlos [ICG-IT] <SPAN 
      dir=ltr>&lt;<A href="mailto:carlos.guarnieri@citi.com" 
      target=_blank>carlos.guarnieri@citi.com</A>&gt;</SPAN><BR>
      <BLOCKQUOTE class=gmail_quote 
      style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
        <DIV>
        <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
        size=2>entao... sao oracle e sybase... mas como os arquivos sao grandes 
        to com medo de joga pro banco.</FONT></SPAN></DIV></DIV></BLOCKQUOTE>
      <DIV><BR>Deixe disso! Faça muitos testes em tabelas temporárias(se 
      possível em uma base de testes), e seja feliz!<BR><BR></DIV>
      <BLOCKQUOTE class=gmail_quote 
      style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
        <DIV>
        <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
        size=2></FONT></SPAN>&nbsp;</DIV>
        <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff size=2>Tava 
        pensando mais em pegar os dados e comparar no 
unix...</FONT></SPAN></DIV>
        <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff 
        size=2></FONT></SPAN>&nbsp;</DIV></DIV></BLOCKQUOTE>
      <DIV><BR>Que tipo de comparação?<BR><BR>&nbsp;</DIV>
      <BLOCKQUOTE class=gmail_quote 
      style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
        <DIV>
        <DIV dir=ltr align=left><SPAN><FONT face=Arial color=#0000ff size=2>o q 
        acham?</FONT></SPAN></DIV></DIV></BLOCKQUOTE>
      <DIV><BR>Não sei, mais detalhes por favor(se 
      possível)!!!<BR><BR>&nbsp;</DIV>
      <BLOCKQUOTE class=gmail_quote 
      style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
        <DIV><BR>
        <DIV lang=en-us dir=ltr align=left>
        <HR>
        <FONT face=Tahoma size=2><B>From:</B> 
        saopaulo-pm-bounces+carlos.guarnieri=<A href="http://citi.com" 
        target=_blank>citi.com</A>@<A href="http://pm.org" 
        target=_blank>pm.org</A> [mailto:<A 
        href="mailto:saopaulo-pm-bounces%2Bcarlos.guarnieri" 
        target=_blank>saopaulo-pm-bounces+carlos.guarnieri</A>=<A 
        href="http://citi.com" target=_blank>citi.com</A>@<A 
        href="http://pm.org" target=_blank>pm.org</A>] <B>On Behalf Of </B>Andre 
        Carneiro<BR><B>Sent:</B> quarta-feira, 19 de maio de 2010 
        18:09<BR><B>To:</B> <A href="mailto:saopaulo-pm@mail.pm.org" 
        target=_blank>saopaulo-pm@mail.pm.org</A><BR><B>Subject:</B> Re: [SP-pm] 
        Comparando grande massa de dados<BR></FONT><BR></DIV>
        <DIV>
        <DIV></DIV>
        <DIV>
        <DIV></DIV><BR><BR>
        <DIV class=gmail_quote>Em 19 de maio de 2010 17:39, Guarnieri, Carlos 
        [ICG-IT] <SPAN dir=ltr>&lt;<A href="mailto:carlos.guarnieri@citi.com" 
        target=_blank>carlos.guarnieri@citi.com</A>&gt;</SPAN> escreveu:<BR>
        <BLOCKQUOTE class=gmail_quote 
        style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Pessoal,<BR>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.<BR><BR>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.<BR>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)...<BR><BR>Sugestoes são bem vindas.<BR><BR></BLOCKQUOTE>
        <DIV><BR>Certo! <BR><BR>1) qual RDBMS você está usando (Postgres, 
        Oracle, SQLServer, MySQL) ?;<BR><BR>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;<BR><BR>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ê;<BR><BR><BR><BR>Cheers!<BR>&nbsp;</DIV>
        <BLOCKQUOTE class=gmail_quote 
        style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid"><BR>Valew<BR>_______________________________________________<BR>SaoPaulo-pm 
          mailing list<BR><A href="mailto:SaoPaulo-pm@pm.org" 
          target=_blank>SaoPaulo-pm@pm.org</A><BR><A 
          href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" 
          target=_blank>http://mail.pm.org/mailman/listinfo/saopaulo-pm</A><BR></BLOCKQUOTE></DIV><BR><BR 
        clear=all><BR>-- <BR>André Garcia Carneiro<BR>Analista/Desenvolvedor 
        Perl<BR>(11)82907780<BR></DIV></DIV></DIV><BR>_______________________________________________<BR>SaoPaulo-pm 
        mailing list<BR><A href="mailto:SaoPaulo-pm@pm.org" 
        target=_blank>SaoPaulo-pm@pm.org</A><BR><A 
        href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" 
        target=_blank>http://mail.pm.org/mailman/listinfo/saopaulo-pm</A><BR></BLOCKQUOTE></DIV><BR><BR 
      clear=all><BR>-- <BR>André Garcia Carneiro<BR>Analista/Desenvolvedor 
      Perl<BR>(11)82907780<BR></DIV></DIV></DIV><BR>_______________________________________________<BR>SaoPaulo-pm 
      mailing list<BR><A href="mailto:SaoPaulo-pm@pm.org" 
      target=_blank>SaoPaulo-pm@pm.org</A><BR><A 
      href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" 
      target=_blank>http://mail.pm.org/mailman/listinfo/saopaulo-pm</A><BR></BLOCKQUOTE></DIV></DIV></DIV>
    <DIV>
    <DIV></DIV>
    <DIV><BR><BR clear=all><BR>-- <BR>André Garcia 
    Carneiro<BR>Analista/Desenvolvedor 
    Perl<BR>(11)82907780<BR></DIV></DIV><BR>_______________________________________________<BR>SaoPaulo-pm 
    mailing list<BR><A href="mailto:SaoPaulo-pm@pm.org" 
    target=_blank>SaoPaulo-pm@pm.org</A><BR><A 
    href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" 
    target=_blank>http://mail.pm.org/mailman/listinfo/saopaulo-pm</A><BR></BLOCKQUOTE></DIV></DIV></DIV><BR><BR>_______________________________________________<BR>SaoPaulo-pm 
  mailing list<BR><A 
  href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</A><BR><A 
  href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" 
  target=_blank>http://mail.pm.org/mailman/listinfo/saopaulo-pm</A><BR></BLOCKQUOTE></DIV><BR><BR 
clear=all><BR>-- <BR>André Garcia Carneiro<BR>Analista/Desenvolvedor 
Perl<BR>(11)82907780<BR></BODY></HTML>