Der temporäre Speicher ist in CICS das primäre Verfahren für die Speicherung von Daten, die für mehrere Transaktionen verfügbar sein müssen. Datenelemente im temporären Speicher werden in Warteschlangen mit Namen gestellt, die von dem Programm, das die Daten speichert, dynamisch zugeordnet werden. Der temporäre Speicher wird auf zwei unterschiedlichen Wegen implementiert, nämlich als temporärer Hauptspeicher und als temporärer Hilfsspeicher:
- Hauptspeicher bedeutet, dass die Warteschlange in einem Speicherbereich gespeichert wird, der aus dem dynamischen Speicherbereich stammt.
- Hilfsspeicher bedeutet, dass die Warteschlange in eine sequenzielle VSAM-Datei geschrieben wird.
Haupt- und Zusatzspeicher besitzen die folgenden Merkmale:
- CICS verwaltet einen Index der Elemente im Hauptspeicher.
- Der temporäre Hauptspeicher benötigt mehr virtuellen Speicher als der Hilfsspeicher. Er sollte für kompakte Warteschlangen verwendet werden, die eine kurze Lebensdauer aufweisen oder auf die häufig zugegriffen wird.
- Der temporäre Hilfsspeicher ist für große Datenvolumen gedacht, die längerfristig gespeichert werden müssen oder auf die nur selten zugegriffen wird.
- Warteschlangen können im temporären Hilfsspeicher wiederhergestellt werden.
Anmerkung: Eine wiederherstellbare temporäre Speicherwarteschlange kann gleichzeitig jeweils nur von einer einzigen Transaktion aktualisiert werden. Bedenken Sie beim Entwerfen Ihres Programms die Wahrscheinlichkeit von Einreihungen in die Warteschlange. Außerdem sollten Sie sicherstellen, dass es genügend VSAM-Zeichenfolgen gibt, um so viele Konkurrenzsituationen wie möglich zu eliminieren.
- Falls eine Task versucht, Daten in den temporären Speicher zu schreiben, und der Speicherbereich nicht verfügbar ist, setzt CICS die Task aus. Die Task wird erst dann wiederaufgenommen, wenn eine andere Task den benötigten Speicherbereich im Hauptspeicher oder in der VSAM-Datei freigibt.
- Rational COBOL Runtime for
zSeries verwendet temporären Speicher, um Informationen zum Programm während einer segmentierten Anweisung converse oder eine Kopie des Formulars während einer Übertragung mit einer Anweisung show zu speichern.
Mit der Builddeskriptoroption workDBType können Sie angeben, ob der Hauptspeicher oder der
temporäre Hilfsspeicher verwendet werden soll.
Aus EGL auf temporären Speicher zugreifen
Ein für die CICS-Umgebung generiertes EGL-Programm kann auf
den temporären CICS-Speicher als seriellen oder als relativen Datensatz zugreifen. Die folgenden E/A-Anweisungen sind beim Zugriff auf temporären Speicher gültig:
- add
- close
- delete
- get
- get next
- get forUpdate
- replace
In der Ressourcenzuordnung für die Datei muss der EGL-Dateityp als
tempaux (Hilfsspeicherdatei) oder
tempmain (Hauptspeicherdatei) angegeben sein, wenn das Programm generiert wird. Der Systemressourcenname (Eigenschaft systemName) ist der Name der Warteschlange, die der temporären Speicherdatei zugeordnet ist.
Temporäre Speicherdateien können gleichzeitig jeweils nur von einer einzigen Task verwendet werden.
EGL generiert die folgenden CICS-Befehle für Sie:
- Beim ersten Zugriff auf die Warteschlange reiht EGL Daten mit einem CICS-Befehl ENQ (Option NOSUSPEND) in die Warteschlange für den
Ressourcennamen EZETEMP-warteschlangenname ein.
- Beim Schließen der Datei (durch eine Anweisung close oder die Beendigung des Programms) bzw. beim Festschreiben von wiederherstellbaren Ressourcen entfernt EGL Daten mit einem
CICS-Befehl DEQ aus der Warteschlange.
Nicht-EGL-Programme, die auf dieselbe Datei zugreifen, müssen Daten für denselben Systemressourcennamen in die Warteschlange stellen, wenn sie auf die Datei zugreifen.
Am Anfang von Datensätzen im temporären Speicher wird ein zusätzliches Byte hinzugefügt, das den Status des Datensatzes angibt:
- X'01'
- Gibt an, dass der Datensatz logisch gelöscht wurde.
- X'00'
- Gibt an, dass der Datensatz logisch in der Datei vorhanden ist.
Das zusätzliche Byte wird von Rational COBOL Runtime
for z/Series zur Datensatzdefinition hinzugefügt und verwaltet. Fügen Sie das zusätzliche Byte nicht selbst zur EGL-Datensatzdefinition hinzu. Falls die temporäre Speicherdatei jedoch auch von einem Nicht-EGL-Programm verwendet wird, muss das Nicht-EGL-Programm Speicherbereich für das Byte zuordnen, das Byte interpretieren und wie EGL aktualisieren. Die Verarbeitung des zusätzlichen Byte findet folgendermaßen statt:
- add oder replace
- Das Byte wird auf X'00' gesetzt.
- delete
- Das Byte wird auf X'01' gesetzt; die Satzlänge wird auf 1 gesetzt.
- get next
- Datensätze mit dem Wert X'01' werden übersprungen.
- get oder get forUpdate
- Datensätze mit dem Wert X'01' bewirken, dass der Datensatzstatus noRecordFound festgelegt wird.
Die Anweisung
close löscht temporäre Speicherdateien nicht. Verwenden Sie zum Löschen der Datei die Systemfunktion
sysLib.purge(). EGL reiht Daten in die Warteschlange ein, indem ein CICS-Befehl ENQ mit der Option NOSUSPEND
für den Ressourcennamen EZETEMP-
warteschlangenname generiert wird, wenn
sysLib.purge() verwendet wird, und entfernt die Daten aus der Warteschlange
(Befehl DEQ), nachdem die Warteschlange gelöscht wurde.