Documentos de Académico
Documentos de Profesional
Documentos de Cultura
JCL Básico
JCL Básico
// ,NOTIFY=&SYSUID
//****************************
//* JCL BASICO
//****************************
//PASO01 EXEC PGM=PRUEBA1
//
//
DD SYSOUT=*
//FICHERO1 DD DSN=NOMBRE.FICHE
DISP=(,CATLG,DEL
UNIT=SYSDA,
// SPACE=(27998,(50
// LRECL=80,RECFB=F
// BLKSIZE=27998
//SYSIN DD *
WWW.CONSULTORIOCOBOL.COM
/*
//****************************
//PASO02 EXEC PGM=SORT
//SORTIN DD DSN=FICHERO.ENTRAD
// DISP=SHR
//SORTOUT DD DSN=FICHERO.SALID
// DISP=(,CATLG),UNI
// SPACE=(TRK,(500,5
// DCB=(RECFB=VB,LRE
//SYSOUT DD SYSOUT=*
//SYSIN DD *
Introducción al mundo del JCL o cómo hacer SORT FIELDS=COPY
copy/paste con “sentidiño”. SUM FIELDS=NONE
/*
//****************************
//* PROXIMAMENTE...
//* JCL AVANZADO
Recopilación de artículos del Consultorio Cobol //****************************
[http://creativecommons.org/licenses/by-nc-nd/3.0/es/]
Usted es libre de copiar, distribuir y comunicar públicamente la obra Bajo las condiciones
siguientes:
Sin obras derivadas - No se puede alterar, transformar o generar una obra derivada a partir
de esta obra.
• Al reutilizar o distribuir la obra, tiene que dejar bien claros los términos de licencia de
esta obra.
• Alguna de estas condiciones puede no aplicarse si obtiene el permiso del titular de los
derechos de autor.
• Nada en esta licencia menoscaba o restringe los derechos morales del autor.
Página 2 de 28
JCL Básico
Contenido
Presentación ................................................................................................................. 4
¿Qué es JCL?............................................................................................................... 5
Sentencias JOB / EXEC / DD .................................................................................... 5
Procesadores del JES ............................................................................................... 5
Organización básica de los datos .............................................................................. 6
La Cabecera ................................................................................................................. 9
Campos de las sentencias de la cabecera ................................................................ 9
Sentencia JOB - CABECERA .................................................................................... 9
Sentencia EXEC ......................................................................................................... 12
Parámetros Posicionales. ........................................................................................ 12
Parámetros de Palabra Clave. ................................................................................ 12
Sentencia DD (Parte I) ................................................................................................ 15
Sentencias DD en la cabecera del jcl. ..................................................................... 15
Sentencias DD en cada paso (EXEC) del job. ......................................................... 16
Sentencia DD (Parte II) ............................................................................................... 18
Parámetros posicionales ......................................................................................... 18
Parámetros palabras clave ...................................................................................... 20
Sentencia DD (Parte III) .............................................................................................. 22
DSN o DSNAME ..................................................................................................... 22
DISP ....................................................................................................................... 23
UNIT ....................................................................................................................... 24
SPACE .................................................................................................................... 24
DCB ........................................................................................................................ 25
IDCAMS, IEFBR14, IEBGENER. ................................................................................ 26
IDCAMS .................................................................................................................. 26
IEFBR14 ................................................................................................................. 28
IEBGENER ............................................................................................................. 28
Página 3 de 28
JCL Básico
Presentación
Si estás leyendo este manual es porque alguna vez has tenido que enfrentarte a este lenguaje
de programación tan particular, el JCL o lenguaje de control de trabajos (en inglés Job Control
Language).
La mayoría de la gente cuando entra en este mundillo ha recibido previamente una formación
de un mes o dos dónde le han contado tal vez como programar en COBOL o en PL/I y le han
dicho que el JCL lo usará pero que en realidad no hay que aprenderlo, que todo es
“copy/paste”. Luego llega el día de empezar a trabajar y es cuando te acuerdas de la persona
que te ha dicho eso, y de buena parte de su familia...
JCL es la base de toda la parte Batch de una aplicación. Cada empresa puede tener sus
programas escritos en COBOL, PL/I, Natural, pero lo que no cambia nunca es que los ejecutará
usando JCL.
Es cierto que uno no suele codificar un JOB desde cero, pero cuando copias algo para luego
modificarlo, es importante saber qué estás copiando, y qué es lo que tienes que modificar.
Este manual pretende ser una ayuda para la gente que está empezando en esto, y que muchas
veces se pregunta qué significan todas esas variables que “me han dicho” que tengo que
poner.
Hemos querido hacer esta recopilación de todos los artículos publicados en el Consultorio
Cobol bajo el título “JCL Básico” para que sea más sencillo buscar la información que
necesitas. Sabemos que Google es listo, pero no hay nada como el Ctrl+B/Ctrl+F para
encontrar lo que buscas.
Para terminar, nos gustaría darle las gracias a Alvarito, pues él es quién se ha currado toda
esta saga de artículos, a veces densa incluso para él. Esperemos que aun le queden fuerzas
para sacar el manual de JCL Avanzado ; )
Un saludo,
Página 4 de 28
JCL Básico
¿Qué es JCL?
JCL (Job Control Language) - Es un lenguaje de programación que permite codificar las
instrucciones necesarias para la ejecución de un proceso batch. Estas instrucciones o
sentencias son interpretadas y ejecutadas por el Gestor de trabajos (JES).
Esta introducción igual es un poco complicada porque sólo hace referencia a la definición de
términos generales del lenguaje. En los siguientes capítulos se entra más al detalle, no os
preocupéis si no os quedáis con nada de lo que se dice. No me entero ni yo... :-)
JOB - Identifica el trabajo a realizar. Es procesada por la parte de lectura del JES (Reader).
Aporta un registro contable para el trabajo.
EXEC - Identifica el programa o procedimiento que se va a ejecutar. Se procesa por parte del
JES en el apartado (Converter) destinado a modificar el JCL por rutinas y sentencias estándar
del sistema. Se abre un registro contable que identifica el paso de trabajo.
DD - Identifica los recursos que va a utilizar el programa (por ejemplo, ficheros). Como la
sentencia anterior la ejecución de la sentencia es procesada en primer lugar por el apartado
(Converter) del JES. En algunos casos si ello fuese preciso se acude al Gestor de Recursos del
Sistema (SRM)
SALIDA. Una vez efectuado el proceso de las sentencias, se da formato de salida al trabajo
ejecutado y se procede al paso del mismo a colas de salida IMPRESIÓN Según la clase de
salida que se especifique en las sentencias JOB se procederá a la impresión en una impresora
Página 5 de 28
JCL Básico
BORRADO. El borrado suprime el control por parte del JES del trabajo realizado. * El error
producido en cualquier parte de las mencionadas, presupone la finalización anormal del trabajo
conocido como JCL ERROR en el caso de error sintáctico o de validación de ficheros y de
ABEND cuando el error proviene en tiempo de ejecución. La finalización correcta del trabajo es
reconocida bajo la terminación ENDED.
1. Pistas y cilindros
PISTA - se podría comparar a una circunferencia en la superficie de un disco físico.
CILINDRO - está formado por las pistas de igual radio (normalmente 15 pistas).
Variable (V) - los registros son de longitud variable. Dicha longitud se especifica en el
registro.
Expandido (S) - los registros lógicos pueden expandirse a distintos registros físicos.
Página 6 de 28
JCL Básico
fue grabada. El acceso siempre es secuencial, comenzando por el primer registro del
fichero y accediendo a todos los demás registros, uno tras otro.
7. Catálogos MVS.
PARÁMETROS
Parámetros posicionales:
− El significado del parámetro viene dado por la posición que ocupa y la ausencia
del mismo presupone el separarlo del parámetro siguiente por una (,) coma.
− Deben ir antes que los parámetros de palabra clave
− La carencia del último, o últimos parámetros posicionales sin continuación de
parámetro posicional, o la falta de todos ellos no obliga la codificación de la (,)
coma de separación.
Página 7 de 28
JCL Básico
Página 8 de 28
JCL Básico
La Cabecera
Sentencia obligatoria que indica el principio del trabajo, y solo puede existir una por trabajo.
Página 9 de 28
JCL Básico
El segundo (Mensajes):
0: Mensajes de JCL y todos si acaba mal
1: Todos siempre
DYNAMNBR.PASO01=10
Página 10 de 28
JCL Básico
o TYPRUN - indica el tipo de ejecución del job. Los posibles valores que adopta
este parámetro:
HOLD Deja el trabajo en HOLD (pendiente de ejecución para el JES) y
queda a la espera que el operador de consola lo libere (Se hace
habitualmente cuando el JOB requiere de unos recursos especiales
que han de ser cedidos por Explotación.)
SCAN Analiza sintácticamente el JOB Control.
JCLHOLD El job queda retenido antes de ser procesado por el
converter. No pasa a cola de selección hasta que el operador lo libera
COPY Lista el JCL sin ejecutarlo.
Página 11 de 28
JCL Básico
Sentencia EXEC
Parámetros Posicionales.
Se considera parámetro posicional de la sentencia EXEC la especificación del nombre del
programa o procedimiento a ejecutar:
Página 12 de 28
JCL Básico
o PARM - se utiliza para pasar algún tipo de información al programa que está en
proceso. Se pueden pasar como máximo 100 caracteres.
Utilidad DYNALLOC
Página 13 de 28
JCL Básico
TIME=([minutos|),[segundos|)
Página 14 de 28
JCL Básico
Sentencia DD (Parte I)
Sentencia que describe los ficheros con los que se va a trabajar (una sentencia DD por cada
fichero). Identifica cada fichero lógico definido en la SELECT del programa con su fichero físico.
No puede existir más de una DD identificada con el mismo nombre lógico.
//FICHERO1 DD DSN=xxxx.nombre.fichero
// DISP=(NEW,CATLG,DELETE),VOL=SER=SYSWKl,
// UNIT=3380,LABEL=3,SPACE=(TRK,(10,5),RLSE),
// COPIES=4,DEST=RMT005,OUTLIM=1500,
// RECFM=FB,LRECL=150,BLKSIZE=1500
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
// DD DSN=xxxx.nombre.fichero2,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),VOL=SER=SYSWKl,
// UNIT=3380,LABEL=3,SPACE=(TRK,(10,5),RLSE),
// COPIES=4,DEST=RMT005,OUTLIM=1500,
// RECFM=FB,LRECL=150,BLKSIZE=1500
NOTA. En este caso ambos ficheros de entrada han de tener la misma longitud.
Las únicas DD asociadas a la ficha JOB son aquellas destinadas a definir librerías de acceso a
las que deberán acudir los trabajos en tiempo de ejecución. El nombre lógico que las identifica
es:
Página 15 de 28
JCL Básico
obtención del catalogo de ficheros. sigue las mismas pautas y en último extremo acude
a las estancadas de la instalación.
Debe ser anterior a cualquier paso EXEC de un JOB puesto que en rearranque y
especificando la identificación del punto de control se deberá acudir a este fichero
antes que al paso para obtener la información del programa que se pretende arrancar.
Destinadas a definir librerías de acceso a las que deberán acudir los pasos de un trabajo en
tiempo de ejecución. El nombre lógico que las identifica es:
Ha de codificarse después de la ficha EXEC aunque no tiene porque ser la primera DD.
Pongo un ejemplo:
Para pruebas en el entorno de explotación, imagina que quieres hacer una prueba de
un programa que has creado pero que todavía no está subido al entorno de
explotación, pero el cliente insiste en probarlo bien y no te queda otra que hacerlo con
datos de explotación.
Página 16 de 28
JCL Básico
preparada para este fin). Una vez copiado tu ejecutable en dicha librería, únicamente
tienes que indicar en tu paso de jcl donde se ejecuta el programa, la STEPLIB del
siguiente modo:
SOLUCIÓN: Modificas el programa para que admita los 110 km/h pero no lo implantas
en producción sino que copias el ejecutable en una librería auxiliar (temporal, puente o
como quieras llamarla).
Luego, en el jcl que ejecuta tu programa, lo único que haces es añadir al paso una
línea de STEPLIB donde indicas esa librería puente donde has dejado la compilación.
De este modo durante los próximos meses tu jcl ejecutará la versión del programa que
está preparada para los 110 km/h. Cuando la norma cambie y volvamos a poder
"correr" en las carreteras a 120, únicamente has de quitar la línea del jcl, o bien borrar
el programa modificado de la librería auxiliar (si el jcl no encuentra el programa en la
librería indicada en la STEPLIB irá a buscarlo a la librería original).
Página 17 de 28
JCL Básico
Continuamos con la segunda parte de este artículo. Vamos a hablar ahora de los diferentes
parámetros que puede tener la sentencia DD. Los parámetros pueden ser de dos tipos,
posicionales o de palabras clave. Vamos a ver ambos por separado:
Parámetros posicionales
Asterisco *
El asterisco evita tener que definir un fichero, únicamente indicaremos los datos. La finalización
de datos se indica con ( /* ) o con ( // ). Por ejemplo:
DATA
Similar al asterisco con la diferencia de que la finalización de datos se indica con el delimitador
/*.
NOTA: Aunque poco usado, este delimitador puede ser modificado para no llevarnos a
confusión.
Indicando DLM='##', sustituimos el delimitador /* por el ##. Sirve también para el parámetro
asterisco *
Ejemplo de uso:
DUMMY
Indica un fichero ficticio. El jcl tratará este fichero como si fuera real pero no leerá o escribirá
ningún dato sobre él. Muy útil cuando se quiere ejecutar un job sin generar algún fichero que no
nos interese.
Página 18 de 28
JCL Básico
DYNAM
Sirve para asignar memoria dinámica a nuestro paso. Pondremos tantas DD DYNAM como
ficheros tengamos. Si no la indicamos el jcl se sirve de la memoria dinámica indicada en la
sentencia EXEC con el DYNAMNBR. Pero también se pueden combinar ambas utilidades.
Veamos 3 posibles ejemplos prácticos(los 3 asignan la misma memoria, dejo a vuestra elección
el que más os guste):
Página 19 de 28
JCL Básico
DDNAME
Funciona de forma similar a un procedimiento o copy. Tú defines una variable (por ejemplo
TEXTO) y almacenas en ella los datos que quieras. Después únicamente has de hacer una
llamada (DDNAME=ENTR1) para utilizar ese texto. Se ve muy claro con un ejemplo:
SYSOUT
Con ella indicas al jcl a qué cola enviar la salida.
Con SYSOUT=* la ejecución del jcl va a la cola que tengas indicada en el MSGCLASS de la
cabecera.
Con SYSOUT=2 la ejecución del jcl va a la cola que el host considere que es la cola 2 (según
la arquitectura donde nos encontremos variará).
COPIES
Indica el número de copias que queremos del fichero donde se indica. Hay un máximo de 255
copias.
DEST
Sirve para indicar el destino del SYSOUT. Por ejemplo, con DEST=LOCAL la ejecución va al
terminal por defecto de la instalación:
FREE
Página 20 de 28
JCL Básico
Este comando libera un fichero cuando el jcl no lo use y, de ese modo, que otro jcl lo pueda
usar. Para los amantes del rendimiento, muy útil para evitar esperas innecesarias. Puede tener
dos valores:
FREE=END --> el fichero se libera al terminar el paso donde se esté ejecutando
FREE=CLOSE --> el fichero se libera en cuanto el programa lo cierra
HOLD
Retiene la ejecución de la salida del jcl hasta que el operador de la consola lo libera. Solo se
usa en el SYSOUT. Si no se indica, por defecto está desactivado (HOLD=NO). Para activarlo:
HOLD=YES.
UCS
Solo dejo reseñado lo que he leído sobre este comando, no sé muy bien cómo funciona pues
nunca lo probé, pero si a alguien le sirve ahí va:
Sirve para indicar el juego de caracteres que utilizará la cola de impresión. Los posibles valores
son:
UCS=indicar_Juego_de_Caracteres,FOLD,VERIFY
OUTLIM
Sirve para indicar el número máximo de registros que saldrán en los ficheros de tipo SYSOUT.
Muy útil para cuando tenemos muchos displays y se nos desborda la ejecución.
Por ejemplo con OUTLIM=1000 cuando la ejecución llegue a 1000 registros se para el job.
Página 21 de 28
JCL Básico
Continuamos con el último apartado de la sentencia DD. Vamos a hablar de todos los posibles
parámetros que se pueden indicar en una sentencia DD DSN.
DSN o DSNAME
Sirve para indicar el nombre del fichero en donde vamos a guardar la salida. Por ejemplo, un
programa con dos ficheros de entrada y dos de salida quedaría del siguiente modo:
− Nombres compuestos: Puede tener varios nombres simples separados por puntos
siempre y cuando el total de posiciones (incluidos los puntos) no supere las 44
posiciones.
Página 22 de 28
JCL Básico
DISP
Se usa para indicar la disposición del fichero. Tiene hasta 3 posibles subparámetros:
− El primero indica la disposición del fichero en el estado inicial. Este estado puede ser:
NEW, OLD, SHR ó MOD.
− El segundo indica la disposición del fichero en caso de que la ejecución sea correcta.
Este estado puede ser: DELETE,KEEP,PASS,CATLG,UNCATLG
− El tercero indica la disposición del fichero en caso de que la ejecución falle. Este
estado puede ser DELETE,KEEP,CATLG,UNCATLG
Primer parámetro:
• OLD: El fichero existe y se abrirá para uso exclusivo del proceso que lo lance.
• SHR: El fichero existe y será compartido con cualquier otro proceso que quiera usarlo.
• MOD: Si el fichero existe se abrirá para uso exclusivo del proceso que lo lance. Se
posicionará en el último registro y comenzará a escribir a partir de ese último registro.
Si el fichero no existe asume DISP=(NEW).
NOTA: Si no se codifica el primer subparámetro (,XXX,XXX) por defecto el sistema pone NEW.
Segundo parámetro:
• KEEP - El fichero se guarda al final del paso. El sistema no guarda la dirección del
fichero y por ello deberemos referenciar todos los datos para recuperar la información
del mismo.
• PASS - Permite utilizar el fichero solo durante la ejecución del jcl. Una vez terminada la
ejecución el fichero se borra solo.
• CATLG - Permite guardar el fichero una vez creado. Puedes utilizar el fichero una vez
terminada la ejecución. Siguiendo con el ejemplo:
Tercer parámetro: se trata de las mismas opciones que para el segundo parámetro.
Página 23 de 28
JCL Básico
Como ejemplos de estas combinaciones pueden salir muchos, os lo dejo en vuestras manos.
Simplemente es ir combinando los 3 subparámetros para obtener el resultado esperado.
UNIT
• TAPE - Cinta.
Uso: UNIT=TAPE
• TA80 - Cartucho.
Uso: UNIT=TA80
SPACE
Se utiliza para asignar el espacio necesario para catalogar un fichero. Consta de varios
subparámetros:
SPACE=(unidad,(mem_primaria,mem_secundaria,num_bloq),RLSE,tipo_asig,ROUND)
Un ejemplo: SPACE=(CYL,(250,125),RLSE,,)
− FICHEROS GRANDES.
BLOQUE = (23476 / LONG.REGISTRO) ENTERO * LONG.REGISTRO
Página 24 de 28
JCL Básico
• Tipo de Asignación:
− CONTIG. Pide que el espacio asignado para la petición primaria sea contiguo.
− MXIG. Solicita la asignación del área mayor de espacio libre.
− ALX. Solicita la asignación del área mayor de espacio libre no inferior a 5 áreas
contiguas.
DCB
Con el DCB se definen parámetros del fichero tales como la longitud fija o variable, el tipo de
organización o el tipo de particionamiento. Su estructura es:
DCB=(RECFM=?,LRECL=?,BLKSIZE=?,DSORG=?,DEN=?)
Ejemplo: DCB=(RECFM=FB,LRECL=80,BLKSIZE=8000,DSORG=PS)
• RECFM:
U-Indefinido
V-Longitud variable
VB-longitud variable bloqueado
F-Longitud fija
FB-Longitud fija bloqueada
FBA-Longitud fija bloqueada con caracteres ASA (para impresión)
Página 25 de 28
JCL Básico
IDCAMS
El programa IDCAMS puede utilizarse para borrar ficheros, copiar ficheros y crear ficheros
VSAM.
Veamos algunos pasos de ejemplo:
Borrado de ficheros
//******************************************************
//*
//**************************** BORRADO *****************
//BORRADO EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEL NOMBRE.DE.FICHERO
SET MAXCC = 0
Opciones de borrado:
* CLUSTER: indica que se tiene que borrar un fichero VSAM. Cuando se elimina el CLUSTER,
se borran también los DATA e INDEX asociados al fichero.
* PURGE: permite borrar un fichero aunque no haya llegado su fecha de caducidad.
* ERASE: se machacan los datos del fichero con ceros binarios.
Copia de ficheros
/******************************************************
//*
//********************** COPIA DE FICHEROS *************
//COPIA EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//ENTRADA DD DSN=FICHERO.DE.ENTRADA,DISP=SHR
//SALIDA DD DSN=FICHERO.DE.SALIDA,DISP=SHR
//SYSIN DD *
REPRO –
INFILE(ENTRADA) –
OUTFILE(SALIDA)
/*
Página 26 de 28
JCL Básico
//****************************************************
//*
//******************** DEFINICION DE VSAM ************
//PASOXXXX EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE NOMBRE.FICHERO –
CLUSTER
SET MAXCC = 0
DEFINE CLUSTER( -
NAME(NOMBRE.FICHERO) –
INDEXED –
VOL(BCT668) –
TRACKS(300 50) –
RECSZ(4800 4800) –
CISZ(12288) –
KEY(16 0) –
SHR(2 3) –
FSPC(15 15)
Página 27 de 28
JCL Básico
IEFBR14
Sirve para catalogar ficheros en vacío, borrarlos, etc. utilizando la sentencia DISP.
//******************************************************
//*
//******************** CATALOGACION VACIO **************
//PASO040 EXEC PGM=IEFBR14
//*
//FILEOUT DD DSN=NOMBRE.DE.FICHERO,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(350,(169,50),RLSE),
// RECFM=FB,LRECL=350
/*
//*******************************************************
//**** BORRADO DE FICHEROS TEMPORALES
//*******************************************************
//BORRADO EXEC PGM=IEFBR14
//DD1 DD DSN=FICHERO.A.BORRAR,DISP=(OLD,DELETE,KEEP)
/*
IEBGENER
Sirve para copiar ficheros secuenciales de uno a otro.
//*******************************************************
//**** COPIA DE FICHERO SECUENCIAL
//*******************************************************
//PASOXXXX EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=FICHERO.DE.ENTRADA
//SYSUT2 DD DSN=FICHERO.DE.SALIDA
//SYSIN DD DSN=DUMMY
/*
Página 28 de 28