viernes, 10 de julio de 2020

Jcl - DISP=(OLD,DELETE,KEEP)

Habitualmente solemos ver lo siguiente en los pasos de sort de los jcl's:

          //SORT01 EXEC PGM=SORT
          //SORTIN    DD DSN=FICH.PRUEBA.ENTRADA,
          //               DISP=SHR
          //SORTOUT DD DSN=FICH.PRUEBA.SALIDA,
          //                     DISP=(,CATLG,DELETE),
          //                     SPACE=(CYL,1,1)
          //SORTWK01 DD SPACE=(CYL,(1,1),RLSE)
          //SYSOUT     DD SYSOUT=*
          //SYSIN        DD *
              SORT FIELDS=COPY

Sin embargo, también podemos poner algo como lo siguiente:

          //SORT02 EXEC PGM=SORT
          //SORTIN    DD DSN=FICH.PRUEBA.ENTRADA,
          //               DISP=(OLD,DELETE,KEEP)
          //SORTOUT DD DSN=FICH.PRUEBA.SALIDA,
          //                     DISP=(,CATLG,DELETE),
          //                     SPACE=(CYL,1,1)
          //SORTWK01 DD SPACE=(CYL,(1,1),RLSE)
          //SYSOUT     DD SYSOUT=*
          //SYSIN        DD *
              SORT FIELDS=COPY

Lo primero de todo: en ambos casos debe existir el fichero que se está utilizando en el SORTIN, es decir, el fichero FICH.PRUEBA.ENTRADA debe existir para que no falle ni el paso de sort SORT01 ni el paso de sort SORT02.

Ahora vamos a ver qué diferencia hay entre lo utilizado en el paso SORT01 y lo utilizado en el paso SORT02: DISP=SHR y DISP=(OLD,DELETE,KEEP).

DISP=SHR: Con esta disposición nos limitamos a utilizar el fichero, SHR viene del inglés SHARE (que significa 'compartir'). Resulta que seguirá existiendo el fichero FICH.PRUEBA.ENTRADA cuando finalice el jcl, por lo tanto, no nos tenemos que olvidar de incluir un paso de borrado al final del jcl para borrar este fichero de trabajo junto con todos los demás que se generen a lo largo del mismo jcl.
DISP=(OLD,DELETE,KEEP): Con esta disposición lo que conseguimos es que el fichero FICH.PRUEBA.ENTRADA se borre automáticamente cuando termine OK el paso SORT02; sin embargo, el mencionado fichero seguirá existiendo en el caso hipotético de fallo en el paso SORT02 (lo que nos permite relanzar desde ese mismo paso).