[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.120

    Was passiert mit offenen Dateien in Serviceprogrammen?

    Hallo,
    ich bin auf ein Serviceprogramm gestoßen, in dem der Programmierer Dateien mit F-Bestimmungen im Main-Teil des Programms deklariert hat. Die Dateien haben nicht das usropn - Schlüsselwort.

    Beim Kompilieren gibt der Compiler eine Warnung aus, dass die Dateien beim Programmende nicht geschlossen werden. Soweit ist ja alles klar. Ich könnte das ja einfach beheben, indem ich die Dateien usropn öffne und schließe.

    Meine Frage ist aber: Was passiert eigentlich (bzw. was kann passieren), wenn ich das Programm so lasse und die Dateien nicht usropn öffne und schließe? Ist das für die Performance besser oder schlechter? Auf die Dateien wird immer mit einem Key zugegriffen, sodass es kein Initialisierungsproblem wegen des offen gebliebenen Programms geben kann.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Theoretisch ist das unkritisch solange man an den ACTGRP's und LIBL nicht rumspielt.
    Der 1. Open erfolgt automatisch und es bleibt bis zum Jobende auf.
    Machst du aber z.B. einen RCLACTGRP wird die Datei vom System geschlossen.
    Beim erneuten Aufruf des Serviceprogrammes bekommst du nun einen MCH36-Fehler (Speicherzugriff) da der Dateizeiger geschlossen wurde aber der Open nicht erneut durchlaufen wird.
    Dies liegt daran, dass die Laufzeit ein internes Flag setzt, und den Open nicht wiederholt.
    Ein USROPN hilft hier ebenso wenig, da der manuelle Open wiederum das interne Flag prüft und da dies ja noch gesetzt ist, den Open mit Fehler oder BZ = *on ablehnt.
    Das ständige Open/CLose kann allerdings auch wesentlich zur Verlangsamung beitragen.

    Aktuell bei einem anderen Kunden gibt es noch folgendes Problem:
    Es wird eine LIBL per CHGLIBL gesetzt und anschließend diverse Programme aufgerufen. Dabei werden auch Dateien in Serviceprogrammen verwendet.
    Nun wird nach erledigter Arbeit die LIBL wiederum mit CHGLIBL angepasst.
    Nun arbeiten aber die Service-Programme mit den zuerst geöffneten Dateien weiter, da sie ja noch geöffnet sind.
    Das Chaos ist vorprogrammiert.

    D.h., dass man bestimmte Dinge dafür nun mal nicht machen kann.
    Bei SQL wird dies ggf. noch gravierender, da man hier auf den realen Open nicht einwirken kann.
    Aber vielleicht ist SQL da etwas intelligenter, da hier u.U. durch die LIBL oder besser Current Collection eben die korrekte Tabellen geöffnet werden und somit die Tabelle aus beiden Libs geöffnet ist.

    Ein RCLACTGRP verbietet sich da nach meiner persönlichen Erfahrung.
    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
    Mar 2002
    Beiträge
    5.287
    ... dann wird die Datei bei Aktivierung des SRVPGMs automatisch geöffnet und bei der Deaktivierung geschlossen. Dabei ist es egal wodurch die ACTGRP endet (expliziter RCLACTGRP oder impliziter durch ACTGRP *NEW).
    Wiederholter Open Close ist unkritisch, da ohnehin lazy close gemacht wird.
    RCLACTGRP ist nur kritisch, wenn es noch Programme gibt, die den PROCPTR kennen, die fahren dann in den Wind, dem open close ist das egal, da ja bei erneuter Aktivierung wieder automatisch geöffnet wird.

    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/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    "Ein RCLACTGRP verbietet sich da nach meiner persönlichen Erfahrung."
    Das hat sich jedenfalls bei mir so ergeben. Hier half tatsächlich nur ein Ab-/Anmelden.

    LazyClose?
    Den gibts doch nur bei SQL.
    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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    "Ein RCLACTGRP verbietet sich da nach meiner persönlichen Erfahrung."
    Das hat sich jedenfalls bei mir so ergeben. Hier half tatsächlich nur ein Ab-/Anmelden.

    LazyClose?
    Den gibts doch nur bei SQL.
    Gesetzt den Fall PGM A hat ACTGRP HUGO und verwendet SRVPGM B, welches ACTGRP OTTO hat. Wenn ich jetzt RCLACTGRP OTTO mache, verweist PGM A weiterhin auf die alten Speicheradressen der Procedures von B, wenn A nun eine Procedure aus B aufruft, gibt es einen MCHCHK.

    Für den lazy close will ich meine Hand nicht ins Feuer legen, ich habe seit gefühlt 100 Jahren kein RLA mehr verwendet. Kritisch ist das aber keinesfalls, da der ISAM open ohnehin billig ist. Teuer könnte allerdings bei sequentiellem lesen das überlesen von gelöschten Sätzen sein, dann hat man allerdings eh' ein logisches Problem bei close und reopen.

    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/

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Vielen Dank für eure ausführlichen Antworten!

    Dieter

Similar Threads

  1. XLM-Dateien
    By jajonowak in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 05-04-17, 10:12
  2. Prototypen bei Nicht-Serviceprogrammen, Parameteränderungen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 16-02-16, 16:55
  3. Excel-Dateien im IFS
    By dino in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 18-12-14, 15:50
  4. aktuelle Liste aller offenen Commits je DB
    By itec01 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-07-14, 10:17
  5. DDM-Dateien über TCP/IP
    By Joshua in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-02-01, 14:23

Berechtigungen

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