[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