Eine Datei mit relativer Organisation und FCBTYPE=PAM kann - ebenso wie eine ISAM-Datei - von mehreren Benutzern simultan aktualisiert werden, wenn das ADD-FILE-LINK-Kommando SHARED-UPDATE=YES enthält und die Datei mit OPEN I-O eröffnet ist.
Um Datenkonsistenz bei simultaner Aktualisierung zu ermöglichen, benutzt das COBOL2000-Laufzeitsystem den Sperr- und Entsperrmechanismus der DVS-Zugriffsmethode UPAM. Die Zugriffskoordinierung erfolgt hier (anders als bei ISAM) dateispezifisch. Dies hat u.a. zur Folge, dass Anweisungen für eine Datei keine Auswirkungen auf eine andere Datei haben.
Die Sperrung betrifft - wie bei ISAM - nicht einen einzelnen Datensatz, sondern den gesamten Datenblock, in dem sich der Datensatz befindet (siehe Abschnitt „Indizierte Dateiorganisation").
Wie für ISAM-Dateien gibt es auch für PAM-Dateien (nur mit SHARED-UPDATE=YES, OPEN I-O) für alle Formate der READ- bzw. START-Anweisung die Erweiterung WITH NO LOCK.
Regeln für die Simultanaktualisierung
Das Lesen und Positionieren ohne bzw. mit WITH NO LOCK-Zusatz erfolgt wie bei ISAM-Dateien.
Aktualisierung von Datensätzen
Soll durch eine REWRITE- bzw. DELETE-Anweisung ein Datensatz aktualisiert werden, muss der betroffene Datensatz (wie bei ISAM-Dateien) unmittelbar zuvor durch eine READ-Anweisung (ohne WITH NO LOCK-Zusatz) gelesen werden. Zwischen beiden Anweisungen darf für dieselbe Datei keine weitere Anweisung ausgeführt werden. Anweisungen für andere PAM-Dateien sind jedoch - anders als bei ISAM-Dateien zulässig (auf Grund der dateispezifischen Zugriffskoordinierung).
Wartezeiten bei einer Sperre
Die maximale Wartezeit auf die Freigabe eines gesperrten Blocks beträgt 999 Sekunden. Nach Ablauf dieser Zeit wird, falls vorhanden, die
USE AFTER STANDARD ERROR-Prozedur angesprungen oder das Programm mit der Fehlermeldung COB9151 beendet (FILE STATUS 93 und DVS-Fehlerschlüssel D9B0 oder D9B1).Freigabe eines gesperrten Datensatzes
Die Entsperrung eines gesperrten Datenblocks kann mit denselben Anweisungen bewirkt werden wie bei ISAM-Dateien, jedoch müssen sich alle Anweisungen auf dieselbe Datei beziehen.
Im Unterschied zu ISAM-Dateien bewirkt also eine Anweisung für eine PAM-Datei keine Entsperrung von Datenblöcken einer anderen PAM-Datei.
Hinweise
Soll in einem Programm eine PAM-Datei (mit SHARED-UPDATE=YES, OPEN I-O) verarbeitet werden, sollte für diese Datei eine USE AFTER STANDARD ERROR-Prozedur vereinbart werden (siehe „Indizierte Dateien“).
Anders als bei ISAM-Dateien (mit SHARED-UPDATE=YES, OPEN I-O) kann bei simultaner Verarbeitung mehrerer Dateien (alle mit SHARED-UPDATE=YES, OPEN I-O), von denen mindestens eine Datei eine PAM-Datei ist, für jeden Benutzer je ein Datensatz in beliebig vielen Dateien gleichzeitig gesperrt (!) werden (innerhalb einer Datei immer nur ein Satz). Dadurch kann es zu so genannten „Deadlock“-Situationen kommen (siehe Beispiel 9-14).
Wie bei ISAM-Dateien sollte auch bei PAM-Dateien die Sperre auf Datensätzen (Datenblöcken!) so schnell wie möglich aufgehoben werden, um die damit verbundenen Wartezeiten für andere Benutzer möglichst kurz zu halten.
Beispiel 9-14
„Deadlock“
|
Beide Benutzer warten auf Freigabe des jeweiligen Blocks („Deadlock“).
Die maximale Wartezeit auf die Freigabe eines gesperrten Blocks beträgt 999 Sekunden. Nach Ablauf dieser Zeit wird, falls vorhanden, die USE AFTER STANDARD ERROR-Prozedur angesprungen oder das Programm mit der Fehlermeldung COB9151 beendet (FILE STATUS 93 und DVS-Fehlerschlüssel D9B0 oder D9B1).