Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verletzung der Eindeutigkeitsbeschränkung während des Einfügens:Warum? (Orakel)

Vermutlich, da Sie keinen Wert für die DB_ID angeben -Spalte wird dieser Wert durch einen Trigger auf Zeilenebene vor dem Einfügen ausgefüllt, der in der Tabelle definiert ist. Dieser Auslöser wählt vermutlich den Wert aus einer Sequenz aus.

Da die Daten (vermutlich kürzlich) aus der Produktionsdatenbank verschoben wurden, würde ich wetten, dass beim Kopieren der Daten die Sequenz nicht ebenfalls geändert wurde. Ich würde vermuten, dass die Sequenz Werte generiert, die viel niedriger sind als die größte DB_ID die sich derzeit in der Tabelle befindet, die zu dem Fehler führt.

Sie können diesen Verdacht bestätigen, indem Sie sich den Trigger ansehen, um festzustellen, welche Sequenz verwendet wird, und eine

ausführen
SELECT <<sequence name>>.nextval
  FROM dual

und vergleiche das mit

SELECT MAX(db_id)
  FROM cmdb_db

Wenn die Sequenz, wie ich vermute, Werte generiert, die bereits in der Datenbank vorhanden sind, können Sie die Sequenz inkrementieren, bis sie unbenutzte Werte generiert, oder Sie können sie ändern, um den INCREMENT festzulegen zu etwas sehr Großem, hole dir einmal nextval und setze das INCREMENT zurück zu 1.