Speziell in Testsystemen kommt es öfter mal vor, dass Sequenzen irgendwann volllaufen und Oracle mit einem ORA-08004 abbricht.
Wenn es nackte Umgebungen sind, kann man aber relativ einfach die Sequenzen resetten, seit Oracle 11g gibt es folgende Möglichkeit, eine Sequenz zu resetten:
ALTER SEQUENCE sequenzname restart START WITH 1
um die Sequenz “sequenzname” wieder von 1 zu starten.
Mit Hilfe einer PL/SQL-Routine kann man dann entsprechend ein Reset aller Sequences durchführen:
DECLARE CURSOR v_cur IS SELECT sequence_name FROM user_sequences; BEGIN FOR v_rec IN v_cur LOOP EXECUTE IMMEDIATE 'ALTER SEQUENCE '||v_rec.sequence_name||' RESTART START WITH 1'; END LOOP; END; /
Easy oder?
Benennt man die Sequenzen nach einem bestimmten Muster oder pflegt Meta-Daten zur Beziehung zwischen Sequenzen und Tabellen-ID-Spalten lässt sich dann auch leicht die maximale ID ermitteln und die Sequenz entsprechend auf den max+1-Wert setzen.
Dazu aber in meinem nächsten Post.