PDA

View Full Version : Nach ExecSQL mehrere Threads aktiv



Seiten : [1] 2

chrisssiie
15-03-12, 10:40
Hallo,

ich habe das Problem, dass sobald ich in einem SQLRPGLE einen EXEC SQL (normaler Select Befehl) ein neuer Thread für meinen Job eröffnet wird (DSPJOB Auswahl 20)....


Das Problem daran, ist dass der Thread auch beim Beenden des Programmes bestehen bleibt und sobald man mehrere Threads aktiv hat, kann man nicht mehr mit wrklnk aufs QDLS zugreifen....

Woran könnte das denn liegen bzw. wie kann man das verhindern?

andreaspr@aon.at
15-03-12, 11:26
Hallo,

bitte ein paar Details!
Bekommst du beim WRKLNK eine Fehlermeldung?
Ich schätze ja ==> welche?!

Ich glaube ehrlich gesagt nicht, dass SQL daran schuld ist.

lg Andreas

chrisssiie
15-03-12, 11:39
die Fehlermeldung beim "WRKLNK QDLS" ist:

Operation ist in einem Job mit mehreren Threads nicht zulässig.

CPFA0A8


Wenn man sich mit dspjob Auswahl 20 die Threads anschaut, sieht man auch mehrere Threads, welche auf TIMW stehen.

Diese Threads werden aber erst erstellt, sobald ein Programm aufgerufen wurde, welches SQL verwendet!! (EXEC SQL)

andreaspr@aon.at
15-03-12, 11:45
Dann wären die SQL-Anweisungen die du ausführst interessant. Zusammen mit den Kompile-Paramter (H-Spec, SET OPTION Anweisung usw.)

Ich kann mich auch irren, da ich mit Threads noch nicht viel am Hut hatte, aber das da ein Thread auf TIMW steht ist doch etwas seltsam?!

chrisssiie
15-03-12, 11:59
hier mal die H-Spec:


H DEBUG(*NO)
H DECEDIT('0,')
H DATEDIT(*DMY/)
H DFTACTGRP(*NO)
H ACTGRP(*CALLER)
H OPTION(*NOXREF:*NOSECLVL:*NOEXPDDS:*NOEXT:*NOSHOWS KP) SQL-Bedingung ist eigtl. egal welche man ausführt, aber hier mal ein Beispiel:



/free
exec sql
select DECRYPT_CHAR(TRIM(LICILI), TRIM(:$SecretKeyP))
select CAST(DECRYPT_CHAR(LICILI, TRIM(:$SecretKeyP))
as CHAR(512))
INTO :$LICI
FROM ALLICI;
/end-free
Das Programm wird mit *INLR = *ON verlassen!!

achja, als 1. SQL Statement kommt noch :

Exec SQL set option commit = *none;

andreaspr@aon.at
15-03-12, 12:15
Schaut eigentlich alles normal aus.
Gib mal bei SET OPTION noch zusätzlich CLOSQLCSR=*ENDMOD an (wobei das sicher auch nicht helfen wird).

Sobald bei mir ein SQL durchlaufen ist gibt es jedenfalls nur einen Thread.
Vielleicht findest du im Aufrufstapel (DSPJOB --> 11) oder Offenen Dateien (DSPJOB --> 14) was interessantes?

Fuerchau
15-03-12, 12:26
Möglicherweise werden die Crypt-Funktionen in eigenen Threads abgearbeitet.
Hier hilft wohl kein Close-Cursor sondern ggf. nur ein ENDACTGRP.

chrisssiie
15-03-12, 12:30
Die Threads werden aber nicht nur bei Crypt Funktionen, sondern auch bei normalen SQL´s erstellt...

*ENDMOD hab ich auch schon probiert, hat aber leider auch nichts gebracht...

Was mir auch noch aufgefallen ist, die Threads werden nur auf unserer Entwicklungsmaschine erzeugt (V5R4)

Auf anderen Maschinen habe ich das Probem nicht, wobei hier auch eine mit V5R4 dabei war....

Evtl. irgendein SYSVAL oder fehlendes PTF?

Fuerchau
15-03-12, 12:53
Ggf. ist das Feature für Parallel-Ausführung von SQL's aktiviert und auch verfügbar, auf den anderen Maschinen eben nicht.

chrisssiie
15-03-12, 13:06
Ggf. ist das Feature für Parallel-Ausführung von SQL's aktiviert und auch verfügbar, auf den anderen Maschinen eben nicht.

wie kann ich das überprüfen?