Logische Arbeitseinheit (LUW)
Wenn Sie nicht wiederherstellbare Ressourcen wie beispielsweise serielle Dateien unter Windows 2000 ändern, sind solche Änderungen relativ permanent. Weder Ihr Code noch EGL-Laufzeitservices können diese Änderungen ohne Benachrichtigung widerrufen. Wenn Sie wiederherstellbare Ressourcen wie beispielsweise Datenbanken ändern, kann Ihr Code bzw. können EGL-Laufzeitservices diese Änderungen entweder festschreiben (Commit-Operation), um sie permanent zu machen, oder rückgängig machen (Rollback-Operation), um zu dem Inhalt zurückzukehren, der gültig war, als zuletzt Änderungen festgeschrieben wurden.
- Relationale Datenbanken
- CICS-Warteschlangen und -Dateien, die als wiederherstellbar konfiguriert sind
- DL/I-Datenbanken und GSAM-Dateien (in bestimmten Fällen)
- WebSphere MQ-Nachrichtenwarteschlangen, sofern Ihr MQ-Datensatz nichts anderes angibt.
- Ausgabedaten, die an alternative Programmkommunikationsblöcke (PCBs) übertragen werden. Alternative PCBs sind verfügbar, wenn das Zielsystem IMS BMP oder IMS/VS ist.
- Ihr Code ruft die Systemfunktion 'sysLib.commit()' oder 'sysLib.rollback()' auf, um die Änderungen festzuschreiben bzw. rückgängig zu machen.
- EGL-Laufzeitservices führen eine Rollback-Operation als Antwort auf einen permanenten Fehler durch, der in Ihrem Code nicht behandelt wird. In diesem Fall werden sämtliche Programme in der Ausführungseinheit aus dem Hauptspeicher entfernt.
- Eine implizite Commit-Operation wird ausgeführt, wie in den folgenden Fällen:
- Eine Ausführungseinheit wird erfolgreich beendet (siehe Ausführungseinheit).
- Ein Programm setzt eine Anweisung 'show' ab.
- Ein Programm setzt eine Anweisung 'transfer to transaction', wobei folgende Unterschied zu beachten sind:
- In einem Programm, das unter CICS oder IMS/VS ausgeführt wird, verursacht die Übertragung stets ein Commit.
- In anderen Programmen verursacht die Übertragung nur dann ein Commit, wenn der Wert der Builddeskriptoroption 'synchOnTrxTransfer' YES lautet.
- Eine Webseite wird angezeigt, was der Fall ist, wenn ein JSF-Handler eine Anweisung 'forward' ausgibt oder wenn ein VGWebTransaction-Programm eine Anweisung 'converse' ausgibt.
- Ein Text-UI-Programm gibt eine Anweisung 'converse' aus, wenn das Programm als segmentiertes Programm agiert.
Wenn das Programm in einer Transaktionsumgebung ausgeführt wird (CICS, IMS oder iSeries), gibt EGL ein Commit-Operation für die Umgebung aus. Diese Operation führt ein zweiphasiges Commit aus, das für alle Ressourcenmanager und alle Programme in der Ausführungseinheit koordiniert wird. In nicht transaktionsorientierten Umgebungen führt EGL ein einphasiges Commit aus, das jeden wiederherstellbaren Ressourcenmanager einzeln aufruft.
- Um diese Funktionalität zu aktivieren, verwenden Sie die ELACPIOP-Beispiel-JCL (Jobsteuersprache), um eine neue Version von
ELARPIOP zu generieren. Die ELACPIOP-Beispiel-JCL ist der ELAJCL-Datensatz, der während der Anpassung des Produkts IBM Rational COBOL
Runtime for zSeries erstellt wird. Sie haben zwei Möglichkeiten:
- Wiederholen Sie die Installationsanpassung, die in Abschnitt 6.2.1.2.2 des Programmverzeichnisses angegeben ist. ODER
- Ändern Sie die ELACPIOP-JCL, indem Sie den Parameter 'RRSAF=Y' wie im Folgenden gezeigt hinzufügen:
ELARMIOP NLS=ENU,EOF=N,SCFOLD=Y,IMSESA=N,SEGMSG=N, X MSGTRN=ELAE,TRBUF=64,TSQUE=32,RRSAF=Y
- Die folgenden Dateien müssen geändert werden, um die Verwendung von RRSAF zu aktivieren:
- Die JCL- oder EGL-Erstellungsscripts, die zum Vorkompilieren Ihres Programms verwendet werden.
- Die Ausführungs-JCL, die zum Ausführen des Batch-Jobs verwendet wird.
Weitere Details enthält die DB2-Dokumentation für RRSAF.
- Die zuvor beschriebene EGL-Unterstützung gilt nur für implizite RRSAF-Datenbankverbindungen. Wenn Sie bei der Ausführung von Code unter RRSAF explizite
Datenbankverbindungen verwenden, müssen Sie Ihr EGL-Programm aktualisieren.
Weitere Details enthält die DB2-Dokumentation für RRSAF.
- Wenn ein EGL-Programm ein Nicht-EGL-Programm aufruft und beide Programme auf SQL-Tabellen zugreifen, müssen Sie vor dem Aufruf alle Cursor schließen, wenn das Nicht-EGL-Programm eine Commit- oder Rollback-Operation verursacht.
- Wenn in einer nicht transaktionsorientierten Umgebung eines der EGL-Programme in einer Ausführungseinheit kein SQL ausführt, aber ein Nicht-EGL-Programm, das SQL-Ein-/Ausgabe ausführt, aufruft oder die Steuerung an dieses übergibt, gibt EGL am Ende der Ausführungseinheit kein Commit aus.
Kompatibilität
| Plattform | Problem |
|---|---|
| Java™-Generierung |
|
| CICS | In einer CICS-Ausführungseinheit ist jeweils immer nur eine
DB2 UDB-Datenbank verfügbar. Eine automatische Verarbeitung erfolgt in den folgenden Situationen:
Eine
COMMIT-Operation wird in den folgenden Fällen im Zusammenhang mit der DL/I-Verarbeitung ausgeführt:
|
| IMS BMP | 'sysLib.commit()' wird für transaktionsorientierte BMP-Programme ignoriert, in denen das Programm eine
Anweisung 'get next' verwendet, um eine serielle Datei zu lesen, die dem Eingabe-/Ausgabe-PCB zugeordnet ist. Für diese Programme
führt das System die Commit-Operation in einem der folgenden Fälle aus:
GSAM-Dateien sind bei Verwendung mit einem CHKP-Basisaufruf nicht wiederherstellbar. Um GSAM-Dateien wiederherstellbar zu machen, verwenden Sie 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' oder 'vgLib.VGTDLI()' für einen symbolischen Prüfpunkt anstelle von 'sysLib.commit()'. |
| IMS/VS | 'sysLib.commit()' wird ignoriert. Die
Verarbeitung von Commits erfolgt nur an den folgenden impliziten Commitpunkten:
Im Zusammenhang mit der logischen Arbeitseinheit (LUW)
führt ein expliziter Prüfpunktbefehl (CHXP) zu einem Aufruf 'get unique' (GU) an den Eingabe-/Ausgabe-PCB, der wiederum ein Commit auslöst. Beachten Sie
folgende Warnungen:
|
| iSeries COBOL | Eine implizite Commit-Operation wird in den folgenden Situationen ausgegeben:
Wenn das Programm SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einer SQL-Anweisung COMMIT WORK (geänderte Daten festschreiben). Wenn das Programm keine SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einem Befehl, der zu einem iSeries-Befehl COMMIT äquivalent ist. |
| z/OS Batch | Wenn das Programm keinen Programmspezifikationsblock (PSB) angibt, aber SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einer SQL-Anweisung COMMIT WORK (geänderte Daten festschreiben). Wenn das Programm einen PSB angibt, resultiert der Aufruf von sysLib.commit() in einem DL/I-Basisaufruf CHKP, der Änderungen für alle Datenbanken festschreibt. Der Inhalt der Struktur 'dliLib.psbData.psbName' fungiert als Prüfpunkt-ID im Aufruf CHKP. GSAM-Dateien sind bei Verwendung mit einem CHKP-Basisaufruf nicht wiederherstellbar. Um GSAM-Dateien wiederherstellbar zu machen, verwenden Sie 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' oder 'vgLib.VGTDLI()' für einen symbolischen Prüfpunkt anstelle von 'sysLib.commit()'. |