Problemas Firebird
- Cenário: Tenho um sistema de controle imobiliário, basicamente controla a imobiliária inteira, menos RH. Feito em Delphi usando DBexpress para conectar no banco Firedird 2.5. Todos meus clientes usam como servidor Windows Server ou XP dependendo o tamanho da imobiliária. Mas meu maior cliente usa um servidor Linux, feito por um fornecedor terceiro deles que configurou o Firebird. Nesse meu maior cliente é onde ocorre os meus problemas, já que as outras imobiliárias não tem nem 10% dos funcionários que esta tem.
Eles tem um backup total do sistema a meia-noite, que salva todos os arquivos do servidor. Também existe um sistema web que faz somente leitura do banco de dados para disponibilizar faturas e recibos no site para os clientes.
-Problema 1: O cliente da baixa no imóvel, pois o mesmo por decisão do proprietário não faz parte do mix da imobiliária. O imóvel recebe o status de “Excluído”, a data de exclusão, e o motivo da exclusão do imóvel. É checado se realmente está excluído e esta ok.
No outro dia, em alguns casos aleatórios e esporádicos, o status do imóvel volta a ser “Vago”, como se não tivesse sido excluído, mas as informações de data da exclusão e motivo permanecem preenchidas com os dados informados.
-Problema 2: Como parte do sistema existe um processo de solicitação de serviço e ordem de serviço, onde qualquer um (inquilino, condômino, proprietário, ou pessoa que tenha cadastro na imobiliária) pode solicitar que a imobiliária efetue serviços gerais com seu mix de prestadores de serviços cadastrados.O funcionamento é o seguinte, é gerado uma solicitação de serviço para ser feito diversos orçamentos pelos prestadores de serviços (como se fosse uma concorrência de licitação com um ganhador), após a aceitação dos termos e valores por parte do solicitante, os prestadores de serviços que ganharem (pode ser mais de um, pois são diversos itens de serviço e cada um tem um prestador) vão efetuar o serviço, e sendo assim o sistema irá gerar uma ordem de serviço.Após o serviço feito é dado baixa na ordem de serviço que vai gerar o pagamento ao fornecedor e o boleto ao solicitante. Neste caso existem dois problemas, se eu deixar para baixar a ordem de serviço no outro dia, alguns casos aleatórios e esporádicos o fornecedor duplica o valor, como se houvesse dois lançamentos iguais para a mesma ordem de serviço, para o mesmo fornecedor (mesmo registro gravado duas vezes). O outro problema também em alguns casos aleatórios e esporádicos, após eu baixar a ordem de serviço e gerar os pagamentos aos fornecedores e a cobrança ao solicitante, no outro dia quando vou olhar a ordem de serviço voltou a ficar aberta, como se nunca tivesse sido efetuada, mas os pagamentos aos fornecedores e a cobrança ao solicitante estão gravados nas tabelas de cobrança do banco de dados.
-Problema 3: Usando IBExpert, eu estava fazendo alterações direto no banco de dados que estava rodando o sistema na imobiliária no momento, colocando alguns campos novos e adicionando os dados padrões para o novo campo e ajustando erros em outros campos. O que ocorria é que colocava os dados padrão na tabela, corrigia os erros nos registros e dava commit, ia na janela de SQL Editor executar um SQL para ver se os dados estavam correto e se estava tudo bem, mas nos registros que fiz correções puxava os dados antigos, como se não tivesse corrigido ou dado commit. Eu ia verificar o registro na tabela e estava correto, mas no SQL Editor estava com os dados antigos, então fui no servidor parei o serviço e iniciei novamente, e voltou ao normal, os dados no SQL Editor começaram a mostrar os mesmos dados da tabela.
-Considerações: Este cliente tem mais ou menos 50 maquinas acessando o sistema no método client-server. E é o único que esta apresentando problemas do gênero. Creio que seja algum problema de configuração do SGBD, mas não tenho conhecimento de como funciona no Linux isso e o terceiro que configurou jura de pés juntos que não é problema no servidor. Mas tenho casos estranhos ocorrendo até mesmo com meu acesso direto ao banco. Se alguém conhecer a solução do problema eu agradeço.
Eles tem um backup total do sistema a meia-noite, que salva todos os arquivos do servidor. Também existe um sistema web que faz somente leitura do banco de dados para disponibilizar faturas e recibos no site para os clientes.
-Problema 1: O cliente da baixa no imóvel, pois o mesmo por decisão do proprietário não faz parte do mix da imobiliária. O imóvel recebe o status de “Excluído”, a data de exclusão, e o motivo da exclusão do imóvel. É checado se realmente está excluído e esta ok.
No outro dia, em alguns casos aleatórios e esporádicos, o status do imóvel volta a ser “Vago”, como se não tivesse sido excluído, mas as informações de data da exclusão e motivo permanecem preenchidas com os dados informados.
-Problema 2: Como parte do sistema existe um processo de solicitação de serviço e ordem de serviço, onde qualquer um (inquilino, condômino, proprietário, ou pessoa que tenha cadastro na imobiliária) pode solicitar que a imobiliária efetue serviços gerais com seu mix de prestadores de serviços cadastrados.O funcionamento é o seguinte, é gerado uma solicitação de serviço para ser feito diversos orçamentos pelos prestadores de serviços (como se fosse uma concorrência de licitação com um ganhador), após a aceitação dos termos e valores por parte do solicitante, os prestadores de serviços que ganharem (pode ser mais de um, pois são diversos itens de serviço e cada um tem um prestador) vão efetuar o serviço, e sendo assim o sistema irá gerar uma ordem de serviço.Após o serviço feito é dado baixa na ordem de serviço que vai gerar o pagamento ao fornecedor e o boleto ao solicitante. Neste caso existem dois problemas, se eu deixar para baixar a ordem de serviço no outro dia, alguns casos aleatórios e esporádicos o fornecedor duplica o valor, como se houvesse dois lançamentos iguais para a mesma ordem de serviço, para o mesmo fornecedor (mesmo registro gravado duas vezes). O outro problema também em alguns casos aleatórios e esporádicos, após eu baixar a ordem de serviço e gerar os pagamentos aos fornecedores e a cobrança ao solicitante, no outro dia quando vou olhar a ordem de serviço voltou a ficar aberta, como se nunca tivesse sido efetuada, mas os pagamentos aos fornecedores e a cobrança ao solicitante estão gravados nas tabelas de cobrança do banco de dados.
-Problema 3: Usando IBExpert, eu estava fazendo alterações direto no banco de dados que estava rodando o sistema na imobiliária no momento, colocando alguns campos novos e adicionando os dados padrões para o novo campo e ajustando erros em outros campos. O que ocorria é que colocava os dados padrão na tabela, corrigia os erros nos registros e dava commit, ia na janela de SQL Editor executar um SQL para ver se os dados estavam correto e se estava tudo bem, mas nos registros que fiz correções puxava os dados antigos, como se não tivesse corrigido ou dado commit. Eu ia verificar o registro na tabela e estava correto, mas no SQL Editor estava com os dados antigos, então fui no servidor parei o serviço e iniciei novamente, e voltou ao normal, os dados no SQL Editor começaram a mostrar os mesmos dados da tabela.
-Considerações: Este cliente tem mais ou menos 50 maquinas acessando o sistema no método client-server. E é o único que esta apresentando problemas do gênero. Creio que seja algum problema de configuração do SGBD, mas não tenho conhecimento de como funciona no Linux isso e o terceiro que configurou jura de pés juntos que não é problema no servidor. Mas tenho casos estranhos ocorrendo até mesmo com meu acesso direto ao banco. Se alguém conhecer a solução do problema eu agradeço.
Jorge Trento
Curtidas 0
Respostas
Anderson
26/04/2012
Sem citar detalhes mais exatos, fica complicado rastrear o erro (https://www.devmedia.com.br/forum/inconsistencia-nos-dados/414987)
Veja uma situação que depende de duas combinações, da versão do Firebird e da Glibc:
It has been found that V.2.5 Classic for Linux has problems with AST delivery if used with glibc 2.5. With glibc 2.7 it works properly. The situation with glibc 2.6 is unknown for now. If your glibc version is lower than v.2.7, it must be upgraded before using Firebird 2.5 Classic/Superclassic.
Há uma relação de bugs/fixes para o Firebird 2.5.1->2.5.2: http://tracker.firebirdsql.org/browse/CORE/fixforversion/10450
Lembrando que o problema pode estar na própria aplicação, no driver de acesso, no sistema operacional, ... ou em alguma combinação.
Abraços,
Anderson:.
Veja uma situação que depende de duas combinações, da versão do Firebird e da Glibc:
It has been found that V.2.5 Classic for Linux has problems with AST delivery if used with glibc 2.5. With glibc 2.7 it works properly. The situation with glibc 2.6 is unknown for now. If your glibc version is lower than v.2.7, it must be upgraded before using Firebird 2.5 Classic/Superclassic.
Há uma relação de bugs/fixes para o Firebird 2.5.1->2.5.2: http://tracker.firebirdsql.org/browse/CORE/fixforversion/10450
Lembrando que o problema pode estar na própria aplicação, no driver de acesso, no sistema operacional, ... ou em alguma combinação.
Abraços,
Anderson:.
GOSTEI 0
Jorge Trento
26/04/2012
Segue as informações sobre o servidor:
Qual a versão do linux no servidor (Nome da distro e número) ?
[root@diomedes ~]# cat /etc/issue
CentOS release 5.5 (Final)
[root@diomedes ~]# uname -a
Linux diomedes.nostracasa.com.br 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:20 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
Qual a versão da glibc no servidor ?
[root@diomedes ~]# rpm -qa | grep glibc
glibc-2.5-49.el5_5.7
Qual a versão do Firebird (2.5.?.?...) ?
[root@diomedes ~]# rpm -qa | grep Firebird
FirebirdSS-2.5.0.26074-0
Qual o modo de execução do Firebird (Classic/SuperServer/SuperClassic) ?
FirebirdSS-2.5.0.26074-0
SuperServer
Servidor Firebird configurado com Forced-Writes ON ou OFF ?
[root@diomedes bin]# ./gstat -z /home/raiz/sisimo/BDSISIMO/SISLOC.FDB
gstat version LI-V2.5.0.26074 Firebird 2.5
Database /home/raiz/sisimo/BDSISIMO/SISLOC.FDB
Database header page information:
Flags 0
Checksum 12345
Generation 7005708
Page size 16384
ODS version 11.0
Oldest transaction 6946737
Oldest active 6948247
Oldest snapshot 6948247
Next transaction 7002378
Bumped transaction 1
Sequence number 0
Next attachment ID 3224122
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Nov 28, 2010 22:11:50
Attributes force write
Variable header data:
Sweep interval: 20000
*END*
[root@diomedes bin]# ./gstat -z /home/raiz/sisimo/BuscaCEPS/bancodedados/CEP.FDB
gstat version LI-V2.5.0.26074 Firebird 2.5
Database /home/raiz/sisimo/BuscaCEPS/bancodedados/CEP.FDB
Database header page information:
Flags 0
Checksum 12345
Generation 3420171
Page size 16384
ODS version 11.2
Oldest transaction 3419984
Oldest active 3419985
Oldest snapshot 3419985
Next transaction 3419986
Bumped transaction 1
Sequence number 0
Next attachment ID 1738681
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Dec 3, 2010 15:56:30
Attributes force write
Variable header data:
*END*
Qual a versão do linux no servidor (Nome da distro e número) ?
[root@diomedes ~]# cat /etc/issue
CentOS release 5.5 (Final)
[root@diomedes ~]# uname -a
Linux diomedes.nostracasa.com.br 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:20 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
Qual a versão da glibc no servidor ?
[root@diomedes ~]# rpm -qa | grep glibc
glibc-2.5-49.el5_5.7
Qual a versão do Firebird (2.5.?.?...) ?
[root@diomedes ~]# rpm -qa | grep Firebird
FirebirdSS-2.5.0.26074-0
Qual o modo de execução do Firebird (Classic/SuperServer/SuperClassic) ?
FirebirdSS-2.5.0.26074-0
SuperServer
Servidor Firebird configurado com Forced-Writes ON ou OFF ?
[root@diomedes bin]# ./gstat -z /home/raiz/sisimo/BDSISIMO/SISLOC.FDB
gstat version LI-V2.5.0.26074 Firebird 2.5
Database /home/raiz/sisimo/BDSISIMO/SISLOC.FDB
Database header page information:
Flags 0
Checksum 12345
Generation 7005708
Page size 16384
ODS version 11.0
Oldest transaction 6946737
Oldest active 6948247
Oldest snapshot 6948247
Next transaction 7002378
Bumped transaction 1
Sequence number 0
Next attachment ID 3224122
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Nov 28, 2010 22:11:50
Attributes force write
Variable header data:
Sweep interval: 20000
*END*
[root@diomedes bin]# ./gstat -z /home/raiz/sisimo/BuscaCEPS/bancodedados/CEP.FDB
gstat version LI-V2.5.0.26074 Firebird 2.5
Database /home/raiz/sisimo/BuscaCEPS/bancodedados/CEP.FDB
Database header page information:
Flags 0
Checksum 12345
Generation 3420171
Page size 16384
ODS version 11.2
Oldest transaction 3419984
Oldest active 3419985
Oldest snapshot 3419985
Next transaction 3419986
Bumped transaction 1
Sequence number 0
Next attachment ID 1738681
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Dec 3, 2010 15:56:30
Attributes force write
Variable header data:
*END*
GOSTEI 0