SAS Batch : Utilisation du mode Checkpoint/Restart
Publié le 9 septembre 2012 et mis à jour le 9 septembre 2012
Par
DATAMETRIC
L'article présente le mode checkpoint/restart permettant à un programme batch SAS interrompu par une erreur, de reprendre son exécution là où il s'était arrêté.
I. Introduction
II. Modes de fonctionnement
II-A. Le mode Checkpoint
II-A-1. Illustration de la mise en place du mode checkpoint
II-B. Le mode Restart
III. Exemples de mise en oeuvre
III-A. Programme avec conservation de la WORK
III-B. Programme avec utilisation d'une WORK temporaire
III-C. Utilisation du mode Checkpoint/Restart avec une boucle macro
IV. Conservation des WORK
V. Conclusion
VI. À propos de l'auteur
VII. Remerciements
VIII. Liens
I. Introduction
L'utilisation du mode CheckPoint/Restart permet de soumettre un programme batch qui serait tombé en erreur
et ce, à partir de la dernière étape DATA ou PROC valide.
Lorsqu'il est soumis de nouveau, le programme saute jusqu'à l'étape qui était en erreur et ne soumet
pas les étapes précédentes.
L'objectif est de laisser la possibilité à l'utilisateur de corriger son programme et de pouvoir le soumettre
de nouveau en évitant de tout exécuter depuis le début.
II. Modes de fonctionnement
Il existe deux modes, le premier permet de tracer les traitements et de marquer les erreurs ; le
second permet de reprendre les traitements là où était marquée la première erreur (si celle-ci a
été correctement corrigée).
II-A. Le mode Checkpoint
Grâce à ce mode, SAS enregistre des points de repère à chaque étape du programme dans le journal et dans
un catalogue nommé CHECKPNT.SAS7BCAT qui contient les informations sur les étapes DATA et les PROC
uniquement.
Un certain nombre de précautions doivent être prises en compte avec ce mode pour que tout fonctionne
correctement.
Tout d'abord, le programme qui s'exécute doit accéder aux tables intermédiaires du traitement (notamment
celles avant l'erreur) sinon il sera en incapacité de reprendre là où il en était. Par conséquent,
si la WORK était utilisée, elle ne doit pas être supprimée en fin de session ou recréée à la prochaine.
Pour cela, il faut utiliser les options NOWORKTERM et NOWORKINIT (Si toutes les données sont enregistrées
dans des bibliothèques dites permanentes, ces options ne sont pas utiles).
Ensuite, il est préférable de forcer SAS à s'arrêter dès la première erreur. Ceci est possible avec l'option
ERRORCHECK STRICT.
Dans le cadre de l'utilisation de ce mode, voici la liste des options importantes :
-
SYSIN : permet l'appel d'un programme SAS ;
-
STEPCHKPT : active le mode CheckPoint ;
-
STEPCHKPTLIB : permet d'indiquer le LIBREF dans lequel SAS doit sauver le catalogue. Il faut spécifier
la commande LIBNAME en amont du programme pour que SAS puisse l'affecter ;
-
NOWORKTERM : permet de conserver la WORK à la fin de la session ;
-
NOWORKINIT : évite d'initialiser une nouvelle WORK au démarrage de la session ;
-
ERRORCHECK STRICT : force l'analyse syntaxique des étapes LIBNAME, FILENAME, %INCLUDE et LOCK ;
-
ERRORABEND : force l'arrêt sur n'importe quelle erreur.
II-A-1. Illustration de la mise en place du mode checkpoint
Nous créons un appel de SAS sous forme de ligne de commande. Le programme exécuté se nomme « production »
et nous utilisons les options précitées qui servent à contrôler le niveau d'erreur (avec ERRORCHECK
STRICT, ERRORABBEND) et d'activer le mode Checkpoint (avec STEPCHKPT).
Ici STEPCHKPTLIB permet de sauvegarder le catalogue dans le LIBREF savCheck. Par contre la WORK est détruite
en fin de session :
Sas -sysin " c:\projet_alpha\production.sas "
-stepchkpt -stepchkptlib savCheck -errorcheck strict -errorabbend
|
Ici la WORK est conservée (avec NOWORKTERM NOWORKINIT). Nous verrons que ces deux options sont fondamentales
à ce mode de travail.
sas -sysin " c:\projet_alpha\production.sas "
-stepchkpt -noworkterm -noworkinit -errorcheck strict -errorabbend
|
II-B. Le mode Restart
Il faut exécuter le programme avec l'option STEPRESTART pour que le programme puisse être relancé à partir
de la dernière erreur après que le catalogue CHECKPNT.SAS7BCAT ait été analysé. Dans ce cas, SAS
relit le catalogue afin d'isoler les étapes s'étant correctement terminées et reprendre à celle
qui était tombée en erreur.
Ce mode exécute tout d'abord les étapes générales telles que les LIBNAME, FILENAME et les compilations
de macros car le catalogue contient uniquement les informations sur les étapes en erreur ou en succès.
De cette façon, les éléments cruciaux ne sont pas omis.
Afin de contrôler un peu plus le mode Restart, il est possible d'ajouter une option forçant SAS à exécuter
une étape importante. Ce peut être une étape DATA ou la définition de macro-variables par exemple.
Ceci se fait avec l'option CHECKPOINT EXECUTE_ALWAYS qui se place immédiatement avant l'étape considérée.
Enfin, le lancement du mode Restart peut également s'accompagner du lancement du mode Checkpoint. Comme
le programme peut encore tomber en erreur, il sera possible de corriger et de relancer.
Ainsi nous aurons la ligne suivante qui cumule les deux modes :
sas -sysin " c:\projet_alpha\production.sas "
-stepchkpt -stepRestart -stepchkptlib savCheck -errorcheck strict -errorabbend
|
III. Exemples de mise en oeuvre
Les exemples suivants vont illustrer l'utilisation du mode Checkpoint/Restart avec l'exécution d'un programme
SAS sur une plate-forme Windows SAS 9.3. Ce procédé fonctionnera en 9.2 et sur UNIX.
III-A. Programme avec conservation de la WORK
Nous créons un fichier .bat permettant d'appeler le programme datametric.sas grâce à la commande SYSIN.
Nous employons les options permettant de conserver la LOG et la WORK en plus du mode CheckPoint.
Le programme contient trois étapes simples : une étape DATA, une proc SORT et une étape DATA qui conclut
le programme.
libname libtest "C:\Data \test";
%let choix= 1;
data premiere;
length rowid 8; * unique id ;
do level_ 1 = 0 to 2;
do level_ 2 = 0 to 2;
do x = 1 to 6+ 10* ranuni(1234);
rowid + 1;
y = sin(rowid/ 2);
output ;
end ;
end ;
end ;
run ;
proc sort data = premiere;
by level_ 1;
run ;
data second;
set premiere;
where level_ 1= &choix;
run ;
|
Voici le contenu du fichier .bat qui appelle ce programme :
" C:\Program Files\SASHome\SASFoundation\9.3\sas.exe "
-CONFIG " C:\Program Files\SASHome\SASFoundation\9.3\nls\en\sasv9.cfg "
-LOG " C:\Data\test\monfichier.log "
-sysin " C:\Data\test\Datametric.sas "
-stepchkpt -noworkterm -noworkinit -errorcheck strict -errorabend
|
Le journal du traitement qui suit montre clairement que le mode Checkpoint est activé avec l'insertion
des balises CHECKPOINT avant chaque étape.
Pour constater l'arrêt sur une erreur, nous insérons une maladresse typographique dans le programme.
Le code suivant :
proc sort data = premiere;
by level_ 1;
run ;
|
Devient :
proc sort data = premire;
by level_ 1;
run ;
|
Lorsque le programme tombe en erreur, la WORK est conservée avec le catalogue permettant à SAS de savoir
où repartir ainsi que la première table générée (elle n'avait pas d'erreurs).
Nous relançons le programme corrigé avec l'option -STEPRESTART cette fois. Par précaution, nous
laissons le mode Checkpoint afin de pouvoir stopper sur une prochaine erreur.
Contenu du fichier .bat :
" C:\Program Files\SASHome\SASFoundation\9.3\sas.exe "
-CONFIG " C:\Program Files\SASHome\SASFoundation\9.3\nls\en\sasv9.cfg "
-LOG " C:\Data\test\monfichier.log "
-sysin " C:\Data\test\Datametric.sas "
-stepchkpt -stepRestart -noworkterm -noworkinit -errorcheck strict -errorabend
|
Cette fois, la première étape est reconnue comme étant sans erreur et donc est ignorée.
Dans le journal, les étapes sont encore marquées en mode Checkpoint car l'option STEPCHKPT est utilisée
par crainte d'une nouvelle erreur.
III-B. Programme avec utilisation d'une WORK temporaire
Cet exemple prouve que même si le catalogue est sauvegardé dans un répertoire permanent alors que les
données sont stockées dans une véritable WORK, alors le mode RESTART se trouve dans l'incapacité
de rejouer le traitement.
Voici le contenu du nouveau .bat où les options de conservation de la WORK sont supprimées.
" C:\Program Files\SASHome\SASFoundation\9.3\sas.exe "
-CONFIG " C:\Program Files\SASHome\SASFoundation\9.3\nls\en\sasv9.cfg "
-LOG " C:\Data\test\monfichier.log "
-sysin " C:\Data\test\Datametric.sas "
-stepchkpt -STEPCHKPTLIB libtest -errorcheck strict -errorabend
|
Si l'on indique l'option -STEPCHKPTLIB libtest dans la ligne de commande, le catalogue est conservé dans
le répertoire lié au LIBREF libtest défini dans le programme (ici C:\Data\test).
Nous obtenons dans le journal les informations suivantes, puis la même erreur un peu plus bas.
NOTE: Begin CHECKPOINT execution mode .
NOTE: Checkpoint library: C:\Data \test.
NOTE: WORK library: C:\sasfiles\saswork\datametric\_ TD4132_ WIN- EH2M0MSIPC9_ .
|
Après correction, nous relançons.
Puisque la WORK n'était pas conservée et que les données n'étaient pas enregistrées dans un répertoire
permanent, le programme tombe de nouveau en erreur car la première étape créant la table PREMIERE,
n'a pas été rejouée : la table source de la seconde étape n'existe pas et retourne une erreur.
C'est un cercle vicieux qui s'amorce car le programme sait d'où repartir mais n'a plus les données
pour le faire.
Par conséquent, il faut conserver le catalogue et les données dans un répertoire qui n'est pas temporaire.
III-C. Utilisation du mode Checkpoint/Restart avec une boucle macro
On teste si le mode de marquage SAS rentre dans une boucle macro.
Ici le programme crée dix tables à partir d'une seule. Nous introduisons une erreur de syntaxe (un point-virgule
manquant) qui créera une erreur uniquement sur l'étape n°5.
%macro loop;
%do i= 1 %to 10;
data test&i;
set sashelp. class ;
%if &i= 5 %then %do ;
i= 2
%end ;
run ;
%end ;
%mend ;
%loop;
|
Comme dans le premier exemple, la ligne de commande exécutant ce programme va permettre de conserver
la WORK et le catalogue qui sera dedans.
Le mode Checkpoint reconnaît parfaitement chaque étape DATA et stoppe sur l'erreur.
Après correction, nous lançons la ligne de commande avec l'option STEPRESTART et nous constatons que
le programme reprend à la cinquième étape et poursuit son travail.
IV. Conservation des WORK
À ce stade il faut connaître le fonctionnement des options NOWORKTERM et NOWORKINIT pour comprendre comment
les utiliser.
Ces deux options permettent de conserver la WORK et de ne pas en recréer une afin d'exploiter celle que
la précédente session a créée. Dans ce cas, SAS n'agit pas comme à l'accoutumée en créant un répertoire
dynamiquement mais utilise directement le répertoire spécifié dans l'option -WORK du fichier CFG
(On peut concevoir que la WORK devient un répertoire unique et permanent).
Illustrons cela.
L'environnement suivant crée les WORK dans le répertoire suivant : C:\sasfiles\saswork\!username car
le fichier sasv9.cfg contient une définition permettant de créer un répertoire sous le nom de l'utilisateur.
Ce code signifie qu'une WORK est créée dans le sous-répertoire reprenant le nom de l'utilisateur. Ce
code permet donc d'obtenir un résultat comme celui-ci pour l'utilisateur nommé sassrv :
Lorsque l'option NOWORKTERM est utilisée, SAS stocke les tables directement dans le répertoire nommé
dans le fichier sasv9.cfg sans créer de répertoire commençant par _TD_. Il n'en créera d'ailleurs
pas d'autres, tout se déroulera dans ce seul répertoire. Pour le voir, nous lançons des programmes
avec nos deux options sous le user Datametric. Nous constatons dans la capture suivante que tout
est écrit directement dans C:\sasfiles\saswork\datametric :
En conclusion, si ces options doivent être utilisées, il faut prendre garde à créer un répertoire WORK
pour chaque programme lancé en batch afin que tous n'écrivent pas au même endroit. Il suffit pour
cela d'ajouter la commande -WORK dans la ligne de commande SAS appelée dans le batch. Il faut également
utiliser NOWORKINIT pour que SAS ne vide pas le contenu de la WORK à la prochaine ouverture de session.
V. Conclusion
Le mode Checkpoint/Restart permet de relancer des traitements à partir de l'étape tombée en erreur. Les
deux modes se cumulant, il est possible de relancer un programme après l'avoir corrigé et de marquer
de nouvelles erreurs. Le premier identifie l'étape, le second permet de repartir de l'étape incriminée.
Ce mode de fonctionnement est finalement assez pratique pour éviter de relancer tous les programmes d'un
batch et leurs étapes.
Cependant, il faut prendre garde à utiliser le bon ensemble d'options pour que tout ceci fonctionne :
-
Il faut que toutes les tables soient accessibles afin que le programme puisse accéder aux données nécessaires
pour repartir dans de bonnes conditions.
-
Il faut conserver le catalogue dans une bibliothèque permanente pour que SAS le retrouve. Les options
NOWORKTERM NOWORKINIT doivent donc être utilisées si l'on ne souhaite travailler en WORK plutôt
que dans des bibliothèques permanentes.
-
Si des étapes importantes doivent être obligatoirement exécutées, l'étape CHECKPOINT EXECUTE_ALWAYS doit
être placée avant elles.
Les administrateurs peuvent adopter aisément une stratégie de prise en charge des programmes en production
avec ces deux modes. Une même ligne de commande acceptant les options STEPCHKPT et STEPRESTART, il
n'est pas utile de créer plusieurs .bat selon que l'on soit en mode Checkpoint ou Restart. Il faut
noter enfin que tout n'est pas automatisable car une intervention humaine reste nécessaire pour corriger
le programme.
VI. À propos de l'auteur
Stéphane dirige DATAMETRIC, société qu'il a fondée en 2002 pour proposer un ensemble de services autour
de l'analytique et dans le choix et la mise en oeuvre d'environnements BI SAS et COGNOS. En accompagnant
ses propres clients ou en travaillant en partenariat avec d'autres sociétés de services, Stéphane
mêle désormais des actions d'audit et conseil en architecture, d'installation de plates-formes, de
développement et de formations personnalisées auprès de sociétés européennes de toutes tailles et
d'organisations internationales.
VII. Remerciements
J'adresse tous mes remerciements à
f-leb
de l'équipe de rédaction Developpez.com pour le temps qu'il m'a accordé pour la correction et
l'amélioration de cet article.
VIII. Liens
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2012 Stéphane COLAS. Aucune reproduction, même partielle, ne peut être
faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.