Chaves e Registros duplicados: como resolver?

Quando se trabalha com base de dados Protheus é muito comum que se tenha a existência e chaves e registros duplicados que acabam por impactar as operações do ERP. Nesse momento é necessário encontrar uma maneira de resolver esse  impasse para que isso não impacte negativamente as operações da empresa.
O problema costuma ocorrer porque algumas tabelas da base de dados, tanto em SQL Server como Oracle e DB2, possuem chaves únicas definidas para que não seja possível a inserção de registros duplicados, causando interferências no funcionamento dos sistemas.
A chave única localiza-se na coluna X2_UNQ da tabela SX2. Um índice com restrição de chave única (unique constraint) é criado no banco de dados para garantir que essa chave não se duplique e impacte no funcionamento do banco de dados.
Porém, durante a operação do sistema e erros na tentativa de inserção de chaves duplicadas, essa restrição acaba sendo desabilitada via banco de dados e/ou apagando da tabela SX2. A partir daí  o banco de dados passa a permitir que registros duplicados sejam inseridos nessa tabela.
É importante conhecer algumas mensagens comuns de erro na tentativa de inserir chaves duplicadas, são elas:
  • ORA-02299
  • ORA-00001
  • UNIQUE KEY
  • UNIQUE VIOLATION
  • Duplicate key
  • Value violates unique constraint
  • Chave duplicada
  • CREATE UNIQUE INDEX
  • Cannot insert duplicate key row in object
  • duplicate key value
Essa situação de duplicidade de registros, porém, pode tornar-se um transtorno maior: no caso de existência de mais de um registro no banco de dados igual, as rotinas acabam “se confundindo” e trazendo rotinas com resultados errados, somas duplicadas e até prejuízos à integridade da base de dados.
Nesses casos é necessário realizar um processo de limpeza desses registros. O que é imprescindível nesse processo é ter um conhecimento aprofundado da regra de negócio da aplicação para eleger qual ou quais registros devem ser eliminados. Um erro aqui pode ser fatal para a operação do banco de dados.
Se você precisar de ajuda para identificar quais são esses registros que devem ser limpos, há uma rotina chamada CHECKDUPL no Protheus que faz esse tipo de análise. Utilizando o comando

SELECT com GROUP BY diretamente no banco de dados é possível resolver essa situação também. Com isso descobre-se quais são os registros duplicados, se faz sua eliminação e, ao terminar esse processo,  se ativanovamente a restrição UNIQ dessa tabela (esse é o passo mais importante!).
Para contar com especialistas que podem ajudar você a ter seu Protheus e bancos de dados monitorados e funcionando sem maiores contratempos, fale com a InfraDB que oferece serviços que otimizam seus investimentos e garantem que sua estrutura de TI funcione para o sucesso do seu negócio.