[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2002
    Beiträge
    792

    Frage zur Commitmentsteuerung

    Hi,

    ich habe jetzt zum ersten Mail eine Tabelle die in einem Journal aufgezeichnet wird und in die ich schreiben muss. Da wollte ich dann natürlich auch Commit nutzen. Wie schreibe ich die Daten denn dann aber fest? Jetzt ist es so das wenn ich den Insert mache und danach in die Tabelle schaue der neue Satz da ist. Wenn ich dann aber meinen Job beende, dann ist er wieder raus. Kann mir jemand vielleicht erklären wieso das so ist und was ich tun mus?? Vielen Dank im Voraus.

    Gruß

    Sascha

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Vor dem Programm auf jeden Fall STRCMTCTL *CHG
    Im Programm einfach COMMIT bzw. ROLLBACK kodieren.

    Allerdings ist im Rollback-Fall folgendes zu beachten:
    Arbeitest du mit normallen SETLL/READ/READE usw. wird nach einem Rollback der aktuelle Satzzeiger für Input-Dateien wieder auf den Stand seit letztem Commit zurückgesetzt !!

    Wenn also ein PGM z.B. bei einer Fehlerbedingung einen Rollback setzt, kann es sein dass das PGM kreist, da ja der Satzzeiger des READ zurückgesetzt wird und somit der Fehler aller Wahrscheinlichkeit wieder auftaucht.

    Also:
    Nach einem Rollback sollte man auf jeden Fall den Satzzeiger per SETLL wieder neu setzen.

    Dies gilt allerdings nur, wenn die LF auch im Journal aufgezeichnet wird.
    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
    Aug 2004
    Beiträge
    923
    Zitat Zitat von Fuerchau
    .......
    Dies gilt allerdings nur, wenn die LF auch im Journal aufgezeichnet wird.
    räusper...







    .

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Satzzeiger-Probleme betreffen ausschliesslich aufgezeichnete PF's, LF's !

    Noch was:
    Solange kein Commit erfolgt ist, ist JEDER geänderte oder eingefügte Satz für andere Job's gegen Veränderung GESPERRT ! Gelesen werden kann er aber trotzdem (mit ggf. ungeahnten Konsequenzen).

    Commit-Level:
    *CHG: nur veränderte Daten sind gesperrt
    *CS: auch eine aktuell gelesener Satz wird gesperrt und zwar auch dann wenn man READ(N) bzw. CHAIN(N) verwendet !
    *ALL: alle zugegriffene Sätze, also auch nur gelesene, bleiben bis zum Commit gesperrt

    Man sollte auch bedenken, dass sog. offene Commit's (also gesperrte Daten) nicht durch den Bediener-Dialog verängert werden (Kaffee-Problematik) !
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    @kuempi

    Die ganz vorsichtigen, die dann aber auch nix verstanden haben.
    Dann kann ich mir das Commit auch sparen, da die Aufzeichnung ja bereits reicht.
    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
    Apr 2002
    Beiträge
    792
    Hi ihr beiden,

    danke für die aufklärenden Worte. Mensch da hat sich das zur Arbeit kommen heut morgen doch schon wieder richtig gelohnt.
    Danke nochmals

    Gruß

    Sascha

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    das mit dem automatischen Rollback von offenen Transaktionen ist ja gerade der Clou an der Commit Steuerung. Egal was immer passieren mag, es bleiben keine inkompletten Transaktionen in der Datenbank drin.

    @Baldur:
    Zum überlesen gesperrter Sätze, die sich in einer Transaktion befinden ist die Sperrstufe commited read vorgesehen.

    Die Kaffepausen Problematik ist gerade mit Commit einfach und sicher zu lösen: Commit (oder gegebenen Falls ROLLBACK) vor jedem EXFMT oder anderem READ auf einen Bildschirm.

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau
    Satzzeiger-Probleme betreffen ausschliesslich aufgezeichnete PF's, LF's !

    Noch was:
    Solange kein Commit erfolgt ist, ist JEDER geänderte oder eingefügte Satz für andere Job's gegen Veränderung GESPERRT ! Gelesen werden kann er aber trotzdem (mit ggf. ungeahnten Konsequenzen).

    Commit-Level:
    *CHG: nur veränderte Daten sind gesperrt
    *CS: auch eine aktuell gelesener Satz wird gesperrt und zwar auch dann wenn man READ(N) bzw. CHAIN(N) verwendet !
    *ALL: alle zugegriffene Sätze, also auch nur gelesene, bleiben bis zum Commit gesperrt

    Man sollte auch bedenken, dass sog. offene Commit's (also gesperrte Daten) nicht durch den Bediener-Dialog verängert werden (Kaffee-Problematik) !
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    @Dieter

    Leider gibts da zwischen LowLevel-Commit (RPG) und SQL einen kleinen Unterschied.
    Im STRCMTCTL kann ich dies nicht angeben, so dass RecordlevelAccess grundsätzlich "schmutzige" Daten lesen kann.
    Im SQL kann ich per "set option commit=*rr" das so angeben, dass ich keine Schmutzdaten bekomme.

    Und was die Kaffeepause angeht, so ist das zwar mit dem Commit/Rollback klar, aber das Design der Anwendung muss passen, sonst committe ich eben doch unvollständige Daten.
    Bisherige Anwendungen erlauben auch eine Kaffeepause, da sie häufig eigene Sperr-/Recovery-Methoden entwickelt haben.
    Unter Commit sieht die Welt leider häufig anders aus, insbesonders wenn gemeinsame Daten (Stammdaten) geändert werden.

    Nicht umsonst hat sich SAP dieser Problematik mit dem BatchInput elegant aus der Affäre gezogen.
    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @Baldur: read committed ist das was as400 auch *CS nennt und das geht bei STRCMTCTL - was dann mit Rekord Löffel Ekzem passiert habe ich nicht verifiziert. (RR ist der mit den Lesesperren)

    Nochmal zur Kaffeepause: wer da Dummfug programmiert, dem ist nicht zu helfen. alles was da ohne Commit drumherum gefummelt worden ist, geht mit Commit haar genauso und ohne Commit werden ohnehin unvollstäändige Transaktionen festgeschrieben, da wird mit einem kleinen Commit vor dem EXFMT nix schlechter - und man kann keine Sperre vergessen.

    mfg

    Dieter

    Zitat Zitat von Fuerchau
    @Dieter

    Leider gibts da zwischen LowLevel-Commit (RPG) und SQL einen kleinen Unterschied.
    Im STRCMTCTL kann ich dies nicht angeben, so dass RecordlevelAccess grundsätzlich "schmutzige" Daten lesen kann.
    Im SQL kann ich per "set option commit=*rr" das so angeben, dass ich keine Schmutzdaten bekomme.

    Und was die Kaffeepause angeht, so ist das zwar mit dem Commit/Rollback klar, aber das Design der Anwendung muss passen, sonst committe ich eben doch unvollständige Daten.
    Bisherige Anwendungen erlauben auch eine Kaffeepause, da sie häufig eigene Sperr-/Recovery-Methoden entwickelt haben.
    Unter Commit sieht die Welt leider häufig anders aus, insbesonders wenn gemeinsame Daten (Stammdaten) geändert werden.

    Nicht umsonst hat sich SAP dieser Problematik mit dem BatchInput elegant aus der Affäre gezogen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Aug 2004
    Beiträge
    923
    Zitat Zitat von JonnyRico
    Hi,

    ich habe jetzt zum ersten Mail eine Tabelle die in einem Journal aufgezeichnet wird und in die ich schreiben muss. Da wollte ich dann natürlich auch Commit nutzen. Wie schreibe ich die Daten denn dann aber fest? Jetzt ist es so das wenn ich den Insert mache und danach in die Tabelle schaue der neue Satz da ist. Wenn ich dann aber meinen Job beende, dann ist er wieder raus. Kann mir jemand vielleicht erklären wieso das so ist und was ich tun mus?? Vielen Dank im Voraus.

    Gruß

    Sascha
    hello,

    wenn Du mit commitment arbeitest, legst Du sozusagen gedanklich erst mal sogen. Transaktionsgrenzen fest.
    Mal ein Beispiel wo es nicht um Kopfdatei und Positionen geht:
    Es muss ein neuer Mitarbeiter angelegt werden, und dazu muss ausserdem in einer Urlaubstabelle und in einer Kaffepausentabelle etwas hinzugefügt werden.
    Wenn Du jetzt unterwegs abschmieren würdest, könnte es sein, dass nicht alle notwendigen Sätze geschrieben wurden und der hinzugefügte Mitarbeiter keinen Urlaub oder keine Kaffeepause machen darf, weil er da nicht drin steht.
    Wenn dass jetzt unter commit gelaufen wäre, würde der Rollback dafür sorgen, dass gar kein Satz geschrieben wurde bzw. im Positivfall durch den Commit am Ende die drei Sätze in den drei Dateien "gefixt" werden.
    Man hat ergo mehr Sicherheit wenn solche Zusammenhänge benötigt werden.
    Im Extremfall kann man aber auch nach jedem write/update ein commit absetzen...
    das sind dann die ganz vorsichtigen...

    kuempi

Similar Threads

  1. Frage zum Befehl STRPCCMD
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-01-13, 10:27
  2. Frage zu WDSC bzw. CODE400
    By Mr.iSeries in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 02-09-08, 10:16
  3. SQL Frage
    By Bratmaxxe in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 24-01-07, 19:17
  4. Frage zu QZDFMDB2
    By Freezer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-10-06, 21:02
  5. Frage zu SQL UserDefinedFunction
    By cbe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 24-08-06, 17:30

Berechtigungen

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