QUAL MELHOR CONEXAO

MARCELO.VB.PIRA 05/10/2010 23:18:22
#354503
Olá amigos...

Gostaria de saber qual a posição de vocês sobre a melhor forma de se conectar a um banco de dados firebird 2.1

Hoje uso a DLL ibole.dll, me conectando da seguinte forma:
Set ConexaoBD = New ADODB.Connection
ConexaoBD.Open [Ô]Provider=IBOLE.PROVIDER;Data Source=[Ô] & Comc, [Ô]SYSDBA[Ô], [Ô]masterkey[Ô]
ConexaoBD.CursorLocation = adUseClient


agora comecei a testar a conexao utilizado ODBC, usando o provedor
Citação:

Firebird ODBC/JDBC Drivers
Version 2.0 Release Candidate 1 (RC1)


que baixei em
http://www.firebirdsql.org/index.php?op=files&id=odbc
utilizando a seguinte striung de conexão:
Set ConexaoBD = New ADODB.Connection
ConexaoBD.Open [Ô]DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=[Ô] & Comc
ConexaoBD.CursorLocation = adUseClient


Em tempo: Comc = nome_do_servidor:Nome_da_base_de_dados EXEMPLO : Comc = 192.168.0.101:c:    este\dados\base_de_dados..fdb

Nos primiero momentos de mudança, já notei que algumas coisas são bem diferentes:

- com a Ibole.dll eu podia dar um CommitTrans sem ter iniciado com um BeginTrans
- no caso do ODBC, quando uso a função SUM em uma sql que retorna 0 ou NULL, ele não permite um CLOSE no recordset resultante, apenas o NOTHING
- os codigos de erro capturados atraves de tratamentos utilizando a o Err.Number, são diferentes para os mesmos erros.

bem... como comecei a fazer os testes hoje... com certeza irei encontrar mais uma pá de pepinos.

Mas gostaria de saber a opinião de vocês sobre as duas formas de conexão..

ha!!! ia me esquecendo: uso a ibole.dll a mais de dois anos... porem em bases de dados grandes e com muitas transações via rede eu venho notando perda de performance alem de muita corrupção na base de dados. E antes que alguém (Sr Capella por exemplo) me pergunte: A base de dados foi normatizada (desta vez).

Abraços a Todos...

Ps.: Capelex, foi brincadeirinha viu fiotão? http://www.vbmania.com.br/images/smile/sml12.gif



ADRIANOM 05/10/2010 23:27:45
#354504
IBOLE.DLL
acho melhor
menos erros



dá uma ida no meu topico tb e vê se pode me ajudar
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=354393&varWorld=
ARNALDOCRUZ 06/10/2010 09:15:57
#354514
definitivamente o IBOLE é melhor e mais rapido, sem contar que ODBC vc tem que configurara cada maquina.

com ibole se vc comitar sem de abrir um begin não dá erro mais também não é feito nada só descarregado um processo pendente se houver. outra aqui eu testanto acusou erro. (não é possivel concluir uma operação que não esteja aberta)

a corrupção do banco de dados não tem haver com a dll IBOLLE o que pode ocorrer são

1 - beginstrasn sem comitar ou sem rollback
2 - Tabelas ficando abertas
3 - usuario desligando o servidor com conexões ativas, e esta é a mais comum e também, nunca ninguem vai dizer fui eu.
qdo qualquer uma das ocorrencias acima acontece fica alguma coisa pendente no firebird, que pode bagunçar os indices das tabelas, e qdo um solicitação for feita ao sgbd demore o retorno.

solução

embora eu já tenha te passado vou repetir de novo.

passar o gefix do firebird, em todo fechamento do sistema do servidor( se não tiver o sistema instalado no servidor criei algo que passe o gfix e faça backup automatico. passando antes aqueles comandos de recuperação, não custa nada e se o banco de dados não tiver problemas não vai prejudicar. as vantagens é que todos os indices são organizados e o bco vai responder aos comandos + rapido.

tem um esquema de abertura que indica que qdo aquela conexão for fechada seja encerrada qualquer operação pendente.

uma outra ideia e ter algo que antes de qualquer solicitação ao bco verifique se a rede está ativa.

outra abrir a conexão qdo abrir uma tela e fechar a conexão ao fechar a tela.

na tela de venda que geralmente costuma ficar sempre ativo, abrir ao iniciar uma venda e fechar ao finalizar a venda, estilo vbnet onde é comum este procedimento.

com isso os riscos de corrupção serão reduzidos.

outra ao criar indices, criei um indice separado para cada campo, e não varios indices juntos

aconselhe ao administrador a fazer uma desfragmentação do computador regularmente.

é isso medadas paleativas que podem ajudar.









LLAIA 06/10/2010 10:23:34
#354524
Só usaria o IBOLE ou o SIB para o FB 1.5. O SIB nem a fbclient.dll usa, usa a GDS32.dll que é do Interbase, já o IBOLE eu não sei se ele usa a fbclient.dll. Usaria o FB 2.x com essas dlls se houvessem versões mais atuais delas, então acredito que ODBC seja a melhor opção.
MARCELO.VB.PIRA 07/10/2010 15:02:55
#354629
ARNALDOCRUZ:

Citação:

passar o gefix do firebird, em todo fechamento do sistema do servidor( se não tiver o sistema instalado no servidor criei algo que passe o gfix e faça backup automatico. passando antes aqueles comandos de recuperação, não custa nada e se o banco de dados não tiver problemas não vai prejudicar. as vantagens é que todos os indices são organizados e o bco vai responder aos comandos + rapido.



Todos os dias pela manhã, os clientes efetuam backup (se não o fixerem o sistema fica enchendo o saco a cada 20 minutos avisando que não foi feito o backlup do dia)

neste rotina de backup, eu faço uma copia fisica, passo o gfix, faço o gbak, restauro o gbak, passo o gfix de novo e compacto tudo. veja o .bat abaixo:

copy Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.BAK /Y

c:\ARQUIV~1\firebird\FIREBI~1\bin\gfix -mend -full -ignore Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB

c:\ARQUIV~1\firebird\FIREBI~1\bin\gbak -backup -v -ignore -garbage -limbo Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.GBK

c:\ARQUIV~1\firebird\FIREBI~1\bin\gbak -create -v -rep -inactive -one_at_a_time Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.GBK Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB

c:\ARQUIV~1\firebird\FIREBI~1\bin\gfix -mend -full -ignore Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB

c:\ARQUIV~1\firebird\FIREBI~1\bin\gfix Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.FDB -commit all

del Z:\du\DOWNUP~1\dados\COMERCIAL_FIRE_USIEMAN.GBK /S

del c:\du\CPIA~1\071010.RAR /S

Z:\Sistemas\Down_Ups\Fontes\COMERC~4ar.exe a c:\du\CPIA~1\071010.RAR Z:\du\DOWNUP~1\*.* -r







Citação:

tem um esquema de abertura que indica que qdo aquela conexão for fechada seja encerrada qualquer operação pendente.



Gostaria de saber como funciona e qual a sintaxe deste esquema.








Citação:

uma outra ideia e ter algo que antes de qualquer solicitação ao bco verifique se a rede está ativa.




como no meu sistema tem um modulo de mensagens e lembretes instataneos que a cada 10 segundos ele vai no bd e vê se tem alguma mansagem ou compromisso para o usuario logado, neste momento ele já checa se o bd ta aberto e se nao tiver fecha o sistema.







Citação:

outra abrir a conexão qdo abrir uma tela e fechar a conexão ao fechar a tela.



essa eu naõ entendi... eu abro o bd na entrada do sistema... em uma variavel publica que fica aberta até a saida do sistema.... se a cada form eu abrir a conexao e depois fechar... vai perder muito em performance... não entedi bem o que vc quis dizer... não posso ter uma conexao aberta o tempo inteiro??? e abrir e fechar apenas os recordsets que vou usar a cada momento? eu abro um record set, pego o que quero (ou gravo) e fecho esse record set imediatamente.... me explica melhor por favor...


Obrigado amigo...






















ARNALDOCRUZ 07/10/2010 15:43:16
#354645
1 caso vc passa o gfix e gbak e tudo fica na copia do backup, para que seja feito no banco atual vc tem que fazer uma restauração.

Backup tem que ser ao sair do sistema e não ao entrar

2 - caso não encontrei material sobre isso, só li comentários do site do firebird

3 caso monitromanteo de rede de 10 em 10 minutos é mesma coisa que nada, o ideal é vc ter na pasta do servidor um arquivo qualquer, txt,dll etc. que a cada solicitação ao bd seja feita a existencia desse arquivo.

quando um computador é aberto eu identifico se este é cliente ou servidor pois tenho sistema funcionando como cliente/servidor e também só cliente.

eu fiz o seguinte. na tela principal coloquei um label

quando o sistema é aberto eu coloco ele como [Ô]sistema conectado[Ô]

coloqui um timer que fica verificando a existencia de uma arquivo Rede.txt

dim caminho as String

caminho=Dir([Ô]\\Servidor\Pastaede.txt[Ô])
if caminho=[Ô][Ô] or isnull(caminho) then
label.caption=[Ô]Sistema descontectado[Ô]
else
label.caption=[Ô]Sistema Conectado[Ô]
endif

antes da solicitação ao Banco de dados

if FrmPrincipal.Label1.caption=[Ô]Sistema desconectado[Ô] then
dou uma mensagem pro usuario pra ele verificar cabo,servidor desligado etc.......
exit sub
endif

4 caso abrir e fechar conexão, pelo contrario deixa o computador mais rapido, pois diminue o trafego de informações em rede

a cada 10 segundos vai ao BD se houver qualquer queda da conexão pronto já ocorreu um erro, se vc verificar um arquivo qualquer não acontecerá o erro.

e não adianta dizer que trata o erro, pois se a rede está disconectada e o cursor cai em um select o tempo de resposta do erro da a impressão que o sistema travou sem contar que as vezes trava mesmo até com o tratamento de erros.

conectar e desconectar

a conexão é quase que instântanea vc não percebe nada de diferente, se perceber é porque algo está errado.

porque a corrupção acontece ? porque o sistema servidor seja lá por qualquer motivo é danificada ? por que tinha um,dois ou mais computadores conectados ao bando de dados, como ela foi interrompida abruptamente acontece a corrupção do Bco que vai ficar com duas conexões pendentes, estilo operações não comitadas.

como evitar ou diminuir a possibilidade.

como faço sei que paleativo, mas testei dll e dlls que prometia identificar a rede só que hora ou outra respondia errado, tipo a conexão tá boa e responde que está ruim, ou está ruim e responde que esta boa.

fiz como abaixo e é super funcional até então quase 8 meses nunca tive problemas, sempre que a rede cai a identificação é imediata e ao ser restabelecida a rede a conexão é automatica.


abrir um form faço a conexão, fechei o form fechei a conexão.

se tiver um tela que sempre fique aberta tipo tela de venda.

inicio um venda abre a conexão, concluiu a venda fecha a conexão.

se acontecer qualquer coisa com o servidor ou cabo ou seja lá o que for, o banco de dados está sem conexões ativa e não vai ter problemas.

eu também pensei que nesse esquema perderia perfomance + já nos teste percebi que melhorava até, pois minhas consultas, gravação começaram a responder + rapido e porque ? porque naquele exato momento tinha um pequena qtde de máquinas conectadas, e o bd aplica todo o recurso apenas na minha conexão. portanto quanto maior o numéro de conexão os recursos são divididos






Tópico encerrado , respostas não são mais permitidas