MainframeSupports
tip uge 14/2005:

Som du sikkert ved så er det muligt at skrive records, der er længere end den maksimale logiske blokstørrelse på 27998, når man emulerer en 3390 disk. Sådanne records går under betegnelsen spanned records. En spanned record har en maksimal længde på 32760 bytes og kan kun skrives til variable blocked (VB) datasets. Når LRECL=32760 betyder det, at recorden maksimalt kan indeholde 32756 bytes, da de 4 første bytes i variable length datasets er afsat til længde informationer. Spanned records benyttes af produkter som AFP og SMF.

I COBOL kan man erklære en fil til spanned records således:

FD  SPANNED
    RECORDING MODE V
    BLOCK CONTAINS 0 RECORDS
    RECORD VARYING FROM 1 TO 32756 DEPENDING ON SPANNED-LENGTH

Variablen SPANNED-LENGTH erklæres i working-storage som en numerisk datatype af en eller anden slags, eksempelvis PIC 9(5).

Afhængig af versionen af COBOL og Language Environment (LE) kan der desværre opstå heftige performance problemer ved skrivning af records erklæret med en maksimal VARYING længde på mere end 27992. I stedet for at undersøge den konkrete længde angivet i SPANNED-LENGTH, så antager COBOL, at recorden altid er helt udfyldt (hvad den jo meget sjældent er) og laver derfor en I/O pr. record i stedet for at vente på at bufferen rent faktisk er fyldt op.

Ovenstående problem kan heldigvis undgås ved at tilføje en APPLY WRITE-ONLY ON SPANNED i paragraph I-O-CONTROL i INPUT-OUTPUT SECTION i ENVIRONMENT DIVISION. Denne tilføjelse sikrer, at COBOL først foretager en I/O, når bufferen er fyldt, i øvrigt uanset den maksimale VARYING længde. Derfor er det en god ide at benytte APPLY WRITE-ONLY til alle de filer, der skriver VB records uanset længden.

Forrige danske tip        Last tip in english        Tip oversigten