[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