Oracle
 sql >> Base de données >  >> RDS >> Oracle

Violation de contrainte d'unicité lors de l'insertion :pourquoi ? (Oracle)

Vraisemblablement, puisque vous ne fournissez pas de valeur pour le DB_ID colonne, cette valeur est remplie par un niveau de ligne avant le déclencheur d'insertion défini sur la table. Ce déclencheur, vraisemblablement, sélectionne la valeur à partir d'une séquence.

Étant donné que les données ont été déplacées (vraisemblablement récemment) de la base de données de production, mon pari serait que lorsque les données ont été copiées, la séquence n'a pas été modifiée également. Je suppose que la séquence génère des valeurs bien inférieures au plus grand DB_ID qui se trouve actuellement dans le tableau menant à l'erreur.

Vous pouvez confirmer cette suspicion en regardant le déclencheur pour déterminer quelle séquence est utilisée et en faisant un

SELECT <<sequence name>>.nextval
  FROM dual

et en comparant cela à

SELECT MAX(db_id)
  FROM cmdb_db

Si, comme je le soupçonne, la séquence génère des valeurs qui existent déjà dans la base de données, vous pouvez incrémenter la séquence jusqu'à ce qu'elle génère des valeurs inutilisées ou vous pouvez la modifier pour définir le INCREMENT à quelque chose de très grand, obtenez le nextval une fois et définissez le INCREMENT retour à 1.