SPOOL OFFLOAD o cómo archivar JOBs del JES

Esta receta explicará la instalación y configuración del Spool Oflload, un sistema para sacar del SPOOL de JES el resultado de JOBs y archivar trabajos ya ejecutados para liberar espacio del mismo.

JES2 y el SPOOL

Como sabéis, el JES2 es el subsistema de entrada de trabajos, es decir, donde se ejecutan todos los procesos BATCH, STCs de sistema, usuarios, etc, y toda la ejecución se guarda en el SPOOL donde se almacenan los logs, hilos de ejecución y diversa información estadística. Dado que los discos del SPOOL son finitos, si no se borran deliberadamente los trabajos ya ejecutados, dicho SPOOL irremediablemente se ira llenando. Cuando llegue al 80%, marcará un aviso de llenado, y si la situación no se corrige, al llegar al 100% el JES2 congela su ejecución al no poder escribir en el SPOOL los progresos de los trabajos que ejecuta, congelando la producción con resultados catastróficos que todos podríais imaginar.

Por tanto, una buena práctica suele ser la de borrar los logs de los trabajos ya ejecutados, para así liberar espacio para evitar que el SPOOL se llene. En una entrada anterior vimos que con un sencillo script diario se pueden borrar los trabajos con una antigüedad mayor de X días de ciertas clases, pero puede ocurrir que quieras salvaguardar dicha información y no borrarla. Pues con la utilidad de OFFLOAD del JES, el sistema es capaz de archivar el SPOOL de los trabajos que cumplan con las condiciones que se especifiquen, o incluso hacer un backup de todo el SPOOL para recuperar todos los trabajos en caso de que haya una corrupción del mismo. De hecho, puedes recuperar algún trabajo que se haya pasado a OFFLOAD cuando quieras (mientras no exista en el SPOOL).

OFFLOAD

El OFFLOAD del SPOOL se puede hacer a disco o cinta para su archivado. Además, tiene multitud de opciones para determinar que trabajos deben ser archivados, borrados del SPOOL una vez archivados, nombres o números de trabajos que llevarse, Clases de ejecución… hay cientos de variables en juego.

Todas los comandos son comandos de JES, por lo que siempre se deberá anteponer un $ al comando para que lo acepte JES. En cualquier caso, si disponemos de un SDSF, desde la opción SO (Spool Offload), tendremos acceso a toda la configuración de una forma más “gráfica” por lo que será más sencillo configurarlo.

Preparación de la configuración: JES2PARM

Para activar el funcionamiento del OFFLOAD, debemos editar nuestro JES2PARM dentro de la PARMLIB de nuestra instalación, y añadir las siguientes líneas:

OFFLOAD1 DSN=SYS1.OFFLOAD1
OFFLOAD2 DSN=SYS1.OFFLOAD2
OFFLOAD3 DSN=SYS1.OFFLOAD3

 

Con esto, definiremos 3 ficheros (se pueden definir lo que quieras) de OFFLOAD, y podemos dar a cada uno de ellos distintas propiedades de forma que el OFFLOAD1 archive jobs que empiecen por un nombre, OFFLOAD2 lo haga por Clase y OFFLOAD3 por número de job, por poner ejemplos.

Lógicamente, estos ficheros deben existir en el sistema. Si son a cinta no hay demasiado problema, pero si queremos guardar a Disco, hay que definir el Dataset con las siguientes características:

Nombre: SYS1.OFFLOADx o el nombre que hayamos elegido y catalogarlo, RECFMT=U y BLKSIZE=4042, y de extensión, los cilindros que creáis oportunos (lógicamente, si queréis hacer una copia de todo el SPOOL, debe tener al menos la extensión de la suma de todos los HASPACEs del JES).

Como se ha tocado la configuración del JES2, hay que hacer IPL para que se cargue la nueva configuración. Una vez arrancado todo, si vamos a la pantalla SO Spool Offload del SDSF, veremos lo siguiente:

offload1

 

 

 

 

 

 

 

Fig. 1: Vista del Spool Offload

Como puede apreciarse, cada OFFLOAD tiene 4 sub-procesos, llamados OFFx.JT, OFFx.ST, OFFx.JR y OFFx.SR. Los procesos acabados en T son de transmisión, es decir, de transmitir Jobs del SPOOL al OFFLOAD. Y los acabados en R son de recepción, para recuperar los Jobs guardados en el OFFLOAD para llevarlos de nuevo al SPOOL.

Configurando el OFFLOAD

Esta es la opción quizás más farragosa de toda la receta, son tantas las opciones y demás, que hay que empollarse bien el manual del JES2 para sacarle todo el partido. En esta receta pondré un ejemplo muy sencillo pero el abanico de opciones de transmisión y recepción desde y hacia el OFFLOAD es inmenso.

Lo primero de todo, es obtener lo que tengamos configurado actualmente del OFFLOAD como opciones por defecto, emitiendo el siguiente comando:

$DOFFLOAD1

El resultado es el que sigue:

RESPONSE=PROD
 $HASP882 OFFLOAD1
 $HASP882 OFFLOAD1  DSN=SYS1.OFFLOAD1,STATUS=DRAINED,ARCHIVE=ONE,
 $HASP882           CRTIME=RESET,LABEL=SL,PROTECT=NO,RETPD=30,
 $HASP882           TRACE=NO,UNIT=(,1),VALIDATE=YES,VOLS=255

 

Es decir, que el fichero de archivado será SYS1.OFFLOAD1, con una retención de 30 dias, etc.

Si realizamos un Display del Transmisor, nos saca lo siguiente:

/$DOFF1.ST

Cuyo resultado es este:

RESPONSE=PROD
 $HASP886 OFF1.ST
 $HASP886 OFF1.ST  STATUS=STARTABLE,CREATOR=,DISP=DELETE,
 $HASP886          OUTDISP=(WRITE,KEEP),HOLD=,JOBNAME=,NOTIFY=NO,
 $HASP886          RANGE=(J1,999999),ROUTECDE=(),START=YES,
 $HASP886          VOLUME=(,,,),WS=(Q,OUTD/),BURST=,FCB=,FLASH=,
 $HASP886          FORMS=(,,,,,,,),LIMIT=(0,*),PLIM=(0,*),
 $HASP886          PRMODE=(),QUEUE=,UCS=,WRITER=

 

Salen una serie de parámetros que son los que van a discriminar los JOBs que queremos sacar fuera del SPOOL. Por ejemplo, JOBNAME= sirve para que todos aquellos JOBs que empiecen o se llamen con ese nombre, salgan del SPOOL. OUTDISP es una variable que sirve para decir que escriba los JOBs en el OFFLOAD y que los mantenga, DISP=DELETE es que borre los JOBs del SPOOL una vez pasados al OFFLOAD, etc.

Pero el más importante es el WS, que es el criterio de selección con el que el OFFLOAD se va a llevar fuera del SPOOL los trabajos que cumplan con las condiciones. En nuestro ejemplo, WS=(Q,OUTD/) significa que va a hacer caso a los criterios que cumplan con QUEUE y OUTDISPLAY. Si quisiéramos cambiar esos criterios, bastaría lanzar el siguiente comando:

$TOFF1.ST,JOBNAME=SUBJOB para que se lleve al OFFLOAD los JOBs que se llamen SUBJOB y

$TOFF1.ST,WS=(JOBN/) para que solo haga caso al criterio de llevarse los Jobs del SPOOL que cumplan con el parámetro JOBNAME.

Se pueden combinar opciones de todo tipo y demás, de forma que se puede refinar mucho el liberado de JOBs del SPOOL, cuáles llevarse y cuáles no, etc.

Archivado de SPOOL JES2 (TRANSMIT)

Para lanzar el archivado del SPOOL con los parámetros que hemos creado, ejecutaremos un $SOFFLOAD1,TYPE=TRASMIT y en ese momento el SYS1.OFFLOAD1 pasará a ACTIVE y se dedicará a realizar el archivado de los JOBs según las preferencias que hemos marcado en el ST. Cuando el estado pase a INACTIVE, es porque ha finalizado el archivado.

Recuperación de JOBs archivados (RECEIVE)

Al igual que en el punto anterior, también disponemos de un OFFx.SR que es también configurable de la misma forma que el anterior, para así recuperar un numero de JOBs o un único JOB. Los parámetros varían un poco, pero se ve claramente si lanzamos el comando siguiente:

/$DOFF1.SR 

Con lo que el resultado sería algo similar a esto:

RESPONSE=PROD
 $HASP885 OFF1.SR
 $HASP885 OFF1.SR  STATUS=STARTABLE,OUTDISP=(WRITE,HOLD,KEEP,
 $HASP885          LEAVE),CREATOR=,HOLD=,JOBNAME=,MOD=(BURST=,
 $HASP885          OUTDISP=,FCB=,FLASH=,FORMS=,HOLD=,PRMODE=,
 $HASP885          QUEUE=,ROUTECDE=,UCS=,WRITER=),NOTIFY=NO,
 $HASP885          RANGE=(J1,2147483647),ROUTECDE=(),START=YES,
 $HASP885          WS=(Q,OUTD/),BURST=,FCB=,FLASH=,FORMS=(,,,,,,,
 $HASP885          ),PRMODE=(),QUEUE=,UCS=,WRITER=

 

Por tanto, para recuperar el JOB o JOBs que necesitemos desde el OFFLOADx, simplemente lanzaríamos el comando

/$SOFFLOAD1,TYPE=RECEIVE

Y nuestro SPOOL volvería a tener el JOB que antaño fue archivado.

Como podéis ver, todo depende de las opciones que seleccionemos para hacer una copia de nuestros trabajos y podamos sentir la potencia del OFFLOAD.

Limitaciones del OFFLOAD

Hay algunas limitaciones con respecto al SPOOL OFFLOAD, las más importantes son:

1.- No puedes hacer un browse del OFFLOAD y listar los trabajos que has archivado. Bueno, en realidad sí, pero hacer un browse del dataset SYS1.OFFLOAD1 de nuestro ejemplo solo nos lleva a ver un listado con caracteres EBCDIC entrelazados sin ninguna utilidad práctica. Por tanto, para ver el resultado de un trabajo archivado, antes es necesario recibirlo de nuevo al SPOOL del JES.

2.- No puedes archivar un trabajo ya archivado. Si en el Transmit OFF1.ST no pongo la opción DISP=DELETE y la dejo en DISP=KEEP, el trabajo del SPOOL no se borrará, aunque sí que se archivará en el OFFLOAD. Por tanto, en un segundo OFFLOAD ese trabajo aunque cumpla con los requerimientos de archivado, no se le hará un transmit, luego se mantendrá en el SPOOL a pesar de haber cambiado la opción de DISP de KEEP a DELETE

3.- Y al revés, si queremos recuperar un trabajo archivado con un RECEIVE, si dicho trabajo ya existe en el SPOOL, lógicamente no hará nada.

 

En definitiva, es una herramienta muy potente que sirve para realizar una copia de seguridad de todo el subsistema de entrada de trabajos, de una forma rápida, sencilla y muy configurable.

 

About Urtzi Larrieta

Director de Proyectos de entornos Mainframe, AIX y AS/400, llevo mas de 10 años trabajando para el sector servicios y banca, así como proyectos de sistemas, renovación tecnológica, estrategias de backup, y consultoría de sistemas.