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.