SAS Mainframe

SAS auf dem Mainframe: Was tun, wenn die WORK-Bibliothek voll ist?

Simon 21/04/2009 5 views

Der Fehler "File is full and may be damaged" ist ein gefürchteter Klassiker für SAS©-Benutzer, insbesondere wenn sie große Datenmengen (wie DB2-Tabellen) extrahieren.

Auf einem PC (Windows) bedeutet dies normalerweise, dass Ihre Festplatte voll ist. Aber auf einem Mainframe (z/OS) ist die Logik subtiler: Die Festplatte ist nicht unbedingt voll, aber Sie haben den Ihnen zugewiesenen Speicherplatz überschritten.

Hier erfahren Sie, wie Sie dieses Problem der Speicherplatzreservierung verstehen und lösen können, basierend auf Expertenratschlägen aus dem Forum.

1. Die Diagnose: Speicherplatzreservierung auf dem Mainframe

Im Gegensatz zu Windows, wo eine Datei wächst, solange Platz vorhanden ist, erfordert der Mainframe, dass der Speicherplatz im Voraus (vorab zugewiesen) über Extents definiert wird.

Das System funktioniert in zwei Schritten:

  1. Primäre Zuweisung: Ein großer Speicherblock, der beim Start des Jobs reserviert wird.

  2. Sekundäre Zuweisungen: Zusätzliche kleine Blöcke, die das System sucht, wenn der primäre Block voll ist (im Allgemeinen auf 15 oder 16 Extents begrenzt).

Der Fehler ERROR: Write to WORK.A.DATA failed. File is full bedeutet, dass SAS© die primäre Zuweisung UND alle zulässigen sekundären Zuweisungen gefüllt hat.

2. Lösung 1: Komprimierung (Der sofortige Reflex)

Bevor Sie die Administration um mehr Speicherplatz bitten, versuchen Sie, die Größe Ihrer Daten zu reduzieren. Der Experte David schlägt vor, die binäre Komprimierung zu aktivieren. Bei großen Datenmengen mit Text oder Wiederholungen kann dies die Größe um 50% bis 80% reduzieren.

SAS©-Code:

1/* Compression activée pour cette table spécifique */
2DATA WORK.A (compress=yes);
3 SET DB2.GRANDE_TABLE;
4RUN;
5 
6/* OU activée globalement pour toute la session */
7options compress=yes;
Hinweis: Dies erhöht die CPU-Auslastung leicht, reduziert jedoch die I/O (Eingabe/Ausgabe) erheblich, was auf Mainframes oft von Vorteil ist.

3. Lösung 2: JCL-Parameter ändern (WORK)

Wenn die Komprimierung nicht ausreicht, muss beim Start des Jobs mehr Speicherplatz angefordert werden. Auf dem Mainframe wird SAS© über ein JCL-Skript (EXEC SAS©...) gestartet. Sie können einen WORK-Parameter übergeben, um die Größe der Zuweisungen neu zu definieren.

Typische JCL-Syntax (Batch):

1//MONJOB EXEC SAS913,WORK='500 200'
  • 500: Größe der primären Zuweisung (in Zylindern oder Spuren, je nach Site-Konfiguration).

  • 200: Größe der sekundären Zuweisung.

Die Berechnung des Experten: David empfiehlt eine "90/10"-Strategie:

  • Schätzen Sie die endgültige Gesamtgröße.

  • Weisen Sie 90% dieser Größe primär zu.

  • Weisen Sie 10% sekundär zu.

Dies vermeidet Fragmentierung und reduziert das Risiko eines späten Fehlers, wenn die Festplatte physisch fragmentiert ist.

4. Lösung 3: Die schwere Artillerie (Spanning Volumes)

Manchmal reicht ein einziger physischer Datenträger (DASD-Volume) nicht aus, um Ihre temporäre Tabelle zu speichern, selbst wenn der gesamte verfügbare Speicherplatz (ca. 4300 Zylinder bei älteren 3390-Modellen) genutzt wird.

Der Experte Chuck erklärt, wie die WORK-Bibliothek über mehrere physische Volumes erweitert werden kann. Dies erfordert die Änderung der JCL, um mehrere Festplattenzuweisungen zu verketten.

Beispiel für erweitertes JCL:

1//WORK DD DSN=&&WORK,SPACE=(CYL,(4300,100)),UNIT=SASDS,VOL=SER=VOL01
2// DD DSN=&&WORK,SPACE=(CYL,(4300,100)),UNIT=SASDS,VOL=SER=VOL02
3// DD DSN=&&WORK,SPACE=(CYL,(4300,100)),UNIT=SASDS,VOL=SER=VOL03
Hinweis: Diese Technik ist fortgeschrittenen Benutzern vorbehalten, die Zugriff auf die detaillierte JCL-Konfiguration haben.

Wenn Sie den Fehler "File Full" auf dem Mainframe erhalten:

  1. Komprimieren (COMPRESS=YES): Dies ist einfach und oft ausreichend.

  2. Erhöhen Sie die Zuweisung (WORK='Prim Sec'): Fordern Sie mehr Zylinder in Ihrer JCL an.

  3. Überprüfen Sie das SMS: Manchmal begrenzt die Speicherverwaltungsklasse (Storage Management Subsystem) die Dateigröße automatisch. In diesem Fall müssen Sie den Systemadministrator kontaktieren.

References & Docs