sql >> Base de Datos >  >> RDS >> Oracle

Violación de restricción única durante la inserción:¿por qué? (Oráculo)

Presumiblemente, dado que no está proporcionando un valor para el DB_ID columna, ese valor se completa con un nivel de fila antes del activador de inserción definido en la tabla. Ese disparador, presumiblemente, es seleccionar el valor de una secuencia.

Dado que los datos se movieron (presumiblemente recientemente) de la base de datos de producción, mi apuesta sería que cuando se copiaron los datos, la secuencia tampoco se modificó. Supongo que la secuencia está generando valores que son mucho más bajos que el DB_ID más grande que está actualmente en la tabla que conduce al error.

Puede confirmar esta sospecha mirando el gatillo para determinar qué secuencia se está utilizando y haciendo un

SELECT <<sequence name>>.nextval
  FROM dual

y comparando eso con

SELECT MAX(db_id)
  FROM cmdb_db

Si, como sospecho, la secuencia está generando valores que ya existen en la base de datos, podría incrementar la secuencia hasta que generara valores no utilizados o podría modificarla para establecer el INCREMENT a algo muy grande, obtenga el nextval una vez y configure el INCREMENT volver a 1.