[firebase-br] Chave Primária Duplicada

Mário Reis mariodosreyx em gmail.com
Segunda Setembro 12 08:01:26 -03 2022


Bom dia,
Não sei se percebi bem! Está a dizer que FB2.5, no "Restore" lhe traz mais
um registo venda 100 + Filial 10!
Ou seja,  "Restore" a duplicar o registo! É isso que nos está a dizer?
Desculpará, mas isso cheira a "martelada da grossa" e não acredito que
consiga nunca mais reconstruir a PK sem eliminar essa redundância,
primeiro, ou então, é um problema de corrupção da base só por aí
compreendo uma tal situação! Também acontece, ou ainda, tem que rever o
parâmetros do backup/restore(Obs.: não é a mesma venda 100, pois outros
campos não têm o mesmo valor. São duas vendas 100 diferentes)!?.
Bem, há bastante  tempo que deixamos de ter Primary Key compostas e que não
sejam sequenciais únicos e absolutos, que nas "dependências, amarram toda a
aplicação" todos as outras chaves como o seu "Venda+Filial" são Unique Keys
e em regra não servem para mais do que isso. Depois nos acessos com essas
chaves, quando necessário, usamos views sobre
esses campos. Nos inputs de pesquisa podem até ser pedidos "N.Venda + N.º
da Filial", mas lá por de trás, posiciona no registo lê a PK toda e
qualquer relação dai em diante se processa via PK!
Quanto ao controle, é feito pelo próprio FB, sim, qual a admiração. Todo o
resto é degradação de tempo em acessos
Fazer à lá "Clipper/Fox" com DBFs "if found then trava com erro Else deixa
criar" caiu.
Acabou na mesma hora em que a opção/decisão foi pelo RDBMS com "Integridade
Referencial" primeiro pelo PG depois pelo Firebird por ser muito mais leve
ainda que, à data, com bastante menos potencialidades!
E, bendita hora; mudar tudo custou um pouco, mas nem que nos pagassem para
voltar para trás! Está fora de questão!
Na hora o compromisso foi FB1.5, creio (hoje FB3), mas também mudamos o
paradigma de programação.
É o "data engine" quem trava a repetição de uma chave e quando ele retorna
em erro, interceptamos e  tratamos o erro.
E,  é assim há quase 20 anos sem problemas uma falha de energia com uma UPS
problemática, mas reposumemos o backup , limpinho e tudo voltou ao normal.
Com os meus melhores cumprimentos
Mário Agostinho Reis
919262146

Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.


Valdir Dill via lista <lista em firebase.com.br> escreveu no dia segunda,
12/09/2022 à(s) 09:59:

> 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
> /
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>


Mais detalhes sobre a lista de discussão lista