[firebase-br] Chave Primária Duplicada
Valdir Dill
valdiralbertod em gmail.com
Segunda Setembro 12 06:58:42 -03 2022
Boa tarde,
Temos uma tabela (VENDAS). Ocorre também em outras tabelas, mas, aqui
vamos nos ater apenas à VENDAS.
Entre outros campos, a VENdAS tem o NUMERO e FILIAL. Estes 2 compõem o
índice primário.
Se tentarmos gravar a venda 100, com FILIAL 1, uma segunda vez,
obviamente que o Firebird vai "berrar", porque se está tentando duplicar
o índice primário.
É claro que antes do Firebird gerar erro, é aplicação que deve controlar
isso e não permitir que chegue a esse ponto. Mas...
O problema que ocorre, muito eventualmente, mas ocorreu já mais de uma
vez com usuários nossos é: o banco de dados está lá, tudo certo, com a
venda 100 registrada apenas 1 vez, o índice primário ativo, tudo certo.
Aí faz-se um backup e o restore com gbak.exe. Nesse restore vem duas
vendas 100, com filial 1 registradas, o que obviamente vai dar conflito
no banco pelo fato do índice primário estar duplicado.
Ao mesmo tempo, o índice primário é desativado automaticamente. Acredito
que o Firebird faça isso (desativar o índice), justamente para poder
restaurar esse segundo registro da venda 100.
Obs.: não é a mesma venda 100, pois outros campos não têm o mesmo valor.
São duas vendas 100 diferentes.
A única coisa que posso imaginar é que por algum erro, em algum momento,
o sistema tentou registrar duas vezes com o mesmo número (100 e FILIAL
1) e o Firebird não permitiu. Entretanto esses dados não gravados (da
segunda venda) ficaram em "um limbo" e, ao fazer o restore, eles foram
ressuscitados.
Tentamos de todas formas reproduzir o problema em labortório, mas não
ocorre. Sempre que se tenta gravar uma segunda vez registro com os
mesmos dados nos campos índice, o Firebird impede e descarta tudo
(corretamente). Quado o usuário nos envia o banco, o problema já está
instalado.
Alguém poderia me dar uma luz sobre isso. Pode ser de fato isso que
esteja ocorrendo? Como é que o Firebird permitiu um segundo registro com
a mesma chave primária? E como não permitir que o Firebird gere essa
situação?
Usamos Firebird 2.5
Qualquer sugestão é bem vinda!
Obrigado!
------------------------------------------------------------------------
/Cordialmente
Valdir Dill
/
Mais detalhes sobre a lista de discussão lista