[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2017
    Beiträge
    25

    Sichtbarkeit von 'uncommited data' durch andere Sessions

    Hallo Zusammen,

    ich habe eine Frage zur Verarbeitung mit Commit Steuerung.
    Folgendes möchte ich erreichen:

    Session A schreibt Satz in Datei als 'uncommited data'.
    Session B soll diesen Satz zu keiner Zeit sehen dürfen, d.h. Session B soll nur 'commited data' sehen dürfen.

    Session A schreibt den Datensatz wie folgt:
    exec sql set option commit *cs;
    insert into ....;

    Session B führt nun folgenden 'select' aus:
    select * from ... with cs

    Leider kann der 'select' in Session B nicht ausgeführt werden, weil der eine Satz gesperrt ist. Ich hätte gedacht er würde wenigstens die anderen Datensätze anzeigen.

    Ist das generell möglich bzw. was mache ich falsch?

    Gruß
    derMuller

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das ist bei der AS/400 "state of the art".
    D.h., es werden keine Satzversionen für alte Transaktionen vorgehalten (SQL-Server Snapshot, Firebird, o.ä.).
    Deshalb sind veränderte und neue Datensätze in einer offenen Transaktion gesperrt, bis der Commit/Rollback erfolgt.
    Eine andere Transaktion wartet mit "Read commited" also auf die Freigabe der Sperre.
    Bei "Read uncommited" wird nicht gewartet sondern der geänderte/neue Satz tatsächlich gelesen.
    Da nicht feststellbar ist, ob der Satz auch tatsächlich gültig ist, kann man sich u.U. nicht auf die Information verlassen.

    Da beim Lesen ja über die Satzwartezeit der Datei (default 1 Minute) gewartet wird, sollte also eine Transaktion, die Sperren hält, nie länger als die Satzwartezeit andauern.
    Anwendungsentwicklung => Transaktionskonzept!

    Der lesende SQL erfährt über SQLCODE/SQLSTATE warum das Lesen nicht erfolgreich war.
    Ggf. musst du für deinen Select die Anzahl gelesener Sätze zählen und per "select ... offset n rows" den gesperrten Satzt überspringen.
    Ob dabei allerdings Sperren ignoriert werden kann ich nicht sagen.
    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.286
    ... der Satz wird schon überlesen, allerdings zieht der record wait der Datei (der den idiotischen Default 60 sec. hat - bei waitfile *immed) und es wird ein negativer SQLCODE, bzw. eine CPF zurück gemeldet. Lösung ist also:
    1.) OVRDBF FILE(xxx) WAITRCD(*IMMED) für den lesenden Job
    2.) Monitor Gruppe um den fetch und Fehler ignorieren

    D*B

    PS: set option zieht nur zur compile time. set transaction kann zur Laufzeit verwendet werden.
    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
    Feb 2001
    Beiträge
    20.207
    Den OVRDBF müsste ich ja für alles verwenden.
    Damit hätte ich bei SQL aber tatsächlich das Problem, dass jede Transaktion (schließlich lese ich ja nicht nur) durch die nicht vorhandenen Wartezeit scheitert, sobald irgend wo ein Lock vorliegt.
    Und beim sequentiellen lesen konnte ich im Updatemodus noch nie über Satzsperren wegkommen und im Input-Modus lese ich auch uncommited Daten.
    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
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Den OVRDBF müsste ich ja für alles verwenden.
    Damit hätte ich bei SQL aber tatsächlich das Problem, dass jede Transaktion (schließlich lese ich ja nicht nur) durch die nicht vorhandenen Wartezeit scheitert, sobald irgend wo ein Lock vorliegt.
    Und beim sequentiellen lesen konnte ich im Updatemodus noch nie über Satzsperren wegkommen und im Input-Modus lese ich auch uncommited Daten.
    ... der OVRDBF wird nur in dem Job abgesetzt, der die Sätze überlesen soll. Sinn und Zweck der Angelegenheit sind transaktions sichere Auswertungen während des laufenden Betriebs (wobei das durchaus komplex werden kann). Unbeschadet dessen ist der Record Wait mit 60 sec. absolut schwachsinnig, was nach 2 Sekunden nicht frei ist, das kann die ganze Mittagspause dauern (wenn man das falsch macht, was manche für richtig halten).
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Ich hab's nicht ausprobiert, aber was passiert, wenn Du ans Ende des SELECT-Statements
    SKIP LOCKED DATA hinzufügst?

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... die concurrent-access-resolution-clause sollte auch gehen, ich weiß allerdings nicht wann das kam.
    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
    Nov 2017
    Beiträge
    25
    Danke für die zahlreichten Lösungsvorschläge.
    Leider war keiner davon für mein Vorhaben 100% nutzbar.
    Habe es nun aners gelöst, aber schön zu sehen dass wieder viele Wege nach Rom führen!

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    832
    Hi,

    interessanter Post.
    Für die Mitlesenden wäre aber die Lösung auch schön.

Similar Threads

  1. Spooldesigner und andere Tool Programme
    By Robi in forum NEWSboard Server Software
    Antworten: 6
    Letzter Beitrag: 23-08-17, 18:59
  2. S: 9404-200 u andere CISC
    By holgerscherer in forum NEWSboard Server & Hardware Markt
    Antworten: 5
    Letzter Beitrag: 29-01-15, 12:31
  3. Sessions disconnected nach Wechsel auf V7R1-TR8
    By schmidtke72 in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 04-12-14, 02:19
  4. CPW und Sessions
    By lemmi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 18-02-03, 20:07
  5. Andere DEV's außer QCONSOLE in QCTL??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-08-02, 14:59

Berechtigungen

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