[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    After trigger liest 'sich selber'

    Hi,
    Wir haben einen Trigger, der als after insert aufgerufen wird.
    Er ruft ein Buchungspgm. Dieses ruft div. andere Programme, die u.a. den frisch geschriebenen Satz lesen. Kann es sein, das der Satz nicht gefunden wird (ab und zu), da der Vorgang des schreibens ja noch nicht 100 % abgeschlossen ist?
    Wird der Job debug't wird der Satz jedesmal gefunden, läuft er ohne Debug meldet er häufig, nicht immer: Kein Satz mit diesem Schlüssel.
    Mal abgesehen von dem 'Suboptimalen Programmdesign', kann das die Ursache sein ? ( V5R2, neueste PTF stand, )
    (rufen heist hier CALL, nicht submit !!)
    Danke
    Robi

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

    was hat die Datei für eine Force Ratio (DSPFD)? wenn der > 1 ist, dann steht das Ding noch nicht auf Platte.

    Dieter Bender

    PS: vom Programm Design kann man eben nicht absehen. Lausiges Design wird mit Programm technischer Komplexität abgestraft und gutes Design (meist) durch Einfachheit und Robustheit von Lösungen belohnt!!!


    Zitat Zitat von Robi Beitrag anzeigen
    Hi,
    Wir haben einen Trigger, der als after insert aufgerufen wird.
    Er ruft ein Buchungspgm. Dieses ruft div. andere Programme, die u.a. den frisch geschriebenen Satz lesen. Kann es sein, das der Satz nicht gefunden wird (ab und zu), da der Vorgang des schreibens ja noch nicht 100 % abgeschlossen ist?
    Wird der Job debug't wird der Satz jedesmal gefunden, läuft er ohne Debug meldet er häufig, nicht immer: Kein Satz mit diesem Schlüssel.
    Mal abgesehen von dem 'Suboptimalen Programmdesign', kann das die Ursache sein ? ( V5R2, neueste PTF stand, )
    (rufen heist hier CALL, nicht submit !!)
    Danke
    Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Wird der entsprechende Datensatz wirklich immer korrekt geschrieben? Vielleicht tritt ab und zu ja auch ein Fehler auf und der Datensatz wird dann nicht geschrieben?

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Force Ratio steht (natürlich) > 1

    Seltsam ist aber, das andere Abläufe (Auftragskopf schreiben, Auftrags Detail erfassen liest vorher auftragskopf) die absolut ähnlich sind, nur ohne Trigger seit Jahren funktionieren. Und mit Debug krig ich's ja auch nicht hin.

    Zum Design: Das ist immer solange gut, bis der Kunde alles ganz anders will als ursprünglich besprochen. Kennt doch jeder. Ich weis schon das es in diesem fall nur 'Suboptimal' ist
    Robi

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    @Pikatchu
    dann würde der trigge nicht anspringen

  6. #6
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Vielleicht hilft es ja auch direkt nach dem Schreiben des Datensatzes einen FEOD auf die Datei abzusetzen, damit der Satz sofort auf die Platte geschrieben wird. Wir hatten auch schon solche Fälle, dass sporadisch manche Sätze noch nicht geschrieben waren und somit gefehlt haben, obwohl der WRITE bereits ausgeführt wurde. Mit dem FEOD war das Problem behoben.

    Gruß,
    KM

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Würd ich gerne machen, aber ein Trigger läuft an, bevor das Programm das den write macht die Kontrolle (die Möglichkeit zum feod) bekommt.

    kann ich also davon ausgehen, das das Design schuld ist ?
    Robi

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

    wieso natürlich???
    Dass ein Wackelhaufen woanders funktioniert belegt nix, anderes Verhalten kann auch an unique constraints oder Indexen liegen. Die debug Argumentation schon garnicht, unter Debug läuft manches ein wenig anders als ohne, insbesondere wesentlich langsamer, deshalb muss man das auch separat starten.
    Entweder reicht man den Satz durch, oder man muss forciert schreiben, oder man akzeptiert halt einen gewissen Schwund.

    mfg

    Dieter Bender



    Zitat Zitat von Robi Beitrag anzeigen
    Force Ratio steht (natürlich) > 1

    Seltsam ist aber, das andere Abläufe (Auftragskopf schreiben, Auftrags Detail erfassen liest vorher auftragskopf) die absolut ähnlich sind, nur ohne Trigger seit Jahren funktionieren. Und mit Debug krig ich's ja auch nicht hin.

    Zum Design: Das ist immer solange gut, bis der Kunde alles ganz anders will als ursprünglich besprochen. Kennt doch jeder. Ich weis schon das es in diesem fall nur 'Suboptimal' ist
    Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Ist vielleicht eine COMMIT-Steuerung vorhanden und werden ab und zu Datensätze wieder durch ein ROLLBACK entfernt, nachdem sie geschrieben und der INSERT-Trigger aufgerufen wurde?

    An alle: Ist das wirklich so, dass ein neuer Datensatz unter Umständen nicht gleich nach dem Anlegen zum Lesen verfügbar ist?

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

    Rollback schlägt erst nach dem Trigger zu, während der Aktivität des Triggers ist der Satz da (aber gesperrt).
    Bei entsprechender Blockung ist das durchaus so; gesteuert wird das durch FRCRATIO (PF und LF!!!), SEQONLY und wohl auch durch unique Indexe und anderes beeinflusst; deshalb sollte man mit so etwas sorgfältig umgehen.
    Wer innerhalb von einer Transaktion (Auftragskopf und Positionen schreiben) nicht immer wieder denselben Satz lesen will (wofür es keinen vernünftigen Grund gibt!!!) und seine Keys sauber ermittelt, wozu ihn Commitment Controll fast schon zwingt, der hat diese Probleme noch nie gehabt!!!


    mfg

    Dieter Bender


    Zitat Zitat von Pikachu Beitrag anzeigen
    Ist vielleicht eine COMMIT-Steuerung vorhanden und werden ab und zu Datensätze wieder durch ein ROLLBACK entfernt, nachdem sie geschrieben und der INSERT-Trigger aufgerufen wurde?

    An alle: Ist das wirklich so, dass ein neuer Datensatz unter Umständen nicht gleich nach dem Anlegen zum Lesen verfügbar ist?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    @bender
    Natürlich, weil ich keine Anwendung kenne die das auf 1 hat.
    zu Wackelhaufen: kein Komentar

    @Pikatchu
    kein Commit

    und
    Normalerweise (innerhalb eines Jobs) funktioniert das
    Wenn ein submitteter Job sofort den frischgeschriebenen Satz lesen will ist ein FEOD nötig.
    Im Trigger Fall hat ich noch nie einen Wackehaufen programmiert

    Robi

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

    das Kriterium ist da wohl nicht der Job, sondern der offene Datenpfad (plus die Zufallskomponente, wann nun gerade die FRCRATIO voll ist) und da stützen sich zuweilen zwei schwankende Gestalten gegenseitig; wenn in einer Anwendung Dateien mit share(yes) geöffnet werden, dann funzt das, in dem Trigger kann man genau dies nicht sicherstellen und es funktioniert manchmal.
    Mit Datenbank Verarbeitung haben aber solche Vorgehensweisen nix zu tun, auch wenn man das so oft sieht, dass es mancher für normal hält.

    mfg

    Dieter Bender

    Zitat Zitat von Robi Beitrag anzeigen
    @bender
    Natürlich, weil ich keine Anwendung kenne die das auf 1 hat.
    zu Wackelhaufen: kein Komentar

    @Pikatchu
    kein Commit

    und
    Normalerweise (innerhalb eines Jobs) funktioniert das
    Wenn ein submitteter Job sofort den frischgeschriebenen Satz lesen will ist ein FEOD nötig.
    Im Trigger Fall hat ich noch nie einen Wackehaufen programmiert

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

Similar Threads

  1. SQL Trigger
    By Jenne in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 19-01-07, 09:24
  2. SQL Trigger
    By bigmoon in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-09-06, 18:26
  3. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 18:04
  4. Trigger
    By peter.kinne in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 20-04-06, 10:21
  5. Trigger / ILE RPG
    By Frank Pusch in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-05-01, 09:34

Berechtigungen

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