[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    444

    ENDCMTCTL not allowed. Pending changes active

    Hallo zusammen,

    ich beziehe mich auch auf mein vorheriges Problem
    http://newsolutions.de/forum-systemi...ndom_DB_Record

    Nachdem ich ja nun das aufrufende CLP Programm in ein CLLE Programm geändert und mit ACTGRP(*NEW) umgewandelt habe, bekomme ich nun wieder den im Titel angegebenen Fehler.

    Wir hatten diesen Fehler bereits vor längerer Zeit und haben dann vor dem ENDCMTCTL den RCLRSC rein gemacht, seit dem war Ruhe.
    Nachdem ich nun ein CLLE daraus gemacht habe tritt der Fehler wieder auf.
    Aber nur ganz selten, denn das Programm wird zig-fach am Tag aufgerufen

    Ich poste hier mal das CL

    PHP-Code:
    PGM        PARM(&PI@RESULT &PI@PRCI)
    DCL        VAR(&PI@RESULTTYPE(*CHARLEN(1)                     
    DCL        VAR(&PI@PRCITYPE(*CHARLEN(3)                                                                                         
    DCLPRCOPT  DFTACTGRP(*NOACTGRP(*NEW) BNDDIR(SPE)                                                                                  
    STRCMTCTL  LCKLVL(*CHGCMTSCOPE(*JOB)                            
    MONMSG     MSGID(CPF8351)                                                                                                           
    CHGJOB     DEVRCYACN(*MSG)                                                                                                          
    CALL       PGM(PBS05RPARM(&PI@RESULT &PI@PRCI)                  
    MONMSG     MSGID(CPF0000)                                                                                                           
    CHGJOB     DEVRCYACN(*ENDJOB)                                                                                                       
    RCLRSC                                                            
    ENDCMTCTL                                                         
    MONMSG     MSGID
    (CPF8350)
    ENDPGM 
    Es kommen nun beim ENDCMTCTL folgende Fehler im Joblog

    ENDCMTCTL not allowed. Pending changes active.

    0 pending changes being rolled back.
    Pending changes were found for local resources while ending commitment definition *JOB with logical unit of work identifier APPN.SIEGER1.X'3241D283F7E5'.00011. There are 1 journals with a total of 0 record level changes. There are 0 pending object level changes. There are 0 API commitment resources. The system attempts to roll back these changes
    before commitment control is ended. If all resource counts are zero, then the roll back was the result of a cursor positioning after the last successful commit or rollback.

    Commitment control ended with 0 local changes not committed.



    Wenn also keine offenen Commits mehr offen sind, was bedeutet der Satz
    if all resource counts are zero, then the roll back
    was the result of a cursor positioning after the last successful commit or rollback.

    Hier sind die letzten Journaleinträge vor dem Absturz

    PHP-Code:
    3218466629   R     UP   USTRNP      SPEFIL      CK10156522  17:33:19
    3218466630   R     UB   SCSYSP      SPEFIL      CK10156522  17
    :33:19
    3218466631   R     UP   SCSYSP      SPEFIL      CK10156522  17
    :33:19
    3218466634   R     PT   CDTRNP      SPEFIL      CK10156522  17
    :33:19
    3218466635   R     UB   PKTRNP      SPEFIL      CK10156522  17
    :33:19
    3218466636   R     UP   PKTRNP      SPEFIL      CK10156522  17
    :33:19
    3218466637   R     DL   UPTRNP      SPEFIL      CK10156522  17
    :33:19
    3218466638   C     CM                           CK10156522  17
    :33:19
    3218486320   R     DL   BIDTRNP     SPEFIL      CK10156522  17
    :36:14
    3218486322   R     DL   RLMSTP      SPEFIL      CK10156522  17
    :36:14
    3218486323   C     EC                           CK10156522  17
    :36:14 
    Den eigentlichen ENDCMTCTL wegen dem er abgestürzt ist, sieht man hier nicht, er wurde nach dem CM um 17:33:19 ausgeführt.

    Als Anmerkung die letzten beiden Deletes laufen nicht unter COMMIT

    Die Auszüge aus dem Joblog was ich weiter oben gepostet habe waren vom EC den man hier sieht.

    Ich bin jetzt in einen laufenden Job rein und habe diesen CALLSTACK

    Click image for larger version. 

Name:	screenshot1.jpg 
Views:	6 
Size:	52,8 KB 
ID:	659

    Habe ich ein Problem mit dem QDMACCIN?

    Vielen Dank für Eure Hilfe

    Viele Grüße Harald

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... du hast ein Problem mit deinem Programm! Es gibt ganz offenkundig Abläufe, wo der commit/rollback nicht erreicht wird. Dein RCLRSC hat dann einen Rollback vorausgeschickt, der RCLACTGRP hat einen commit vorausgeschickt. Ohne Sanierung des Wackelhaufens wird das nix!!!

    D*B

    PS: Du musst Dir die Commit Cycle IDs im Journal mit anschauen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    May 2004
    Beiträge
    444
    Ich habe keinen RCLACTGRP. Nirgendwo
    Der RCLRSC erfolgt vor dem ENDCMTCTL und es sind keine Commits offen.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    .. dann hast Du eines der ganze seltenen Systeme, die beim commit würfeln, ob sie den jetzt machen sollen!

    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/

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD Beitrag anzeigen
    .. dann hast Du eines der ganze seltenen Systeme, die beim commit würfeln, ob sie den jetzt machen sollen!

    D*B
    Sorry, aber was soll die Aussage?
    Schau Dir mal bitte den Auszug vom Joblog an, da steht klipp und klar, dass beim rollback nichts zurückgefahren wurde (weder auf Satz, API noch Job Ebene), ergo kann auch nichts offen gewesen sein.
    Das muss irgendwo anders herkommen. Wir hatten das früher schon und konnten es uns nicht erklären. Selbst im Debug mode und DSPJOB haben wir gesehen, dass nichts offen war aber dennoch beim ENDCMTCTL der Abbruch kam.

    Ich habe nun einen DSPJOB *PRINT im Abbruchsfall erzeugt. Hier wird bestätigt, dass es keine pending commits gibt, dennoch bricht der ENDCMTCTL ab.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Was passiert, wenn Du vor dem ENDCMTCTL einen COMMIT ausführst und dafür den RCLRSC auslässt?
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Was passiert, wenn Du vor dem ENDCMTCTL einen COMMIT ausführst und dafür den RCLRSC auslässt?
    Kann ich machen, aber das ist halt gewagt. Normalerweise kontrollieren die Folgeprogramme den Commit und führen ihn auch aus.

    Ich denke, durch die ACTGRP *NEW funktioniert der RCLRSC eh nicht mehr.

    Ich habe nun mal gezielt die CPF Message nach dem ENDCMTCL geprüft und einen rollback gemacht, aber auch das ist nicht ideal.

    Seltsam ist halt, dass der ENDCMTCTL offene commits meldet aber im job nichts offen rum steht. Nur wie findet man so etwas heraus? Prinzipiell kann in den Tiefen schon sein, dass manche Überschreibungen noch aktiv sind und diese erst durch einen RCLRSC verschwinden. Ebenso könnte es auch mit dem ILE Konzept und speziell der Nutzung der ACTGRP *NEW zu tun haben.
    Ein interessanter Bericht hierzu ist: http://andabe.altervista.org/ILE/07....Questions_.htm

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... ich hab noch nie endcmtctl benötigt, wofür auch. Habe mal nachgesehen - es ist nicht der fehlende commit/rollback (sorry Harkne für die harten Worte). Es sind offene Ressourcen - in eurem Fall wohl offene Dateien, bzw. Zugriffspfade.
    Weshalb willst du commit beenden?

    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/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Zu RCLRSC, siehe auch hier:
    https://www.ibm.com/docs/en/i/7.4?to...ources-command

    Wenn ACTGRP *NEW verlassen wird, wird diese auch aufgeräumt, ein RCLRSC ist nicht mehr erforderlich.
    https://www.ibm.com/docs/en/i/7.2?to...ation-deletion

    Und bei SQL wird unterschieden zwischen normalen (commit) und abnormalem (rollback) Ende unterschieden.
    https://www.ibm.com/docs/en/i/7.1?to...tion-group-end

    Überschreibungen wirken nur auf die ACTRGRP wenn nicht *JOB angegeben wird. Sie wirken auch nur ab der aktuellen Callebene. Wird diese verlassen, verschwinden auch die OVR's außer den *JOB-OVR's, was man sowieso vermeiden sollte. Ansonsten reicht da auch ein DLTOVR FILE(*ALL) LVL(*JOB).
    Wenn man dann immer noch unsicher ist, kann auch ein TFRJOB an QINTER mit dem Startprogramm durchführen.

    Ggf. kann ein ENDCMTCTL auch nicht ausgeführt, wenn eine explizit benannte ACTGRP noch besteht, die kann man allerdings nicht sehen, wenn die oberste Ebene verlassen wurde.
    Diese kann man tatsächlich mit RCLACTGRP(*ELIGIBLE), allerdings mit nicht zu verachtenden Konsequenzen, ins besonders bei Triggern mit Named ACTGRP.

    Ob offene commits relevant sind, kann man an z.B. den Satzsperren des Jobs ansehen. Sind da keine aktiv, ist ein ENDCMTCTL sowieso unnötig.
    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

  10. #10
    Registriert seit
    Sep 2004
    Beiträge
    327
    Ich denke inzwischen auch, dass es an den offenen Dateien hängt. Nur das wäre nun blöd, weil wir dann gezielt die Files schließen oder die Programme mit *INLR beenden müssen,
    Im DSPJOB gibt es eine Menge von Files, die noch offen sind. Alle zwar ohne offene Commits, aber noch offen.
    Vlt. noch einmal eine kurze Info zu der aktuellen Logik:
    PGM 1 CLLE mit ACTGRP *NEW, STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB)
    Aufruf PGM 2 RPGLE (ACTGRP *CALLER) plus viele weitere andere Programme, inkl. SQLRPGLE.

    Zurück zu PGM 1 mit ENDCMTCTL, ohne RCLRSC.

    Das müsste doch so passen, oder?

    Wir analysieren nun mal die Folgeprogramme, welche von denen mit RETURN beendet werden.
    Zurück zur alten Logik mit RCLRSC ist leider auch keine Option, weil dann das Trigger Problem wieder auftritt.

    Danke für die Hinweise.

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ggf. kann ein ENDCMTCTL auch nicht ausgeführt, wenn eine explizit benannte ACTGRP noch besteht, die kann man allerdings nicht sehen, wenn die oberste Ebene verlassen wurde.
    ... ein endcmtctl wirkt immer nur auf die aktuelle commit definition, dem siind die anderen egal. ENDCMTCTL ist eigentlich nur erforderlich, wenn man den scope (*JOB/*ACTGRPDFN) wechseln will und da ich von dem scope *JOB ohnehin abrate, rate ich auch von ENDCMTCTL ab. Das gehört alles zu den Problemen, die man sich ersparen kann!!!

    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/

  12. #12
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD Beitrag anzeigen
    ... ein endcmtctl wirkt immer nur auf die aktuelle commit definition, dem siind die anderen egal. ENDCMTCTL ist eigentlich nur erforderlich, wenn man den scope (*JOB/*ACTGRPDFN) wechseln will und da ich von dem scope *JOB ohnehin abrate, rate ich auch von ENDCMTCTL ab. Das gehört alles zu den Problemen, die man sich ersparen kann!!!

    D*B
    Danke, dann auch noch den STRCMTCTL auf CMTSCOPE(*ACTGRP) setzen? Wenn ja, dann wird es mir etwas mulmig bei der Größe der Anwendung.

Similar Threads

  1. Sicherung der Active Directory auf i5
    By svit in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-10-16, 12:29
  2. WRKJOB - Joblog Pending
    By Franz.Rung in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-08-14, 13:03
  3. CPD35FA - Hypervisor changes not allowed.
    By Muchi in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 19-09-05, 15:39
  4. Save while active mit BRMS
    By systemer in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 25-03-03, 15:34
  5. Drucker bleibt im Pending......
    By vorderhaus in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 03-06-02, 16:21

Berechtigungen

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