[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    444

    Replaced Programm verursacht Fehler

    Hallo zusammen,

    mein Problem ist, dass ich, nachdem ich ein Programm umgewandelt habe, plötzlich falsche Daten in meiner Datei hatte. Die Sätze wurden upgedated aber die Mengen blieben unverändert. Jetzt dachte ich zunächst, dass dies meine Änderung verursacht hat. Nachdem ich aber im Journal nachgeschaut habe, habe ich gesehen dass die Änderungen nicht von meinem Programm gemacht wurden sondern von Q6E43694A5 was mir sehr auf die ersetzte Kopie nach der Umwandlung hinweist. Da es so ist dass Programm A Programm B aufruft (Programm B ist das was ich umgewandelt habe) und dieses mit Return beendet wird und somit ja auch die Variablenwerte behält nach dem Verlassen hätte ich gerne gewusst, ob es Problematiken gibt wenn die vom System erstellte Kopie mit diesen Werten arbeiten muss ? Wie gesagt, alle fehlerhaften Sätze hat die vom System erstellte Kopie verursacht.

    Vielleicht kann mir da jemand helfen ob es dafür einen Grund geben könnte

    Viele Grüße Harald

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dies ist generell ein Problem, wenn aktive Programme im laufenden Betrieb ersetzt werden.
    Dies erfolgt durch den Compiler automatisch, da das alte Objekt in QRPLOBJ verschoben wird und dann das neue Objekt erst erstellt wird.
    Somit arbeiten alle aktiven Programme mit der alten Version weiter bis sie selber inaktiv werden (return mit *INLR = *ON) oder der Job beendet wird.
    Das System erstellt keine Kopie!

    Ursache ist, dass ein Programm beim 1. Aufruf alle Adressen auf Programmobjekte lädt, des es ggf. aufrufen könnte. Bei *INLR = *ON wird das Programm beim Return deaktiviert, so dass beim nächsten Aufruf die Adressen neu ermittelt werden.
    Das Verschieben eines Objektes in eine andere Lib ändert nicht die Adresse des Objekts, sondern nur die Adresse seines Kontexts, also den Standort. Ebenso gilt dies für das Umbenennen eines Objekts, die Adresse bleibt gleich.

    Bei ILE-Objekten verhält es sich da durchaus mal anders. Z.B. lassen sich ILE-Trigger-Programme auf diese Weise nicht verschieben, da es hier Objektsperren auf die Programme gibt.
    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
    Nov 2003
    Beiträge
    2.304
    HIer steht, wann das aufzurufende Programm neu gesucht wird und wann nicht:

    Parsing Program Names on a Call

  4. #4
    Registriert seit
    May 2004
    Beiträge
    444
    Die Informationen sind hilfreich, erklären mir aber nicht ob es möglich ist, dass wenn das System das alte Objekt aus QRPLOBJ verwendet sich dadurch die Variableninhalte zerschießt. Also Pgm A ruft PGM B auf. PGM B setzt Variableninhalte und beendet mit RETURN. Dann ruft PGM A wieder PGMB auf. Variableninhalte sind noch vorhanden. PGMB wird wieder mit RETURN beendet. Jetzt wandle ich PGMB um. PGM A ruft jetzt "PGMB" aus QRPLOBJ auf. Hat der jetzt noch die Variableninhalte oder könnten die da verlorgen gegangen sein ?

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Für die aktiven Programme ändert sich da überhaupt nichts. Das neue Programm ist denen ja vollkommen unbekannt und es ist dann so, als wenn das neue Programm noch gar nicht existiert.
    Deinen Fehler musst du u.U. anders erzeugt haben.

    Was auch vorstellbar wäre ist der Ansatz, dass dein neues Programm nicht bei ersten (2., 3., ) Mal funktionierte und das laufende Programm sich da dann irgendwann eine nicht funktionierende Version genommen hat.
    Prüfen kannst du das (falls noch kein IPL gelaufen ist) in der QRPLOBJ, da in der Beschreibung zu Qxxxx der Ursprungsname enthalten ist. Ggf. gibt es also mehrere Qxxx-Versionen zu dem Original.
    Denn das Verschieben passiert bei jedem Compile, unabhängig ob das Programm verwendet wird oder 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

  6. #6
    Registriert seit
    Dec 2014
    Beiträge
    310
    Vor allem ist eines wichtig:
    Beim Umwandeln wird die alte Version NICHT wirklich in die QRPLOBJ verschoben, sondern bleibt im Speicher exakt dort stehen, wo sie vorher schon war.
    Es wird lediglich die logische Bibliothekszuordnung geändert!
    Die Variablen etc.. bleiben daher zu 100% erhalten!

    (EDIT: Sehe gerade, dass das (nur mit anderen Worten) ohnehin bereits so beschrieben wurde - war etwas zu schnell :-) )

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Hatte ich das nicht eindeutig genug beschrieben?

    "Das Verschieben eines Objektes in eine andere Lib ändert nicht die Adresse des Objekts, sondern nur die Adresse seines Kontexts, also den Standort. Ebenso gilt dies für das Umbenennen eines Objekts, die Adresse bleibt gleich."

    Bei dem 1-Adress-System der AS/400 ist es unerheblich ob sich ein Objekt auf der Platte oder bereits im Speicher befindet.

    Viel wichtiger zu wissen ist:
    Die Adresse eines Programmes mit konstantem Namen wird bereits beim Start des Programmes ermittelt selbst wenn es nicht aufgerufen wird.
    Da kann dann selbst Stunden später bei einem Dauerläufer plötzlich eine alte Version aufgerufen 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

  8. #8
    Registriert seit
    May 2004
    Beiträge
    444
    Ich glaube das alles was hier steht und verstehe es auch nur meine Fakten sind einfach eindeutig, was dagegen spricht das die Variableninhalte erhalten bleiben

    Alle Daten wurden (schon Jahre) richtig geändert
    Programm ist umgewandelt
    Daten sind teilweise falsch und bei denen die falsch sind steht als Programm das Qxxxx im Journal als Update-Programm drin
    Alle vorherigen Updates vor der Umwandlung sind korrekt und alle die nach der Umwandlung das Programm gestartet haben und somit sowieso die neue Version hatten, sind auch korrekt.
    Daraus ergibt sich für mich, dass es Probleme mit der "Kopie" aus QRPLOBJ gab.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Was immer da passiert ist:
    Es gibt keine Kopie!
    Sonst würde das Verschieben aktiver Programme nicht funktionieren (siehe Adresserklärung).
    Der Compiler greift auch nicht in laufende Jobs ein.
    Im Nachhinein ist eine Analyse halt nicht mehr möglich und ein Fall wie deiner ist mir noch nie untergekommen.

    Du kannst es gerne auch selber mit RNMOBJ und MOVOBJ eines aufgerufenen Programmes ausprobieren. Dieses kannst du sogar im Debugger anhalten.
    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
    May 2004
    Beiträge
    444
    Vielen Dank für die Hilfe und für die genauen Erläuterungen. Die Daten welche falsch waren habe ich korrigiert und seitdem ist auch kein weiterer Fehler aufgetreten. Die Fehler waren tatsächlich nur in der Übergangsphase als welche noch die alte Version im Stack hatten. Wie gesagt, auch die alte Version hat keine Fehler verursacht nur die "Kopie" während der Übergangsphase. Ich hab das übrigens auch verstanden, dass dies keine Kopie ist, allerdings verstehe ich nicht warum beim Objekt Qxxxx in Bibliothek QRPLOBJ der Typ *PGM steht. Für mich ist das eine Kopie des alten Programms und genau dieses Programm ist als Programm welches die Änderung in der Datei gemacht hat im Journal zu sehen

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ganz einfach:
    Du erstellst ein Programm mit dem Namen XXX und erhältst ein Objekt vom Typ *PGM.
    Das Objekt wird in einen eindeutigen Namen Qxxx umbenannt und die Elterneigenschaft in QRPLOBJ geändert. Da es, wiederholt, keine Kopie sondern das laufende Programm ist, behält es ja außer seinem Namen die vollkommene Identität als Programmobjekt.
    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

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Sieh dir mal mit DSPOBJD die Objektbeschreibung des Objekts Q6E43694A5 der Art *PGM in Bibliothek QRPLOBJ an. Wann wurde es erstellt?

Similar Threads

  1. Programm aus QRPLOBJ wird dem echten Programm vorgezogen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-01-17, 14:36
  2. Antworten: 7
    Letzter Beitrag: 23-03-15, 18:21
  3. Antworten: 2
    Letzter Beitrag: 06-09-02, 08:59
  4. Fehler im C-Programm bei SQLALLOCENV
    By delphix in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 06-03-02, 16:07
  5. PC-Programm
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-07-01, 08:59

Berechtigungen

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