View Full Version : WRKQRY schickt Commit-Controled Job auf Lockwait
Christian.Hesse
04-09-08, 16:31
Hallo!
Ich habe hier zwei RPG-Programme, die von einem aktiven WRKQRY auf LCKW geschickt werden, sobald im WRKQRY eines der gejournalten Files eingebunden ist.
Locklevel ist auf *CHG und der Scope auf *JOB eingestellt und das File ist wie folgt definiert:
FJIVEHH UF A E K DISK USROPN COMMITDaneben sind noch 4 weitere Files ebenso unter Commit definiert.
Wie kann ich es vermeiden, daß mir der WRKQRY diesen Job blockiert?
Vielen herzlichen Dank!
Gruß
Christian
soweit du uns hier keine relevante Information unterschlägst, handelt es sich um einen Bug
D*B
Hallo!
Ich habe hier zwei RPG-Programme, die von einem aktiven WRKQRY auf LCKW geschickt werden, sobald im WRKQRY eines der gejournalten Files eingebunden ist.
Locklevel ist auf *CHG und der Scope auf *JOB eingestellt und das File ist wie folgt definiert:
FJIVEHH UF A E K DISK USROPN COMMITDaneben sind noch 4 weitere Files ebenso unter Commit definiert.
Wie kann ich es vermeiden, daß mir der WRKQRY diesen Job blockiert?
Vielen herzlichen Dank!
Gruß
Christian
Christian.Hesse
05-09-08, 10:58
Ich habe eben gerade bemerkt, daß ich etwas unterschlagen habe, nämlich das:
C EVAL rc = DoCmd('STRJRNPF FILE(JIVEHH)' +
C ' JRN(JISJRN) IMAGES(*BOTH)') und genau daran bleibt er mit einem LCKW hängen. Vorallem habe ich noch mehr davon...
* +------------------------------------------------------------+
* ¦ End Commit Control of previous Runs
* +------------------------------------------------------------+
C EVAL rc = DoCmd('ENDCMTCTL')
.
.
.
C EVAL rc = DoCmd('STRJRNPF FILE(JIVEHH)' +
C ' JRN(JISJRN) IMAGES(*BOTH)')
* +------------------------------------------------------------+
* ¦ Start CMTCTL on Joblevel
* +------------------------------------------------------------+
C CLEAR rc
C EVAL rc = DoCmd('STRCMTCTL LCKLVL(*CHG)' +
C ' CMTSCOPE(*JOB)')
C OPEN JIVEHH
Der STRJRNPF wird für sämtliche Files wiederholt, die unter Commit Control geöffnet werden.
Damit stellt sich für mich eine neue Frage: Ist das gut so? Macht man das so? Oder sollte man das anders machen?
Vielen Dank!
Gruß
Christian
der STRJRNPF braucht einen exclusive lock auf die Datei und da kann selbst Query stören, wenn die Datei offen bleibt.
Die übliche Vorgehensweise ist, dass man Dateien komplett jorunalisiert (zumindest wenn sie unter commit Steuerung verwendet werden; allenfalls hängt man die Journalisierung vor Copy hin und zurück Arien ab, dazu braucht man eh einen exclusive lock, den man sich vorher holt).
Der strcmtctl ist bei embedded SQL auch überflüssig, das passiert automatisch auch.
D*B
Ich habe eben gerade bemerkt, daß ich etwas unterschlagen habe, nämlich das:
C EVAL rc = DoCmd('STRJRNPF FILE(JIVEHH)' +
C ' JRN(JISJRN) IMAGES(*BOTH)') und genau daran bleibt er mit einem LCKW hängen. Vorallem habe ich noch mehr davon...
* +------------------------------------------------------------+
* ¦ End Commit Control of previous Runs
* +------------------------------------------------------------+
C EVAL rc = DoCmd('ENDCMTCTL')
.
.
.
C EVAL rc = DoCmd('STRJRNPF FILE(JIVEHH)' +
C ' JRN(JISJRN) IMAGES(*BOTH)')
* +------------------------------------------------------------+
* ¦ Start CMTCTL on Joblevel
* +------------------------------------------------------------+
C CLEAR rc
C EVAL rc = DoCmd('STRCMTCTL LCKLVL(*CHG)' +
C ' CMTSCOPE(*JOB)')
C OPEN JIVEHH
Der STRJRNPF wird für sämtliche Files wiederholt, die unter Commit Control geöffnet werden.
Damit stellt sich für mich eine neue Frage: Ist das gut so? Macht man das so? Oder sollte man das anders machen?
Vielen Dank!
Gruß
Christian
Der strcmtctl ist bei embedded SQL auch überflüssig, das passiert automatisch auch.
Allerdings sollte man dabei auch wissen, dass mit Standard-Werten gestartet wird, d.h. der Commitment Level ist auf *ACTGRP! Bei unsauberem Design hat das schon manches Mal für ein böses Erwachen gesorgt, da COMMIT und ROLLBACK nur innerhalb der Aktivierungsgruppe ziehen.
Birgitta
... wo er auch hingehört
Allerdings sollte man dabei auch wissen, dass mit Standard-Werten gestartet wird, d.h. der Commitment Level ist auf *ACTGRP! Bei unsauberem Design hat das schon manches Mal für ein böses Erwachen gesorgt, da COMMIT und ROLLBACK nur innerhalb der Aktivierungsgruppe ziehen.
Birgitta
Christian.Hesse
05-09-08, 12:57
Was mich etwas wundert: Warum setzt der WRKQRY einen *SHRNUP auf das File, wohingegen andere Programme sich mit einem *SHRRD zufrieden geben?
Christian
der soll wohl sicher stellen, dass Summen stimmen, ich weiß aber nicht wie lange der den hält und ob man das einstellen kann.
D*B
Was mich etwas wundert: Warum setzt der WRKQRY einen *SHRNUP auf das File, wohingegen andere Programme sich mit einem *SHRRD zufrieden geben?
Christian
Siehe hier unter Datenbereich QQULCKLVL (http://www-01.ibm.com/support/docview.wss?uid=nas13950e9a6e103897c86256b8800691b 95).
Christian.Hesse
05-09-08, 14:33
Das paßt und funktioniert. :-)
Vielen herzlichen Dank und ein schönes Wochenende
Christian