Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Violação de restrição única durante a inserção:por quê? (Oráculo)


Presumivelmente, já que você não está fornecendo um valor para o DB_ID coluna, esse valor está sendo preenchido por um nível de linha antes do gatilho de inserção definido na tabela. Esse gatilho, presumivelmente, é selecionar o valor de uma sequência.

Como os dados foram movidos (presumivelmente recentemente) do banco de dados de produção, minha aposta seria que, quando os dados fossem copiados, a sequência também não fosse modificada. Eu diria que a sequência está gerando valores muito menores que o maior DB_ID que está atualmente na tabela que leva ao erro.

Você pode confirmar essa suspeita olhando para o gatilho para determinar qual sequência está sendo usada e fazendo uma
SELECT <<sequence name>>.nextval
  FROM dual

e comparando isso com
SELECT MAX(db_id)
  FROM cmdb_db

Se, como suspeito, a sequência está gerando valores que já existem no banco de dados, você pode incrementar a sequência até gerar valores não utilizados ou alterá-la para definir o INCREMENT para algo muito grande, pegue o nextval uma vez e defina o INCREMENT volta para 1.