[Cascavel-pm] Compartilhar conexão DBD::Oracle entre processos (usando XML::Twig)

Marco A P D'Andrade mdacwb em gmail.com
Sexta Abril 6 06:20:49 PDT 2007


Fala Joenio!

Assim como o Champs, eu tive problemas similares a muito tempo atras...

Lembro que minha solução foi redefinir a função de disconnect (ou auto
destroy) do DBI para evitar isso, mas na mesma situação... eu tinha um
fork explicito...

Para tirar a dúvida se este é o seu caminho, causado pelo fork uma boa
alternativa, ao meu ver é o TRACE. Algumas dicas para verificação
rápida estão descritas no DBI:

  Conceito e niveis de trace
     http://search.cpan.org/~timb/DBI-1.54/DBI.pm#TRACING

   Habilitando com o uso de variaveis de ambiente
     http://search.cpan.org/~timb/DBI-1.54/DBI.pm#DBI_TRACE


Sds,
Marco Antonio

Em 06/04/07, Luis Motta Campos<luismottacampos em yahoo.co.uk> escreveu:
> On Apr 5, 2007, at 11:28 PM, Joenio Costa wrote:
> > Olá Pessoal,
> >
> > Preciso analisar um XML e gravar os seus dados num banco Oracle, estou
>
>    Esta lista é só desgraça mesmo... ;-) XML *E* Oracle, juntos...
> ninguém merece.
>
> > utilizando XML::Twig com parametro twig_handlers para fazer o parser
> > do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita
> > memória caso eu não utilize o parametro twig_handlers. Não encontrei
> > na documentação do XML::Twig mas notei que ao utilizar esse parametro
> > é criado um processo filho, e é isto que esta causando problemas com
> > minha conexão com o Oracle.
>
>    Aqui tem um problema conceitual. Talvez seja melhor usar um parser
> incremental (DOM? SAX? Quem sabe o nome certo?), que vai armazenar
> apenas um pedaço do seu arquivo no disco, e não vai detonar a sua
> memória. Você precisa mesmo usar o XML::Twig? Ele parece ser apenas
> um toolkit construído sobre o XML::Parser, que me parece ser mais
> interessante para o seu caso...
>
> > Eu obtenho o seguinte erro ao executar algo parecido com o exemplo
> > abaixo:
> > DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on
> > communication channel (DBD ERROR: OCISessionEnd)
>
>    Você parece já ter encerrado esta conexão uma vez.
>    Pode me dar mais informação sobre este processo "extra" que você
> está vendo? Isso é estranho para mim...
>
> > --------
> >
> > use DBI;
> > use XML::Twig;
> >
> > my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass');
> > my $sth = $dbh->prepare("
> >       INSERT INTO table (col1, col2, col3)
> >       VALUES (123, ?, ?)
> > ");
> > my $twig = XML::Twig->new(
> >    twig_handlers => { PIT => sub {
> >       my ($t, $product) = @_;
> >       my $descricao = $product->first_child('pitName')->att('name');
> >       my $preco = $product->first_child('pitPrice')->att('price');
> >       $sth->bind_param(1, $descricao);
> >       $sth->bind_param(2, $preco);
> >       $sth->execute();
> >       $sth->finish();
> >       $t->purge;
> >    }}
> > );
> > $twig->parseurl('file:///home/joenio/data/produtos.xml');
> > $twig->purge;
> > $dbh->disconnect();
> >
> > -----
> >
> > Alguem já enfrentou situação parecida?
>
>    Quando eu tive este erro, tinha fork() explícito envolvido.
>    Mas faz muito tempo e muitas versões do DBI atrás.
>    Talvez isso já não seja mais a causa do seu problema.
>    Tente por favor conseguir mais informação sobre este processo
> "extra" que você mencionou.
>    Putamplexos!
>
> --
> Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
> Perl fanatic evangelist, and amateur {cook, photographer}
>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


Mais detalhes sobre a lista de discussão Cascavel-pm