PDA

View Full Version : Teildatei- Satzsperren bei SQLRPGLE obwohl Programm zu



Seiten : [1] 2

ExAzubi
26-01-11, 17:59
Hallo zusammen,

bei einem SQLRPGLE habe ich folgendes Phänomen, das auf einer Datei Satz und Teildateisperren bleiben, obwohl das Programm beendet ist.

Die Cursor werden alle definitiv geschlossen, kurz vor Programmende habe ich diese exclusiv nochmals abgesetzt und im JOBLOG steht auch das versucht wurde einen nicht geöffneten Cursor zu schließen und habe auch das Programm al mit der Option CLOSECURSOR *ENDMOD gewandelt --> Kein Unterschied.

Einzig was mir sonderbar vorkam ist, das im JOBLOG immer wieder was davon steht, das ODP nicht gelöscht werden.

Was kann ich machen, das alle Sperren "verschwinden" wenn das Programm am Ende ist?

Danke an alle Helfenden.

B.Hauser
26-01-11, 18:14
Was mich verwundert ist, dass nach dem Umwandeln mit CLOSQLCSR *ENDMOD die ODPs immer noch offen sind.

Kann es sein, dass immernoch die alte Variante läuft, d.h. die bei der mit *ENDACTGRP umgewandelt wurde?
Auf deutsch heißt das, hast Du die Aktivierungsgruppe beendet, bevor Du das neuumgewandelte Programm aufgerufen hast?

Ansonsten versucht SQL immer die ODPs solange offen zu halten wie möglich, um einen FULL OPEN zu vermeiden und einen PSEUDO OPEN auszuführen. Beim Full Open werden die Access Pläne aktualisiert und der ODP neu aufgebaut und mit Daten geflüllt. Beim PSEUDO Open wird der ODP wiederverwendet und lediglich die Daten aktualisiert. Das Aufbauen des ODPs ist der zeitaufwändigste Prozess beim Ausführen eines SQL Statements.

Eine Möglichkeit (Notlösung) , die ODPs auf eine bestimmte Datei zu schließen, sofern Du sie in Deinem Programm unqualifiziert angegeben hast, ist die Bibliothek in der sich die Datei befindet aus der Bibliotheksliste zu nehmen und anschließend wieder einzufügen.

Birgitta

ExAzubi
26-01-11, 18:18
Danke,
das mit der LIB werde ich mal versuchen. Ich bin mir aber sicher, das ich das Programm in einem neuen Job hab laufen lassen, da ich ja prüfen wollte, ob die Sperren danach verschwinden.

Werde mal schauen, vielleicht handelte es sich ja nur um eine kosmische Störung ;-)

BenderD
26-01-11, 19:11
... das einzige, was (fast) alles schließt, ist ein disconnect; aber was stört denn an den ODPs???

D*B


Hallo zusammen,

bei einem SQLRPGLE habe ich folgendes Phänomen, das auf einer Datei Satz und Teildateisperren bleiben, obwohl das Programm beendet ist.

Die Cursor werden alle definitiv geschlossen, kurz vor Programmende habe ich diese exclusiv nochmals abgesetzt und im JOBLOG steht auch das versucht wurde einen nicht geöffneten Cursor zu schließen und habe auch das Programm al mit der Option CLOSECURSOR *ENDMOD gewandelt --> Kein Unterschied.

Einzig was mir sonderbar vorkam ist, das im JOBLOG immer wieder was davon steht, das ODP nicht gelöscht werden.

Was kann ich machen, das alle Sperren "verschwinden" wenn das Programm am Ende ist?

Danke an alle Helfenden.

andreaspr@aon.at
27-01-11, 07:09
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

Exec Sql Commit;
oder

Exec Sql set options Commit=*none;

Pikachu
27-01-11, 10:47
Wird das Programm mit LR auf ON beendet?

B.Hauser
27-01-11, 11:18
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

Dschainers
28-01-11, 08:45
Programm umwandeln mit COMMIT(*NONE):)

Dschainers
28-01-11, 08:46
Programm umwandeln mit COMMIT(*NONE):)

ExAzubi
29-01-11, 17:22
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?