[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Maximale Satzwartezeit

    Hallo,

    ich möchte beim Chain eine Satzsperre abfangen.
    In der Datei sind viele Zugriffe von vielen Usern wie lesen, schreiben, updaten und löschen.
    Mit CHGPF FILE(Lib/BestellF) sehe ich das bei der Satzwartezeit mit 60 Sekunden belegt ist.

    Falls ich das jetzt auf *IMMED ändere, was habe ich für Vor bzw. Nachteile?

    Wie definiert ihr so die Satzwartezeit bzw. fragt die Sperren ab?

    Gruß Tarki


    Code:
    Maximale Dateiwartezeit  . . . .   *IMMED        Zahl, *SAME, *IMMED, *CLS  
    Maximale Satzwartezeit . . . . . > 60            Zahl, *SAME, *IMMED, *NOMAX

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hi,

    die Satzwartezeit veranlasst das System bei einem
    Recordlock diese Zeit zu warten um danach die Meldung
    an dein Programm zu senden.

    Wenn keine Wartezeit definiert ist, erhält dein Pgm die Meldung direkt.
    Gruss
    Michael

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Hallo Tarki,

    bei uns ist die Wartezeit in der Regel auch auf 60 Sekunden gesetzt. Manchmal ist das zu lange. Mit OVRDBF kann man die Wartezeit "fallbezogen" verändern, ohne sie global für die Datei zu ändern. Es kommt bei uns schon ab und zu vor, dass User auf einen Satz warten und dann reinkommen, wenn der sperrende User den Satz verlässt. Wenn wir den Wert auf *immed stellen würden, würde das System ja sofort einen Fehler schmeißen (bzw. das Programm sollte das natürlich abfangen).

    Dieter

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... naja, mit den default Wartezeiten da haben sich ein paar in Rochester zusammengesetzt und intensiv gemeinsam an nix gedacht: der Datei Wait steht auf immed und der Satzwait auf 60 sec. In korrekt programmierten Anwendungen dauert ein Record Lock ein paar Millisekunden und was nach 1 sec. nicht da ist, kann Stunden dauern - weil ein Hornochse (in Worten: Hornochse) oder eine Hornkuh (in Worten: Hornkuh) von Programmierer einen Satz mit Sperre liest und dann einen Bildschirm ausgibt, der auf eine Benutzer Eingabe wartet.
    Wenn man Transaktions sicher arbeitet (also mit Commit Steuerung) kann man den Satz wait auf 2 bis 5 sec. setzen und wenn man gerade dabei ist, den File wait auf den doppelten Satz wait.

    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/

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Ich verstehe nicht, wie commit Steuerung das Sperrproblem lösen sollte. Wenn ich z.B. den Kunden nicht sperre, solange ein User daran arbeitet, würde ein weiterer User den Kunden ja gleichzeitig bearbeiten können. Das bedeutet, dass ich die Änderungen eines Users zum Schluss verwerfen müsste nach dem Motto: "Ätsch: Du hast zwar sehr viel erfasst, aber leider kann ich deine Änderungen nicht speichern, weil ein anderer User inzwischen etwas geändert hat". Das ist bei uns kein gewolltes Verhalten einer Anwendung. Wenn ich einen in Bearbeitung befindlichen Kunden bearbeiten möchte, bekomme ich eine Meldung "Der Kunde wird gerade von User xxx bearbeitet".

    Dieter

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    Eine Satzsperre zu halten um sicher zu stellen, dass dieser von niemandem geändert werden kann ist generell keine gute Lösung.
    Dafür sollte man sich andere Ansätze überlegen
    *) Timestamp der letzten Änderung, wenn du wissen willst ob inzwischen ein User was geändert hat
    *) Kennzeichen in der Tabelle setzen, wenn der Kunde gerade in Bearbeitung ist
    *) etc. etc.

    Was der andere Dieter gemeint hat, war dass durch CC eine Kette an Prozessen (Update, Delete, Insert) sicherer durchgeführt werden kann.
    Jedoch wurde das hier eh schon öfters besprochen.

    lg Andreas

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Hallo Andreas,

    danke für die Info. Ist schon klar, dass Commitment Control Transaktionen sicherer macht. Mir ging es darum, dass ich es nicht sinnvoll finde, mehreren User gleichzeitige Änderungen zu erlauben und diese später zu verwerfen. Dieses Konzept des "optimistic locking" halte ich für die meisten Anwendungen für nicht sinnvoll. Bzw. mir fällt im Moment überhaupt keine Anwendung ein, wo das sinnvoll ist. Es kann natürlich sein, dass ein anderes Verfahren schwieriger zu implementieren ist. (Z.B. Webanwendungen, in denen beliebige User ihre Anwendung mittendrin zuklicken). Als User fände ich es sehr frustierend, meine angefangene Änderung später nicht speichern zu können.

    Dieter

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hier hilft ein logische Sperrtabelle, auch für Transaktionen.
    In diese trägt man seinen Sperrgrund ein und kann ebenso darauf prüfen.
    Dieter hat dies schon des öfteren erklärt.
    Mit AtExit-Methoden, Commit-Ressource o.ä. kann man auch bei abnormalem Ende des Jobs für das Aufräumen solcher Sperrgründe sorgen.
    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
    Apr 2012
    Beiträge
    360
    Leider kenne ich den Begriff Sperrtabelle nicht.
    Wie könnte ich mich in das Thema am besten einlesen?

    lg

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das ist einfach eine Tabelle, die i.W. einen Schlüssel und einen Wert enthält.
    Diese Tabelle kannst du ja mit einer Satzwartezeit von 1 Sekunde definieren.

    Wenn du eine Ressource (z.B. Kunde) sperren willst, prüfst du, ob in dieser Tabelle der Satz bereits durch einen Eintrag gesperrt ist, ansonsten trägst du dich halt selber ein.
    Das Ganze unter CommitControl, damit das eben sicher ist.
    Beispiel:

    if lesenForUpdate() = false;
    if schreiben() = false;
    // ein anderer war schneller
    endif;
    else;
    UpdateSperre();
    endif;
    commit;

    Machwas(); // Reminizenz an Dieter

    deleteSperre();

    Die Sperrmimik packt man am besten in eigene Programme mit eigener ACTGRP, damit man mit der eigenen Transaktion nicht in Konflikt kommt.

    Literatur zu Anwendungslogik gibts da glaube ich nicht .
    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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... die Bemerkung mit dem Commit bezog sich darauf, dass man bei Commit nicht unter die angegebene Satzwartezeit geht. Ohne Commit könnte man das noch kürzer setzen.

    Ansonsten finde ich die Debatte seltsam, außer bei DB2/400 macht man überall optimistic locking und keiner beschwert sich darüber, wenn das den Anwendern wirklich wichtig wäre, müsste doch die AS/400 Software der Renner schlechthin sein, in Wirklichkeit wollen die mesiten die doch eher loswerden...

    D*B

    Zitat Zitat von dschroeder Beitrag anzeigen
    Ich verstehe nicht, wie commit Steuerung das Sperrproblem lösen sollte. Wenn ich z.B. den Kunden nicht sperre, solange ein User daran arbeitet, würde ein weiterer User den Kunden ja gleichzeitig bearbeiten können. Das bedeutet, dass ich die Änderungen eines Users zum Schluss verwerfen müsste nach dem Motto: "Ätsch: Du hast zwar sehr viel erfasst, aber leider kann ich deine Änderungen nicht speichern, weil ein anderer User inzwischen etwas geändert hat". Das ist bei uns kein gewolltes Verhalten einer Anwendung. Wenn ich einen in Bearbeitung befindlichen Kunden bearbeiten möchte, bekomme ich eine Meldung "Der Kunde wird gerade von User xxx bearbeitet".

    Dieter
    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
    Nov 2003
    Beiträge
    2.403
    Es sind doch meist nur die Leute, die nur mit den Augen mit dieser Software arbeiten (= Entscheider), welche die AS/400-Software loswerden wollen.
    Zitat Zitat von BenderD Beitrag anzeigen
    ... wenn das den Anwendern wirklich wichtig wäre, müsste doch die AS/400 Software der Renner schlechthin sein, in Wirklichkeit wollen die mesiten die doch eher loswerden...

Similar Threads

  1. maximale Anzahl LOB-Lokatoren
    By Cray.Wolf in forum NEWSboard Java
    Antworten: 2
    Letzter Beitrag: 09-11-11, 09:15
  2. Maximale Dateigröße im IFS
    By Techniker in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 21-10-06, 17:47
  3. Antworten: 2
    Letzter Beitrag: 02-03-06, 07:38
  4. Maximale Anzahl Spooldateien pro Job
    By abornmann in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 04-10-05, 09:34
  5. Maximale Anzahl Printfiles im RPG
    By gussi40 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-12-04, 10:07

Berechtigungen

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