SAS sur Mainframe : Que faire quand la bibliothèque WORK est pleine ?
Simon 29 views
Difficulty Level
Débutant
Published on :
Expert Advice
Simon
Sur z/OS, l'erreur "Full" signale souvent l'épuisement des 16 extensions (extents) autorisées plutôt qu'un disque physiquement saturé. La règle d'or ? Allouez toujours 90% de l'espace estimé en allocation primaire via le JCL pour minimiser la fragmentation et éviter les échecs en fin de traitement.
Sur un PC (Windows), cela signifie généralement que votre disque dur est plein. Mais sur un Mainframe (z/OS), la logique est plus subtile : le disque n'est pas forcément plein, mais vous avez dépassé l'espace qui vous était alloué.
Voici comment comprendre et résoudre ce problème d'allocation d'espace, basé sur les conseils d'experts du forum.
1. Le Diagnostic : L'allocation d'espace sur Mainframe
Contrairement à Windows où un fichier grandit tant qu'il y a de la place, le Mainframe exige que l'espace soit défini à l'avance (pré-alloué) via des Extents.
Le système fonctionne en deux temps :
Allocation Primaire : Un gros bloc d'espace réservé au démarrage du job.
Allocations Secondaires : Des petits blocs supplémentaires que le système va chercher si le bloc primaire est plein (généralement limité à 15 ou 16 extensions).
2. Solution 1 : La Compression (Le réflexe immédiat)
Avant de demander plus d'espace disque à l'administration, essayez de réduire la taille de vos données. L'expert David suggère d'activer la compression binaire. Sur des données volumineuses comportant du texte ou des répétitions, cela peut réduire la taille de 50% à 80%.
/* Compression activée pour cette table spécifique */
data WORK.A (compress=yes);
set DB2.GRANDE_TABLE;
run;
/* OU activée globalement pour toute la session */
options compress=yes;
1
/* Compression activée pour cette table spécifique */
2
DATA WORK.A (compress=yes);
3
SET DB2.GRANDE_TABLE;
4
RUN;
5
6
/* OU activée globalement pour toute la session */
7
options compress=yes;
Note : Cela augmente légèrement l'usage CPU, mais réduit considérablement les I/O (Entrées/Sorties), ce qui est souvent bénéfique sur Mainframe.
3. Solution 2 : Modifier les Paramètres JCL (WORK)
Parfois, un seul disque physique (DASD volume) ne suffit pas pour contenir votre table temporaire, même en utilisant tout l'espace disponible (environ 4300 cylindres sur les anciens modèles 3390).
L'expert Chuck explique comment étendre la bibliothèque WORK sur plusieurs volumes physiques. Cela nécessite de modifier le JCL pour concaténer plusieurs allocations disques.
Note : Cette technique est réservée aux utilisateurs avancés ayant accès à la configuration JCL détaillée.
Si vous rencontrez l'erreur "File Full" sur Mainframe :
Comprimez (COMPRESS=YES) : C'est simple et souvent suffisant.
Augmentez l'allocation (WORK='Prim Sec') : Demandez plus de cylindres dans votre JCL.
Vérifiez le SMS : Parfois, la classe de stockage (Storage Management Subsystem) limite automatiquement la taille des fichiers. Il faudra alors contacter l'administrateur système.
Important Disclaimer
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.