[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    ... nur leider gibt Get Diagnostics auch nur die Fehlermeldung, dass in der Datei eine Satz-Sperre vorliegt, aber nicht welcher Job bzw. welcher User welchen Satz blockiert.

    Hier sind übrigens die Links zu den Online-Books:
    SQL Reference - Release 6.1
    Embedded SQL Programming - Release 6.1

    Birgitta
    Birgitta Hauser

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

  2. #2
    Registriert seit
    Sep 2004
    Beiträge
    129
    Du kannst über die API QGYOLJBL das Joblog auslesen und dir die Meldung holen die du brauchst. Leider ist das dann einfach ein ganzer Textstring ohne Variablen.

    Alternativ kannst du bei einem Lock die relative Satznummer auslesen (select rrn(datei) from datei where ) und dann mit der API QDBRRCDL den Benutzer usw. auslesen. Das Ganze dann noch schön in einem Serviceprogramm verpackt und man merkt gar nicht mehr, dass SQL das eigentlich gar nicht kann. ;-)

    MfG
    Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Wobei der Select RRN ganz schön dauert, da hier grundsätzlich kein Index verwendet wird.
    Eine schnelle und vor allem gute Lösung ist das nicht.

    Was ich mich allerdings frage, wieso der SELECT gesperrte Sätze nicht liest ?
    Einen Fehler gibts eigentlich erst beim UPDATE/DELETE oder der gesperrte Satz wird einfach überlesen.
    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

  4. #4
    Registriert seit
    Sep 2004
    Beiträge
    129
    So schnell wie im RPG ist das natürlich nicht, man kann aber beim declare cursor gleich die relative Satznummer mit auslesen, dann erspart man sich das nachher. Obwohl ich eingentlich nicht so viele Locks erwarte dass es zeitlich ein Problem wird die relative Satznummer auszulesen.
    Glaube das Überlesen von gelockten Sätzen funktioniert erst bei V6.1, kann mich aber täuschen.
    Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Das Überlesen ist ja nicht das Problem.
    Ich kann durchaus gesperrte Sätze lesen!

    Allerdings darf ich den Cursor nicht als "for update" deklarieren, da im Falle des Lesens genau dann ein Sperre gesetzt wird und es ggf. zum Fehler kommt.

    SQL-Like ist das nicht.
    MS-Access / ADO.NET geht den "normalen" Weg, dass vor dem Update / Delete die aktuelle Information erst noch mal gelesen und mit dem vorherigen Zustand verglichen wird. Ist der Inhalt noch unverändert, wird geändert an sonsten ein Fehler ausgelöst.

    Dies wäre das korrekte Anwendungsverhalten, denn eine potentielle Satzsperre ohne den tatsächlichen Wunsch einer Veränderung sollte nicht erfolgen.
    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 2005
    Beiträge
    74
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wobei der Select RRN ganz schön dauert, da hier grundsätzlich kein Index verwendet wird. Eine schnelle und vor allem gute Lösung ist das nicht.
    Das Stimmt nicht, Indexe werden auch zur Ermittlung von RRN() verwendet.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Wenn du einen
    select ... where rrn() = 1234
    verwendest, kann SQL keinen Index verwenden, da es keinen Index über RRN gibt.
    Schränkst du natürlich auf weitere Schlüssel ein, werden für diese natürlich Indizees verwendet.
    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

  8. #8
    Registriert seit
    Mar 2005
    Beiträge
    74
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wenn du einen
    select ... where rrn() = 1234
    verwendest, kann SQL keinen Index verwenden, da es keinen Index über RRN gibt.
    Schränkst du natürlich auf weitere Schlüssel ein, werden für diese natürlich Indizees verwendet.
    Es ging ja in dem Beitrag davor darum, die relative Satznummer zu ermitteln und Du hattes geschrieben, es würde sehr lange dauern.
    Die Ermittlung geht durch einen entsprechenden Index sehr schnell und ich denke, das der Zugriff bzw. die Auswahl über relative Satznummer auch sehr schnell geht.

    Die von dabeda angegeben Methode mittels QDBRRCDL nutzt ich übrigens für Java, um auf der Java-Oberfläche den zu blockierenden Benutzer anzeigen zu können. Das geht sehr fix.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Dazum muss ich aber grundsätzlich den Schlüssel mit abfragen um einen Index zu benutzen.
    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

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    @Baldur
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Was ich mich allerdings frage, wieso der SELECT gesperrte Sätze nicht liest ?
    Einen Fehler gibts eigentlich erst beim UPDATE/DELETE oder der gesperrte Satz wird einfach überlesen.
    Wird ein Cursor definiert und ein Update oder Delete mit WHERE CURRENT OF, wird i.d.R. nur ein einziger ODP (open data path) verwendet. Damit muss die Sperre bereits beim Fetch und nicht erst beim Update erfolgen.

    (... genau wie beim native I/O in Update Dateien)

    Wird ein Cursor definiert und z.B. die relative Satz-Nr. oder der unique Key zurückgebracht und der anschließende Update entweder über die relative Satz-Nr. oder den unique Key gemacht, werden 2 ODPs generiert (und damit natürlich auch 2 FULL OPENS ausgeführt). In diesem Fall erfolgt die Satz-Sperre erst beim Update.

    (... man liest mit native I/O die Input-Datei ein und macht den Update auf die (gleiche) Update-Datei)

    Birgitta
    Birgitta Hauser

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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... das hat mit den ODPs allenfalls mittelbar zu tun, sondern hängt davon ab welche Art von Sperre angefordert wird und welche Art von Sperre der Satz gegenwärtig hat. Das kann unter commit alles ein wenig anders aussehen...


    D*B

    Zitat Zitat von B.Hauser Beitrag anzeigen
    @Baldur


    Wird ein Cursor definiert und ein Update oder Delete mit WHERE CURRENT OF, wird i.d.R. nur ein einziger ODP (open data path) verwendet. Damit muss die Sperre bereits beim Fetch und nicht erst beim Update erfolgen.

    (... genau wie beim native I/O in Update Dateien)

    Wird ein Cursor definiert und z.B. die relative Satz-Nr. oder der unique Key zurückgebracht und der anschließende Update entweder über die relative Satz-Nr. oder den unique Key gemacht, werden 2 ODPs generiert (und damit natürlich auch 2 FULL OPENS ausgeführt). In diesem Fall erfolgt die Satz-Sperre erst beim Update.

    (... man liest mit native I/O die Input-Datei ein und macht den Update auf die (gleiche) Update-Datei)

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

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    ... das hat mit den ODPs allenfalls mittelbar zu tun, sondern hängt davon ab welche Art von Sperre angefordert wird und welche Art von Sperre der Satz gegenwärtig hat. Das kann unter commit alles ein wenig anders aussehen...
    Kann ich mir eigentlich nicht vorstellen, vielleicht bei den hohen Commit Leveln, bei denen der READ/FETCH gelockt wird. Aber da stellt ich die Frage, ob der Satz beim Fetch überhaupt gelesen werden kann oder nicht. Bei den niederen Commit Leveln z.B. *UR (Uncommitted Read) oder *CS (Cursor Stability) funktioniert es genau so wie ich es beschrieben habe.

    Es soll übrigens Leute geben, die grundsätzlich mit Journaling und Commitment Control arbeiten

    Birgitta

    Birgitta
    Birgitta Hauser

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

Similar Threads

  1. Anzeigervariable im SQLRPGLE
    By Jenne in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 06-06-07, 11:10
  2. CPYF Fehler handling
    By RLPforum in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 05-07-06, 15:04
  3. sqlrpgle
    By guru30 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 22-02-06, 15:53
  4. SQLRPGLE
    By mk in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 17-11-05, 10:48
  5. *zoned bei SQLRPGLE Programm
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-05, 14:04

Berechtigungen

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