Perda de Transações já comitadas
Olá
Utilizamos firebird 2.5 classic na nossa empresa com o SO Linux (CentOS).
Estamos enfrentando um problema onde estão sumindo transações já comitadas. Já fizemos todos os testes com logs para comprovar que os dados realmente foram comitados e gravados. E não possuímos rotinas no nosso sistema que possam excluir estes registros. Eventualmente quando consultamos a base, notamos que alguns registros de nota fiscal não estão mais gravados mas constam na impressora fiscal e nos nossos logs de controle. Somem todos os registros de uma ou mais notas fiscais já gravadas (toda a transação da gravação da nota e suas integridades. Produtos, pagamentos, etc). Somem sem deixar rastros, como se nunca tivessem sido incluídas.
Este problema já ocorreu 5 vezes. Com intervalos de semanas.
Temos certeza que não existe ninguém que esteja excluindo estes registros manualmente.
As rotinas de backup são feitas diariamente(automaticamente), porém os restores são feitos apenas mensalmente.
Apenas o usuário firebird no linux tem acesso ao arquivo da base.
A opção forced_writes está ativada.
A impressão que temos é que parece que a base de dados está voltando no tempo. Como se tivesse sido copiado uma base mais antiga por cima da atual. Mas não conseguimos explicar pois isto está acontecendo durante o dia e com a base em uso, e não temos relatos de que a base tenha ficado fora do ar durante o dia e nem relatos de perda de conexão com a base (média de 30 usuários conectados ao mesmo tempo).
Qualquer ajuda ou sugestão será muito bem vinda.
Obrigado
Utilizamos firebird 2.5 classic na nossa empresa com o SO Linux (CentOS).
Estamos enfrentando um problema onde estão sumindo transações já comitadas. Já fizemos todos os testes com logs para comprovar que os dados realmente foram comitados e gravados. E não possuímos rotinas no nosso sistema que possam excluir estes registros. Eventualmente quando consultamos a base, notamos que alguns registros de nota fiscal não estão mais gravados mas constam na impressora fiscal e nos nossos logs de controle. Somem todos os registros de uma ou mais notas fiscais já gravadas (toda a transação da gravação da nota e suas integridades. Produtos, pagamentos, etc). Somem sem deixar rastros, como se nunca tivessem sido incluídas.
Este problema já ocorreu 5 vezes. Com intervalos de semanas.
Temos certeza que não existe ninguém que esteja excluindo estes registros manualmente.
As rotinas de backup são feitas diariamente(automaticamente), porém os restores são feitos apenas mensalmente.
Apenas o usuário firebird no linux tem acesso ao arquivo da base.
A opção forced_writes está ativada.
A impressão que temos é que parece que a base de dados está voltando no tempo. Como se tivesse sido copiado uma base mais antiga por cima da atual. Mas não conseguimos explicar pois isto está acontecendo durante o dia e com a base em uso, e não temos relatos de que a base tenha ficado fora do ar durante o dia e nem relatos de perda de conexão com a base (média de 30 usuários conectados ao mesmo tempo).
Qualquer ajuda ou sugestão será muito bem vinda.
Obrigado
Diego Zanelatto
Curtidas 0
Respostas
Anderson
27/07/2012
Olá Diego, qual o número completo da versão do Firebird (2.5.xxxxx) e do CentOS Linux, e se são 32 ou 64 bits.
Poderia fazer um teste no banco de dados:
Buscar uma nota desaparecida utilizando índice:
SELECT * FROM NOME_DA_TABELA WHERE CAMPO_ID = 123456;
e depois
Buscar uma nota desaparecida sem utilizar índice:
SELECT * FROM NOME_DA_TABELA WHERE CAMPO_ID+0 = 123456;
Substitua o NOME_DA_TABELA e CAMPO_ID (campo com o número da nota) pelos nomes equivalentes na sua base de dados. Troque o 123456 pelo número de uma das notas desaparecidas. Também procure algo comum entre estes registros desaparecidos (data, hora, usuário, terminal, ...)
Abraços,
Anderson:.
Poderia fazer um teste no banco de dados:
Buscar uma nota desaparecida utilizando índice:
SELECT * FROM NOME_DA_TABELA WHERE CAMPO_ID = 123456;
e depois
Buscar uma nota desaparecida sem utilizar índice:
SELECT * FROM NOME_DA_TABELA WHERE CAMPO_ID+0 = 123456;
Substitua o NOME_DA_TABELA e CAMPO_ID (campo com o número da nota) pelos nomes equivalentes na sua base de dados. Troque o 123456 pelo número de uma das notas desaparecidas. Também procure algo comum entre estes registros desaparecidos (data, hora, usuário, terminal, ...)
Abraços,
Anderson:.
GOSTEI 0
Diego Zanelatto
27/07/2012
Bom dia Anderson. Obrigado pela dica.
Porém, fiz o teste sem utilizar os indices e mesmo assim ele não encontra a nota sumida.
O firebird instalado no linux é o FirebirdCS-2.5.1.26351-0.i686.tar.gz.
Sobre padrões para o erro ocorrer.. Bom, sempre estava ocorrendo alguns minutos (20 a 30) após os backups automáticos. Mas a última vez que ocorreu não tinha executado backup ainda.
Porém, fiz o teste sem utilizar os indices e mesmo assim ele não encontra a nota sumida.
O firebird instalado no linux é o FirebirdCS-2.5.1.26351-0.i686.tar.gz.
Sobre padrões para o erro ocorrer.. Bom, sempre estava ocorrendo alguns minutos (20 a 30) após os backups automáticos. Mas a última vez que ocorreu não tinha executado backup ainda.
GOSTEI 0
Anderson
27/07/2012
De uma olhada nesta informação, em especial o item 4.3.4
Link:
http://www.firebirdsql.org/en/some-solutions-to-old-problems/
Abraços,
Anderson:.
Link:
http://www.firebirdsql.org/en/some-solutions-to-old-problems/
Abraços,
Anderson:.
GOSTEI 0
Anderson
27/07/2012
Desculpe, o item a checar é o 4.3.3 Use Roll-Forward Logs
Abraços,
Anderson:.
Abraços,
Anderson:.
GOSTEI 0