Zugriffsmethode und Dateiformat
Die Zugriffsmethode wird mit dem Operanden FCBTYPE festgelegt, ISAM ist Standardwert; in Abhängigkeit vom Operanden BLKCTRL wird die Datei mit NK-ISAM oder mit K-ISAM verarbeitet.
Das Dateiformat (BLKCTRL=DATA/PAMKEY/NO) bezieht sich auf den internen Aufbau der Datei: für NK-ISAM werden die Blockkontrollinformationen in der PAM-Seite selbst geführt (BLKCTRL=DATA), nicht in einem gesonderten PAM-Schlüssel. K-ISAM nützt diesen PAM-Schlüssel: BLKCTRL=PAMKEY. Das Dateiformat BLKCTRL=NO (kein Blockkontrollfeld) entspricht der Angabe BLKCTRL=DATA.
Aufbau einer PAM-Seite
K-ISAM: die Blockkontrollinformationen stehen in einem der PAM-Seite vorangestellten PAM-Schlüssel; die ersten 16 Byte der PAM-Seite enthalten Benutzerdaten.
NK-ISAM: jede PAM-Seite beginnt mit einem 16 Byte langen Blockkontrollfeld, dessen letzte 4 Bytes ISAM-spezifische Informationen enthalten.
Die nutzbare „Länge“ einer PAM-Seite ist demnach 2048 – 16 = 2032 Bytes.
NK2-Dateien: Jede PAM-Seite eines logischen Blocks beginnt mit einem 16 Byte langen Blockkontrollfeld, dessen letzte 4 Byte ISAM-spezifische Informationen enthalten.
Die nutzbare Länge einer PAM-Seite ist 2048-16=2032 Byte.
NK4-Dateien: Jede physikalische Seite (4096 Byte) beginnt mit einem 16 Byte langen Blockkontrollfeld, dessen letzte 4 Byte ISAM-spezifische Informationen enthalten.
Die nutzbare Länge einer solchen Seite ist 4096-16=4080.
Satz- und Blockformate
Mit ISAM können Sätze fester und Sätze variabler Länge verarbeitet werden, definiert über den Operanden RECFORM=F/V. Das Satzformat wirkt sich aus auf die möglichen Definitionen von Satzlänge und Schlüsselposition (siehe Abschnitt „ISAM-Dateistrukturen").
Die Satzlänge wird definiert mit dem Operanden RECSIZE. Bei Sätzen vom Format V ist zu berücksichtigen, dass die ersten 4 Bytes des Satzes für Satzlängenfeld und ein Steuerfeld genutzt werden. Außerdem gibt RECSIZE dann nicht die aktuelle Satzlänge, sondern die maximale Satzlänge an. Gibt es in der Datei Sätze, die länger sind, als in RECSIZE angegeben, wird bei Leseoperationen nur die RECSIZE entsprechende Anzahl Bytes eingelesen.
Bei Sätzen vom Format F steht die gesamte in RECSIZE angegebene Satzlänge für die Benutzerdaten zur Verfügung. Bei der RECSIZE-Definition muss jedoch berücksichtigt werden, dass ISAM intern auch diesen Sätzen ein 4-Byte-Satzlängen- und Steuerfeld voranstellt, was sich auf die Bildung von Überlaufblöcken auswirken kann.
Die maximal zulässige Satzlänge ist immer die Datenblocklänge (BLKSIZE).
Durch den Blockungsfaktor wird im Operanden BLKSIZE festgelegt, aus wie vielen PAM-Seiten die Datenblöcke bestehen sollen:
BLKSIZE=(STD,n), 1 <= n <= 16.
Die Blockgröße sollte immer – zusammen mit der Satzlänge – so gewählt werden, dass keine Überlaufblöcke entstehen, da dies zu Performanceverlusten führt.
Index-Aufbau
Der ISAM-Index wird gebildet aus ISAM-Schlüssel und Markierungen (Flags), er kann an beliebiger Stelle im Datensatz liegen, darf jedoch nicht in einen Überlaufblock hineinragen. Die maximale Indexlänge ist 255 Bytes, die minimale Schlüssellänge ein Byte. Markierungen werden mithilfe des GETFL-Makroaufrufs ausgewertet.
Der ISAM-Index beginnt immer mit dem Schlüssel, die Anfangsposition wird definiert durch den Operanden KEYPOS. Die Voreinstellungen für KEYPOS berücksichtigen das Satzformat: KEYPOS=5 für RECFORM=V, KEYPOS=1 für RECFORM=F. Die Schlüssellänge wird über KEYLEN definiert, standardmäßig erzeugt das DVS 8 Byte lange Schlüssel.
Für die Flags sind die Operanden VALLEN und LOGLEN relevant, der Operand VALPROP hat bei NK-ISAM keine Funktion mehr, er wird noch aus Kompatibilitätsgründen unterstützt, da er bei K-ISAM die Aufnahme der Wertmarkierung in den Indexeintrag steuert.
Die folgende Tabelle stellt die oben genannten Operanden der Makros FILE und FCB den Operanden des Kommandos ADD-FILE-LINK gegenüber.
Operand in den Makros FILE und FCB | Operand im Kommando ADD-FILE-LINK |
---|---|
FCBTYPE | ACCESS-METHOD |
BLKCTRL=DATA/PAMKEY/NO | BLOCK-CONTROL-INFO=*WITHIN-DATA-BLOCK / *PAMKEY / *NO |
RECFORM=F/V | RECORD-FORMAT=*FIXED / *VARIABLE |
RECSIZE | RECORD-SIZE |
BLKSIZE | BUFFER-LENGTH |
KEYPOS | KEY-POSITION |
VALLEN | VALUE-FLAG-LENGTH |
LOGLEN | LOGICAL-FLAG-LENGTH |
VALPROP | PROPAGATE-VALUE-FLAG |