Dans mon cas, j'ai une séquence appelée PS_LOG_SEQ
qui avait un LAST_NUMBER = 3920
.
J'ai ensuite importé des données de PROD
sur ma machine locale et inséré dans la table PS_LOG
. Les données de production avaient plus de 20000
lignes avec le dernier LOG_ID (clé primaire) étant de 20070. Après l'importation, j'ai essayé d'insérer de nouvelles lignes dans cette table mais lors de l'enregistrement j'ai eu une exception comme celle-ci:
ORA-00001: contrainte d'unicité (LOG.PS_LOG_PK) violée
Cela a sûrement à voir avec la Séquence PS_LOG_SEQ
associée à la table PS_LOG
. Le LAST_NUMBER
entrait en conflit avec les données que j'avais importées et qui avaient déjà utilisé la valeur ID suivante de la PS_LOG_SEQ
.
Pour résoudre cela j'ai utilisé cette commande pour mettre à jour la séquence avec le dernier \ max(LOG_ID)
+ 1:
alter sequence PS_LOG_SEQ restart start with 20071;
Cette commande a réinitialisé la valeur LAST_NUMBER
et j'ai pu alors insérer de nouvelles lignes dans la table. Plus de conflit. :)
Note: cette commande alter sequence
est nouvelle dans Oracle 12c.
Note: ce article de blog
documente que l'option ALTER SEQUENCE RESTART existe, mais à partir de la version 18c, n'est pas documentée; elle est apparemment destinée à un usage interne d'Oracle.