[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von ExAzubi Beitrag anzeigen
    bei einem SQLRPGLE habe ich folgendes Phänomen, das auf einer Datei Satz und Teildateisperren bleiben, obwohl das Programm beendet ist.
    Hallo,
    das klingt für mich nach Commitment-Control. Falls es so ist, entweder vor Programmende ein
    Code:
    Exec Sql Commit;
    oder
    Code:
    Exec Sql set options Commit=*none;

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Wird das Programm mit LR auf ON beendet?

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Pikachu Beitrag anzeigen
    Wird das Programm mit LR auf ON beendet?
    *INLR=*ON betrifft nur den RPG-Zyklus und nicht embedded SQL.
    ... und unter ILE funktioniert der *INLR anders als unter RPGIII, zwar werden die Dateien, die in den F-Bestimmungen definiert sind nach wie vor geöffnet und geschlossen, das Programm wird jedoch nicht aus dem Speicher entfernt. Beim nächsten Aufruf wird lediglich der (noch) reservierte Speicher neu initialisiert.
    Ein Programm wird erst durch Beenden der Aktivierungsgruppe in der es läuft aus dem Speicher entfernt.

    P.S. RPG-Zyklus meint nicht zwingend IP, sondern dass der Zyklus in jeder RPG-Main-Procedure automatisch aktiviert ist.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jun 2009
    Beiträge
    319
    Programm umwandeln mit COMMIT(*NONE)

  5. #5
    Registriert seit
    Jun 2009
    Beiträge
    319
    Programm umwandeln mit COMMIT(*NONE)

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    385
    Ich habe jetzt mal die SET OPTION CLOSECSR = ENDMOD gesetzt und zumindest die Satzsperren sind verschwunden, jetzt blieben nur noch die Teildateien geöffnet. Alles sehr merkwürdig.

    Eine Frage zur Aktivierungsgruppe, wenn ich mit Aktivierungsgruppe *NEW das Programm wandel, wird dann nicht automatisch auch beim Programmende die Aktivierungsgruppe geschlossen?

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... nochmal: die database engine betreibt einiges an caching - und das ist auch gut so!!! Was stört dich konkret an dem Verhalten???

    D*B

    Zitat Zitat von ExAzubi Beitrag anzeigen
    Ich habe jetzt mal die SET OPTION CLOSECSR = ENDMOD gesetzt und zumindest die Satzsperren sind verschwunden, jetzt blieben nur noch die Teildateien geöffnet. Alles sehr merkwürdig.

    Eine Frage zur Aktivierungsgruppe, wenn ich mit Aktivierungsgruppe *NEW das Programm wandel, wird dann nicht automatisch auch beim Programmende die Aktivierungsgruppe geschlossen?
    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
    Apr 2005
    Beiträge
    385
    Eigentlich nichts, nur in diesem konkreten Beispiel ist es, das sich bei den Dateien um "Arbeitsdateien" handelt, wenn jetzt ein weiterer User das Programm aufruft, dann klappt ggf. der CLRPFM nicht da die Datei noch offen ist.

    Ich werde es so machen, das ich die Objekte als Batchjob in die QTEMP kopiere dort wird dann geackert, und später kopiere ich die Dateien dann wieder zurück.

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von BenderD Beitrag anzeigen
    ... nochmal: die database engine betreibt einiges an caching - und das ist auch gut so!!!
    Sicher? Soviel ich weis wird die Aktivierungsgruppe *NEW automatisch vom System bereinigt, sobald das Programm beendet wird. Selbst wenn z.B. noch ein Commit offen ist.

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Sicher? Soviel ich weis wird die Aktivierungsgruppe *NEW automatisch vom System bereinigt, sobald das Programm beendet wird. Selbst wenn z.B. noch ein Commit offen ist.
    Sie Database Engine versucht die ODPs solange offenzuhalten wie möglich. Sobald die Aktivierunggruppe geschlossen wird, werden die zugeordneten Ressourcen bereinigt. Das gilt auch für die in der Aktivierungsgruppe geöffneten ODPs. Commit oder nicht Commit hat mit den geöffneten ODPs wenig zu tun. Ein Update erfolgt immer auf die Echt-Daten und nicht Daten, die in irgendwelchen temporären Objekten gespeichet sind.

    Was mich allerdings bei der ganzen Sache stört ist das Wort Teildateien:
    und zumindest die Satzsperren sind verschwunden, jetzt blieben nur noch die Teildateien geöffnet.
    Werden hier Overrides oder Aliases verwendet um auf echte Teildateien zuzugreifen.
    Ansonsten, wenn du wirklich die Datei bereinigen willst, solltest Du die Daten mit dem SQL Delete herausfegen. Sofern keine Locks bestehen wird Under the Cover ein CLRPFM ausgeführt, ansonsten werden lediglich die Datensätze gelöscht.

    Ich werde es so machen, das ich die Objekte als Batchjob in die QTEMP
    Batchjob in QTEMP!!! Bist Du sicher, das das klappt???

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... immer diese Mythen:
    @CLOSSQLCSR: F1 macht schlau!
    Gibt an, daß SQL-Cursor implizit geschlossen, mit SQL vorbereitete
    Anweisungen implizit gelöscht und Sperren, die mit LOCK TABLE
    erfolgten, freigegeben werden. SQL-Cursor werden explizit
    geschlossen, wenn der Benutzer die SQL-Anweisung CLOSE, COMMIT oder
    ROLLBACK (ohne HOLD) ausgibt.
    Schlußfolgerungen:
    1.) das sind alles logische close Operationen, ob wirklich geschlossen wird, obliegt der Database Engine (kann sich also auch jederzeit ändern!)
    2.) Wer mit Commit arbeitet, hat es hier einfacher!

    @caching: Was die Database Engine wirklich cached, ist nicht dokumentiert und kann sich damit selbst mit einem PTF ändern. Applikationen dürfen nur auf dokumentierte Eigenschaften vertrauen, alles andere ist ein klassischer Kunstfehler.
    Schlussfolgerungen:
    1.) Wer alles mit SQL macht, hat mit den vom OP angesprochenen Sperren kein Problem.
    2.) Wer Mix mit Altlasten hat, muss bei den Altlasten ansetzen. Der korrekte Weg dazu ist vor CLRPFM, RGZPFM und ähnlichem einen ALCOBJ CONFLICT(*RQSRLS) abzusetzen.

    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/

Similar Threads

  1. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Teildatei erstellen
    By Jabs in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 12-12-06, 07:59
  4. Teildatei mit SQL anzeigen
    By Rico in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-07-06, 16:25
  5. *zoned bei SQLRPGLE Programm
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-05, 13:04

Berechtigungen

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