[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    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/

  2. #2
    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?

  3. #3
    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/

  4. #4
    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

  5. #5
    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/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Nur so am Rande:

    FRCRATIO hat nix mit der Verfügbarkeit des Satzes zu tun, auch mit FRCRATIO <> 1 kann der Satz gelesen werden.

    SEQONLY wird bei Update/Insert automatisch ausgeschaltet, wenn ein Update/Insert-Trigger definiert ist.
    Gerade weil der Trigger ja jeden einzelnen Satz bearbeiten muss.

    Anders siehts da bei Input-Dateien aus. Hier kann SEQONLY verwendet werden und somit im Puffer des Programmes ein ganzer Block vorhanden ist in dem der neu eingefügte Satz eben noch nicht enthalten ist.

    Lösung:
    Beim Erstellen der Programme Blockung für die Datei ausschalten.
    SEQONLY(*NO) reicht da leider nicht, da dies das Blocken eben nicht verhindert.

    Mit ODP's ist da etwas vorsichtiger umzugehen, da sonst aktuelle Lesezeiger verstellt werden können.
    Hier kann man ggf. mit
    OVRDBF ... SHARE(*YES)
    OPNDBF ... *ALL
    das Blocken verhindern. Allerdings können hier ggf. Satzsperren von untergeordneten PGM'en aufgehoben werden so dass nachfolgende Updates auf die nase fallen (Read fehlt).
    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

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

    wir sind uns doch erst mal einig, dass die nicht gefundenen Sätze sich in einem Buffer des Programmes befinden, das den Trigger gefeuert hat?!
    - der Trigger weiß nicht wer ihn ausgelöst hat
    - der Trigger kann nicht beeinflussen ob das auslösende Programm mit share oder ohne öffnet
    - der Trigger kann nicht beeinflussen ob das auslösende Programm SEQONLY verarbeitet oder nicht
    - der Trigger kann nicht beeinflussen ob das auslösende Programm Commit verwendet oder nicht und unter welchem Sperrlevel es arbeitet
    - der Trigger soll unabhängig von diesen Konstellationen arbeiten

    mein Vorschlag mit FRCRATIO lebt mit der Hoffnung, dass FRCRATIO 1 das Blocken halbwegs sicher abschaltet, die Doku ist da ein wenig Wachsweich iSeries Information Center

    Ansonsten bleibe ich dabei: ein von einem Trigger abhängiges Programm sollte den Satz nicht erneut lesen, sondern vom Trigger das passende Image übergeben bekommen, alles andere ist instabil, was ich zuweilen salopp einen Wackelhaufen nenne, was den Autor des Programmes nicht herabwürdigen soll (sorry, falls das jemand anders versteht)

    mfg

    Dieter Bender


    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nur so am Rande:

    FRCRATIO hat nix mit der Verfügbarkeit des Satzes zu tun, auch mit FRCRATIO <> 1 kann der Satz gelesen werden.

    SEQONLY wird bei Update/Insert automatisch ausgeschaltet, wenn ein Update/Insert-Trigger definiert ist.
    Gerade weil der Trigger ja jeden einzelnen Satz bearbeiten muss.

    Anders siehts da bei Input-Dateien aus. Hier kann SEQONLY verwendet werden und somit im Puffer des Programmes ein ganzer Block vorhanden ist in dem der neu eingefügte Satz eben noch nicht enthalten ist.

    Lösung:
    Beim Erstellen der Programme Blockung für die Datei ausschalten.
    SEQONLY(*NO) reicht da leider nicht, da dies das Blocken eben nicht verhindert.

    Mit ODP's ist da etwas vorsichtiger umzugehen, da sonst aktuelle Lesezeiger verstellt werden können.
    Hier kann man ggf. mit
    OVRDBF ... SHARE(*YES)
    OPNDBF ... *ALL
    das Blocken verhindern. Allerdings können hier ggf. Satzsperren von untergeordneten PGM'en aufgehoben werden so dass nachfolgende Updates auf die nase fallen (Read fehlt).
    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
    Wenn eine Datei mit "O" geöffnet wird und ein Trigger anhängig ist, wird automatisch ins Joblog eine Nachricht eingetragen "Zugriff in SEQONLY(*NO) geändert".
    Der Open mit "U" blockt grundsätzlich nicht.
    Ein Update/Insert-Trigger verhindert automatisch das Blocken von Ausgabeoperationen.
    Da ändert auch FRCRATIO(1) nichts dran ausser dass damit die Zugriffe im allgemeinen z.T. erheblich verlangsamt werden.
    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
    .. was dann ja bedeutet, dass das Problem woanders angesiedelt sein muss...

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wenn eine Datei mit "O" geöffnet wird und ein Trigger anhängig ist, wird automatisch ins Joblog eine Nachricht eingetragen "Zugriff in SEQONLY(*NO) geändert".
    Der Open mit "U" blockt grundsätzlich nicht.
    Ein Update/Insert-Trigger verhindert automatisch das Blocken von Ausgabeoperationen.
    Da ändert auch FRCRATIO(1) nichts dran ausser dass damit die Zugriffe im allgemeinen z.T. erheblich verlangsamt 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/

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Also, ich bin noch nicht viel weiter,
    unser gesamtes Design umzubauen ist mächtig aufwändig,
    da eine Aufgabe bei uns immer von einem Pgm erledigt wird. Im 'benötigt' Fall wird es einfach nur gerufen.
    Da niemand garantieren kann, das der Satz der gelesen wurde nicht schon 5 Stunden am Bildschirm steht, bevor er verarbeitet wird, lesen wir immer in den verarbeiteten Programmen. Das ursprüngliche Verarbeitungspgm müßte ich dann zerschlagen in 'nachlesen' und 'verarbeiten'. aus dem Trigger dann nur das Verarbeitungsprogramm rufen.
    D.H. - Neuerfinden von Namensregeln, anpassen von internen Dokumetationen, Gesetz "zum finden von verwendbaren Programmen" überarbeiten, "zu Beachten" erweitern, ...

    Na ja hoffentlich hilft's


    @Bender
    der "Wackelhaufen" verärgert zuweilen schon ein bischen
    Damit lebe ich aber gerne, wenn es konstruktiv bleib

    vielen Dank

    Robi

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn ein Trigger ein anderes Programm aufruft, muss dieses sicherstellen, dass die Daten auch tatsächlich erneut gelesen werden.
    Ich kenne auch Programme, die sich "merken", welche Daten schon mal gelesen wurden und diese halt nicht nochmal neu liest.

    Im OPMRPG gabs die Anweisung FREE um ein gecalltes Programm zurückzusetzen.
    Im ILERPG gibts dies nicht mehr.

    Hier hilft nur, dem Triggerprogramm eine eigene ACTGRP zu verpassen, ggf. ein CLLE zwischenzuschalten, dass wiederum eine eigene ACTGRP bildet und dann das ursprüngliche Programm aufruft. Dieses Ursprungsprogrogramm sollte in der ACTGRP *CALLER (bei OPM standard) laufen.
    Nach dem Aufruf dann ein RCLACTGRP durchführt um eben für den nächsten Aufruf die Initialisierung sicherzustellen.

    Aber über Performance dürfen wir uns hier nicht unterhalten.
    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

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
  •