[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2009
    Beiträge
    8

    SEQUENCE Problem beim ROLLBACK

    Wir nutzen das DB2 Objekt SEQUENCE, um einen Nummernkreis zu verwalten. Alles funktioniert wunderbar, nur bei einem ROLLBACK wird die mit NEXT VALUE ermittelte nächste Nummer nicht zurückgesetzt.

    Laut IBM i information center können SEQUENCES nicht unter Transaktionskontrolle gesetzt werden:

    "Sequences are not under transaction control. Executing a ROLLBACK statement does not affect the current value generated and consumed by executing a NEXT VALUE expression."

    Hat jemand ein ähnliches Problem und eine Lösung, um eine Art ROLLBACK der fortlaufenden Nummer zu erreichen?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Eine Sequence darf nicht per Rollback zurückgesetzt werden !

    Da diese ja von mehreren Job's in separaten Transaktionen hochgezählt werden kann, würde ein Rollback einer einzelnen Transaktion den Zähler für die anderen Transaktionen verfälschen bzw. unbrauchbar machen.

    Wenn du sicher bist, dass du die Sequenz nur alleine benötigst, kannst du diese mit ALTER SEQUENCE selber zurücksetzen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... da braucht man eine eigene getKey(Tabelle) mit einer entsprechenden Key Tabelle. Falls man die dann in Commit einbezieht, serialisiert das natürlich das schreiben von Sätzen (sprich: geht immer nur nacheinander).

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Oct 2009
    Beiträge
    8
    Ich müsste auf jeden Fall garantieren, dass der Nummernkreis innerhalb der Tabelle, welche eine fortlaufende Nummer bezieht und in ein Feld schreibt, lückenlos ist. Mir ist klar, dass ich mit ALTER SEQUENCE die Sequenz selber zurücksetzen kann. Was passiert allerdings, wenn die Transaktion vor dem ALTER SEQUENCE Statement aus irgend einem Grund abbricht? Dann habe ich eine Lücke im Nummernkreis. Ich muss hierzu noch anmerken, dass nicht jeder Datensatz in meiner Tabelle die oben erwähnte fortlaufende Nummer bezieht, sondern nur ganz bestimmte Datensätze, welche dann eben in einem lückenlosen, geschlossenen Nummernkreis stehen müssen.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dann musst du Dieters Vorschlag aufnehmen und die Nummernvergabe über einen eigenen Tabellensatz durchführen, der natürlich auch journalisiert werden muss.
    Im Falle eines Rollbacks werden eben auch diese zurückgedreht.

    Bedenke aber, dass dieser Nummern-Satz bis zum Commit/Rollback gegen Updates aus anderen Transaktionen gesperrt bleibt und ggf. beim Update dann ein Timeout (default 60 Sekunden) auftritt!

    Da auch ein ALTER SEQUENCE nicht journalisiert wird, liegt es rein an dir zu überlegen, was passieren kann.
    Berücksichtigen musst du lediglich, ob deine Transaktionen quasi parallel von mehreren Job's durchgeführt werden können.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... lückenlos lässt sich mit sequence nicht erzwingen.
    eine getKey als User defined function unter commit sollte es tun (da gibt es was auf meiner OpenSource Seite).
    Falls man die Serialisierung vermeiden will und nur Lückenlosigkeit braucht, könnte man auch eine Neuvergabe der Lücken, in Betracht ziehen. Da sich das Ganze nach Revisonsanforderung anhört, muss man das mit denen abstimmen!!!

    D*B

    Zitat Zitat von grantefux Beitrag anzeigen
    Ich müsste auf jeden Fall garantieren, dass der Nummernkreis innerhalb der Tabelle, welche eine fortlaufende Nummer bezieht und in ein Feld schreibt, lückenlos ist. Mir ist klar, dass ich mit ALTER SEQUENCE die Sequenz selber zurücksetzen kann. Was passiert allerdings, wenn die Transaktion vor dem ALTER SEQUENCE Statement aus irgend einem Grund abbricht? Dann habe ich eine Lücke im Nummernkreis. Ich muss hierzu noch anmerken, dass nicht jeder Datensatz in meiner Tabelle die oben erwähnte fortlaufende Nummer bezieht, sondern nur ganz bestimmte Datensätze, welche dann eben in einem lückenlosen, geschlossenen Nummernkreis stehen müssen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Oct 2009
    Beiträge
    8
    Alles klar, danke für eure Ratschläge!

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Problem mit Steuerzeichen in Datenbank?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-10-06, 10:07
  3. Authorization Problem nach ändern der Primary Group
    By ChrisX in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-10-06, 15:31
  4. Merkwürdiges Problem in VRPG
    By Flappes in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 06-10-06, 08:39
  5. Problem ODBC und VB.NET
    By Marsman in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-07-06, 10:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •