[Cascavel-pm] Perl DBI -> Access
Luciano Giordani Bassani
lgbassani em terra.com.br
Terça Abril 11 05:42:31 PDT 2006
Olá!
Eu tenho uma sistema em mysql, que uma parte dos dados é alimentado pelo
MS Access. Para fazer a replicação dos dados eu uso scripts em Perl
usando o OLEDB 4.0 por meio do ADO (o script roda em uma máquina
windows) e foi onde eu consegui a melhor performance.
Sinceramente não acho que tu vais conseguir bons resultados acessando o
MS Access do GNU/Linux. Não sei como isso está agora, mas na época que
eu fiz a pesquisa para implementar os scripts de replicação de dados, eu
desisti de usar o Linux depois de tentar varias maneiras.
O grande problema do MS Access é que ele não é um SGDB, mas sim um
grande arquivo texto-proprietário. Isso tem algumas vantagens e muitas
desvantages.
Entre as desvantagens, posso citar: gera um tráfego gigantesco na rede,
quando existe mais de uma máquina cliente acessando a base de dados
(quando esta base de dados está grande), o sistema se torna vunerável a
possíveis corrupções, pois reina uma anarquia controlada (toda as
máquinas metem a mão na base de dados, mas ninguém controla isso de
fato), as tuas dores de cabeça em gerenciar o MS Access aumetam
geometricamente conforme o número de máquinas clientes aumenta.
Existem vantagens também, como por exemplo, uma consulta única é
infinitamente mais rápida nele. Quando se usa vários clientes acessando
a base de dados, vc tem um sistema com processamento distribuído (mas
haja banda de rede para dar suporte a isso), etc.
Bom, agora vamos aos fatos:
Na época que eu tentei acessar direto um banco de dados em Access pelo
Linux eu não consegui, pois o GNU/Linux não sabe ler os arquivos do MS
Access, mesmo que tu tenha um ODBC instalado na máquina, não vai
adiantar de nada, pois vc vai precisar de algum programa que consiga ler
isso. O oledb, o ado, etc são implementações que só rodam no Windows,
por isso a interface DBI deles não vão funcionar no GNU/Linux. Talvez tu
até consiga fazer isso rodar via wine ou usando alguma ferramenta
proprietária, mas tu vai perder tempo com algo que não vale a pena.
Em relação a acessar remotamente esta base de dados, também não vai ser
possível, pois o MS Access não é um SGDB. Tu até vai conseguir
configurar o ODBC na máquina Windows onde está a tua base de dados, mas
tu vai ver que não existe nenhum parâmetro para vc conseguir acessar
esta base de dados externamente.
Contudo a tua tarefa não é impossível. Eu diria que existem 3 maneiras
de tu fazer isso de forma satisfatória, sem ficar careca:
1 - Tu implementar uma base de dados na tua máquina GNU/Linux (pode ser
mysql, postgresql, o que tu quiser) e fazer replicação dos dados do MS
Access para ela (e vice-e-versa) usando scripts em perl ou qualquer
outra ferramente de replicação que permita isso. Eu uso este método e
funciona bem, mas requer que tu faça um controle diferenciado, como por
exemplo criar tabelas de saída de dados ou implementar um sistema de
auditoria para saber qual dado deve ser replicado para onde.
2 - Implementar um servidor web na tua máquina windows (de preferência
Apache ;-) ) e colocar todos os teus scripts Perl de manipulação de
dados lá. Esta é a solução mais fácil, mas pelo fim tu vais acabar
fazendo tudo no Windows com isso, pois vai sobrar pouca coisa para a
máquina GNU/Linux fazer. Cuidado com esta solução, pois para coisinhas
simples, base de dados pequenas, etc, ela vai funcionar muito bem, pois
o Perl no Windows funciona 100%, contudo se tua base de dados aumentar
muito e se tiver muitas consultas ao teu Access, tu vai começar a
entender pq todo mundo diz que o Access não é recomendável.
3 - Usar o DBD::Proxy. Não sei exatamente como ele funciona, mas sei que
tu vais ter que implementar um script na tua máquina Windows que lê o MS
Access e atende as requisições de outro script na máquina GNU/Linux.
Esta solução complica, também, quando tem muitas consultas ao mesmo
tempo em uma base de dados grandes (base de dados grande, em termos de
MS Access, significa uns 300MB no arquivão deles), mas é mais leve do
que a segunda solução.
Acho que o texto ficou meio longo, mas é que gosto de defender meus
pontos de vista... Contudo, vamos fazer um resumo para ficar mais fácil.
Vou ser bem direto...
R1 = OLEDB, ADO, ODBC, entre outros. Todos só rodam no Windows.
R2 = Nenhum. Se tu quiser acessar no GNU/Linux direto, vai ter que usar
um script de replicação ou então o DBD::Proxy
R3 = Remotamente, não, pois a máquina que estiver com o ODBC configurado
vai ter que saber "falar a língua nativa" do MS Access (remoto, neste
caso, só se o arquivão mdb estiver em uma pasta compartilhada, eh, eh, eh)
R4 = Bom, não sei dos outros, mas eu fiz uma integração de dados usando
replicação com Perl e mysql para um cliente nosso. O sistema está
rodando no endereço www.couronet.com.br mas precisa de senha para
acessar. É um sistema fechado apenas para os clientes da empresa que nos
contratou.
SDS,
Luciano
Ednardo Lobo escreveu:
>Pessoal,
>
>Estou em vias de iniciar um projeto onde necessitarei acessar uma base
>de dados Microsoft Access por meio de DBI ou de alguma outra API
>disponível para Perl. O script será executado em um servidor Linux de
>onde conectará em um servidor Windows para ler e escrever nas tabelas de
>um BD Access.
>
>Necessito trocar informações com pessoas que tenha alguma experiência
>com Access, com o objetivo de não só verificar a viabiabilidade de
>realizar tal procedimento, mas também de compilar um mini tutorial a ser
>publicado aqui na lista ou em algum site da comunidade.
>
>Incialmente necessito das seguintes informações:
>
>1) Quais os drivers existente para acesso ao Access?
>
>2) Desses, qual o mais recomendado parar ser utilizado em Linux?
>
>3) O acesso pode ser feito via ODBC?
>
>4) Pessoas/empresas que já realizaram isto?
>
>
>Grato,
>
>
>
Mais detalhes sobre a lista de discussão Cascavel-pm