Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

//NOMBREJ JOB (101, 'MI JCL')

// ,NOTIFY=&SYSUID
//****************************
//* JCL BASICO
//****************************
//PASO01 EXEC PGM=PRUEBA1

JCL Básico //SYSOUT

//
//
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 //****************************

1ª edición. Septiembre 2011


JCL Básico

© Consultorio Cobol [http://www.consultoriocobol.com]

El equipo del Consultorio Cobol lo componen:

Tania Pérez Vázquez “Tallian”


Álvaro Rodríguez Martínez “Alvarito”
Hugo Díaz Devesa “Loboc”
José Gandarela Rodríguez “Pepe”
Francisco Adán Oliva Barquilla “Trafuga”

Este manual está bajo la licencia Creative Commons Reconocimiento-NoComercial-


SinObraDerivada 3.0 España (CC BY-NC-ND 3.0)

[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:

Reconocimiento - Debe incluir esta página completa en la reproducción de la obra, sin


alteración alguna.

No comercial - No puede utilizar esta obra para fines comerciales.

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,

El equipo Consultorio Cobol.

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).

La codificación de éste, se realiza con el editor ISPF.

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... :-)

Sentencias JOB / EXEC / DD

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)

Procesadores del JES

El Gestor de trabajos (JES) realiza los siguientes procesos:

ENTRADA. Se envía un trabajo al JES para su ejecución. Se identifica el trabajo con un


nombre y número permitiéndonos controlar en cualquier momento la ejecución del mismo. Las
sentencias de JCL se introducen en un fichero SPOOL en cola de entrada.

CONVERSIÓN. Verificación sintáctica de las sentencias JOB. Revisión de la existencia de


ficheros y librerías especificadas. Aportación de datos procedentes de procedimientos del
sistema. Traspaso de los datos a la cola de ejecución de trabajos

EJECUCIÓN. Se carga el JCL generado en un iniciador. (Se entiende como iniciador a


aquellas particiones que ejecutan un trabajo). Al abrir un iniciador se le especifican unas
determinadas clases asociadas a unos subsistemas o elementos físicos de hardware y estos
iniciadores son los encargados de recoger según orden de prioridades los trabajos y
ejecutarlos.

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

determinada o visualización en un terminal o se guardara en cualquier medio que el sistema


permita.

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.

Los procesos de IMPRESIÓN y BORRADO no se hacen siempre.

Organización básica de los datos

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).

2. Términos de Gestión de Datos

DATOS - Información que se proporciona al ordenador para su proceso.

CAMPOS - Es un área de datos en particular.

REGISTRO - Es el conjunto de campos interrelacionados.

FICHERO - Es el conjunto de registros relacionados.

3. Formato v bloqueo de registros.


Teniendo en cuenta el formato de los registros, las características de los ficheros
pueden ser:

Fijo (F) - todos los registros tienen la misma longitud.

Variable (V) - los registros son de longitud variable. Dicha longitud se especifica en el
registro.

Bloqueado (B) - los registros lógicos y físicos difieren en longitud.

Expandido (S) - los registros lógicos pueden expandirse a distintos registros físicos.

Indefinido (U) - los registros son de longitud variable. No se especifica la longitud en el


registro. Se genera un bloque del tamaño del registro.

4. Los datos se agrupan en bloques para ahorrar espacio, y conseguir que el


proceso sea más rápido.

5. Organización; secuencial, particionada, VSAM.


La organización de un fichero determina las diversas maneras en que se puede
acceder a los registros que hay en él:

ORGANIZACIÓN SECUENCIAL - Estructura que almacena la información un registro


tras de otro, y que cuando se recupera se hace en el mismo orden de secuencia en que

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.

FICHERO PARTICIONADO (PDS) - Estos ficheros contienen miembros y un directorio.


El directorio está situado al comienzo del fichero y contiene una entrada para cada
miembro. Los miembros se pueden tratar como ficheros secuenciales.

6. VSAM - Organización de ficheros y método de acceso de alto rendimiento.


Organiza y mantiene los datos mediante una estructura de catálogos, usando memoria
virtual.

7. Catálogos MVS.

Un Catálogo es un fichero que contiene el nombre de otros ficheros y sus ubicaciones.


Si un fichero está catalogado únicamente con su nombre, el sistema puede, a través
del catálogo, localizar dicho fichero. El Catálogo Maestro contiene los ficheros del
sistema, y los nombres y ubicaciones de los Catálogos de Usuario.

Un fichero se cataloga a través de un parámetro en la sentencia DD.

8. Campos de las sentencias de JCL.


Cada sentencia de control está compuesta por los siguientes campos:

IDENTIFICADOR - Indica al sistema de qué tipo de sentencia se trata:

// --> sentencia de JCL


/* --> sentencia de delimitador
//* --> sentencia de comentarios

NOMBRE - Identifica una sentencia de control a la que otras sentencias y el sistema


pueden hacer referencia.
OPERACIÓN - Especifica el tipo de sentencia de control que sigue al campo de
nombre (JOB, EXEC, DD).

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.

Parámetros de Palabra Clave:

− El significado lo determina el nombre de palabra clave y el valor que se le


asocia.
− Deben de ir después de los parámetros posicionales si existen.
− Pueden codificarse en cualquier orden - No debe especificarse la ausencia de
los mismos.
− Los campos se separan por (,) comas.

Página 7 de 28
JCL Básico

− Deben iniciarse después del tipo de operación (JOB,EXEC,DD) separados de


uno o más blancos.
− No deben existir separación de blancos entre parámetros.
− Los parámetros no deben superar la posición 71.
− Caso de ser insuficiente las posiciones hasta la columna 71 podrá situarse una
coma antes de la posición 72 y seguir codificando en la línea siguiente
respetando las siguientes normas.
− No puede interrumpirse un parámetro y la interrupción de la línea será siempre
al finalizar el mismo y después de la (,) coma.
− // en la primera y segunda posición.
− Podrá iniciarse la continuación a partir de la posición 4 y antes de la posición
16.

COMENTARIOS - Ira a continuación del campo de parámetros, precedido de un


espacio en blanco, y puede codificarse hasta la posición 80. No debe utilizarse si no
hay campo de parámetros, en éste caso se utilizaría la Sentencia de Comentarios (//*).

Página 8 de 28
JCL Básico

La Cabecera

Campos de las sentencias de la cabecera

Cada sentencia de control está compuesta por los siguientes campos:

• IDENTIFICADOR - Indica al sistema de qué tipo de sentencia se trata:


// --> sentencia de JCL
/* --> sentencia de delimitador
//* --> sentencia de comentarios

• NOMBRE - Identifica una sentencia de control a la que otras sentencias y el sistema


pueden hacer referencia.

• OPERACIÓN - Especifica el tipo de sentencia de control que sigue al campo de


nombre (JOB, EXEC, DD).

• PARÁMETROS - Especifica las características particulares de las sentencias de JCL.


Existen dos tipos de parámetros:
o Posicionales: su significado viene determinado por la position que ocupa en la
sentencia. Su ausencia debe indicarse con una coma.
o De Palabra Clave: su significado viene determinado por la palabra especial que
lo identifica. Siempre van después de los posicionales.

• COMENTARIOS - Irá a continuación del campo de parámetros, precedido de un


espacio en blanco, y puede codificarse hasta la posición 80. No debe utilizarse si no
hay campo de parámetros, en éste caso se utilizaría la Sentencia de Comentarios (//*).

Sentencia JOB - CABECERA

//NAMEJCLX JOB 102,'DESCRIPCION',CLASS=A,


// MSGCLASS=H,MSGLEVEL=(2,1),
// NOTIFY=&SYSUID,REGION=4M,
// TIME=NOLIMIT,COND=(0,NE),PRTY=15,
// RESTART=PASO15,TYPRUN=SCAN

Sentencia obligatoria que indica el principio del trabajo, y solo puede existir una por trabajo.

• Parámetros posicionales en la sentencia JOB:


o INFORMACIÓN DE CONTABILIDAD - especifica la información de contabilidad
exigida por la instalación.

o NOMBRE DEL PROGRAMADOR - identifica al grupo responsable del trabajo.

• Parámetros de Palabra Clave en la sentencia JOB:

o CLASS - indica la cola de entrada donde esperara el trabajo para ser


ejecutado. Ha de ser cualquier carácter alfanumérico según decida la
instalación.

o MSGCLASS - indica la cola de salida de los mensajes del sistema. Si no se


especifica se toma el que tenga por defecto la plataforma donde nos
encontremos. Es un parámetro compuesto de dos subparámetros posicionales:

Página 9 de 28
JCL Básico

 El primero (Sentencias) acepta los valores :


0: Solo sentencias de Job
1: Sentencias de JCL y resolución de parámetros simbólicos por parte del
JES.
2: Sentencias de JCL.

 El segundo (Mensajes):
0: Mensajes de JCL y todos si acaba mal
1: Todos siempre

o MSGLEVEL - indica el tipo de mensajes que ha de imprimir el sistema.

o NOTIFY - indica el usuario de TSO al que el sistema enviara un mensaje


cuando termine el trabajo. La opción: NOTIFY=&SYSUID, hace que cuando el
job acabe se muestre un mensaje al usuario que lo ha submitido.

o TIME - indica el tiempo máximo de CPU que puede emplear el job.

o REGION - indica la cantidad de memoria que va a utilizar el job en su


ejecución.
- En el caso de trabajar con memoria real ADDRSPC=REAL indica el
total de memoria a utilizar.
- En el caso de trabajar con memoria virtual ADDRSPC=VIRT evita el
exceso de paginación cuando se codifican valores bajos
La medida se expresa en valor superior a cero en número par y como
unidad K(1024 octetos).

o COND - Indica un código de condición para permitir o evitar ejecutar los


diferentes pasos de un JOB en función del código de retorno que devuelve el
sistema por la ejecución de cada uno de los paso. El job deja de ejecutarse
cuando el código de condición devuelto cumple el código del parámetro
COND.
Ejemplos:
 COND=(0,NE)  Si la ejecución del job no da un 0 en algún paso se
cancela la ejecución.
 COND=(4,NE)  Si la ejecución del job no da un 4 en algún paso se
cancela la ejecución.
 COND=(12,LE)  Si la ejecución del job no da un error menor o igual
a 12 en algún paso, se cancela la ejecución.
 El primer valor puede estar comprendido entre 0 y 4095 (los más
habituales son el 0, 4, 8, 12,16)
 Las condiciones posibles son: EQ (igual), LT(menor que), LE(menor o
igual), GT(mayor que), GE(mayor o igual), NE(distinto)
 Se puede poner en la cabecera, en un paso en concreto, o en ambos
sitios.

o ADDRSPC - Especifica si el proceso se ejecuta en memoria Real


(ADDRSPC=REAL) o Virtual (ADDRSPC=VIRT). Si no se indica por defecto
usa la memoria Virtual.

o DYNAMNBR - Este parámetro está asociado con la alocación dinámica de


ficheros y no se debe codificar en otras circunstancias. Alocación dinámica es
aquella que efectuamos por medio del programa en ejecución que marca la
pauta de que ficheros debe o no coger o crear .Cada fichero a crear será una
unidad de asignación al parámetro. Debe de asociarse el paso al parámetro
para que el JOB sepa en qué momento debe de reservar recursos para la
asignación dinámica de ficheros.

DYNAMNBR.PASO01=10

Página 10 de 28
JCL Básico

El número máximo de ficheros a poder asignar de forma dinámica es de 1635.

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214,


// DYNAMNBR.PASO01=10,........

La alocación dinámica suele especificarse en la sentencia EXEC o por medio


de una DD.

o PRTY - se establece una prioridad al job dentro de la clase de entrada.El


parámetro consta de dos subparámetros posicionales numéricos, el primero
con valores comprendidos entre 0 y 14 y el segundo entre 0 y 15. La prioridad
final se obtiene del producto de 16x (valor 1)+(valor 2)
DPRTY =(10,5)

o RESTART - rearrancar un trabajo desde el paso especificado, saltando los


pasos anteriores. Que queremos lanzar el job desde el PASO15 (por ejemplo)
saltándose los 14 pasos anteriores, pues le indicamos: RESTART=PASO15.

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.

o RD - Especifica la posible forma de arrancar un JOB


RD= { R }
RNC
NC
NR

R  Rearranque automático combinado con la macro CHKPT.


RNC  Rearranque automático a nivel de paso (no de checkpoint).
NC  No se permiten rearranques automáticos.
NR  No permite arranque automático, pero se puede tomar checkpoint para
el arranque posterior.

Este parámetro no suele utilizarse y en su lugar se utiliza frecuentemente el


parámetro restart como rearranque manual.

o PERFORM - Grupo de rendimiento al que se aplica al


JOB. PERFORM="numero con valores comprendidos entre 1 y 255"

Ejemplo de una cabecera:

//NOMBREJOB JOB (101, 'MI JCL'),MSGLEVEL=(2,1) , CLASS=A,


// MSGCLASS=H,NOTIFY=&SYSUID
//*

Página 11 de 28
JCL Básico

Sentencia EXEC

Determina el inicio de un paso de trabajo y el programa o procedimiento catalogado a ejecutar.


El máximo de sentencias autorizado para un JOB es de 255.

//PASO001 EXEC PGM=NAMEPGM,REGION=10M,


// TIME=(30,00),COND=(0,NE),
// ACCT=(contabili.),DYNAMNBR=10,
// PARM=("DESCRIPCON"),RD=NC,
// ADDRSPC=REAL

Sentencia que indica el programa o procedimiento que se desea ejecutar.

Parámetros Posicionales.
Se considera parámetro posicional de la sentencia EXEC la especificación del nombre del
programa o procedimiento a ejecutar:

o PGM=Nombre_del_programa. Se aplica cuando el paso deberá ejecutar un programa,


asociando el nombre del programa a ejecutar.

o PROC=Se aplica cuando el paso deberá ejecutar un programa, asociando el nombre


del programa a ejecutar.

Parámetros de Palabra Clave.


A diferencia de los parámetros PROC y PGM que decíamos que había de ser uno de los dos el
primero en codificarse en la ficha EXEC los restantes pueden codificarse en cualquier
orden (Todos ellos son opcionales):

o ACCT - especifica la información contable relativa al paso, exigida por la instalación.

o ADDRSPC - Especifica si debemos ejecutar el paso en memoria real o virtual.

o COND - especifica bajo qué condiciones no se ejecutara el paso. Tiene algunas


peculiaridades que no se aplican en la sentencia JOB y son:
{ (0,EQ) }
COND= (0,EQ,PAS01)
{ EVEN }
COND= ONLY

 ONLY - Solo se ejecuta si alguno de los pasos anteriores finalizase de manera


incorrecta.

 EVEN - El paso se ha de ejecutar siempre, todo y que los anteriores acaben de


forma incorrecta.

//TRABAJO1 JOB PPPPP,’J.MIR’,MSGCLASS=V,CLASS=C,


// NOTIFY=T515214
//*
//PAS01 EXEC PROC=AAAP000...
//PAS02 EXEC PROC=FINMALO,COND=(0,EQ,PAS01),....
//PAS03 EXEC PROC=FINMALO,COND=ONLY,...
//PAS04 EXEC PROC=SIFIN,COND=EVEN,...

Página 12 de 28
JCL Básico

o DPRTY - Determina la prioridad de ejecución del JOB en relación a otros en cola de


ejecución. El parámetro consta de dos subparámetros posicionales numéricos, el
primero con valores comprendidos entre 0 y 14 y el segundo entre 0 y 15. La prioridad
final se obtiene del producto de 16x (valor 1)+ (valor 2).

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214,


// DPRTY =(10,5),...

¡OJO! Se recomienda no utilizar este parámetro de no ser por causas justificadas y


aceptar la prioridad que asigna el JES 2 para prioridades según las clases de
ejecución.
El parámetro prty para la ficha job es el equivalente a éste y su codificación anula la de
la ficha exec.

o DYNAMNBR - éste parámetro está asociado con la alocación dinámica de ficheros y


no se debe codificar en otras circunstancias. Alocación dinámica es aquella que
efectuamos por medio del programa en ejecución que marca la pauta de que ficheros
debe o no coger o crear. Cada fichero a crear será una unidad de asignación al
parámetro Debe de asociarse el paso al parámetro para que el JOB sepa en qué
momento debe de reservar recursos para la asignación dinámica de ficheros. El
número máximo de ficheros a poder asignar de forma dinámica es de 1635.

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214


//*
//PAS01 EXE PGM=AAAP000,DYNAMNBR=10,...

La alocación dinámica suele especificarse en la sentencia EXEC o por medio de una


DD (dynam).
Este parámetro tiene equivalencia al de igual nombre para la ficha JOB. (La
codificación del parámetro en JOB anula la especificada en EXEC).

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.

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214


//*
//PAS01 EXEC PGM=AAAP000,PARM=‘/ &CADENA’

¡OJO! Codificación en pgm pl/i de recepción de parámetros:

AAAP000: PROC (PARM) OPTIONS(MAIN)


DCL PARM CHAR (100) VAR;
DCL 1 WPARM BASED(ADDR(PARM)),
3 LONGIT BIN FIXED(15),
3 CADENA CHAR(8);

Utilidad DYNALLOC

Se usa del siguiente modo:


PARM=('DYNALLOC=(SYSALLDA,32)')  Cantidad de memoria que se da a la
ejecución del paso. Si se queda corto, aumentarla en valores de 8, 12, 32, 64,128, 256
(como las memorias RAM).

o PERFORM - Grupo de rendimiento al que se aplica al paso.


PERFORM=numero con valores comprendidos entre 1 y 255. Por defecto asume 1
para pasos de JOB no TSO y 2 para JOBs de TSO.

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,


// PERFORM=2

Página 13 de 28
JCL Básico

o RD - controla las posibilidades de rearranque del paso en el que está codificado.

 RD=R Rearranque automático combinado con la macro CHKPT.


 RD=RNC Rearranque automático a nivel de paso (no de checkpoint).
 RD=NC No se permiten rearranques automáticos.
 RD=NR No permite arranque automático, pero se puede tomar checkpoint para
el arranque posterior.

o REGION - especifica la cantidad de memoria que puede utilizar el paso.


En el caso de trabajar con memoria real ADDRSPC=REAL indica el total de memoria a
utilizar.
En el caso de trabajar con memoria virtual ADDRSPC=VIRT evita el exceso de
paginación cuando se codifican valores bajos.
La medida se expresa en valor superior a cero en número par y como unidad K(1024
octetos).

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214


//*
//PAS01 EXEC PGM=AAAP000,REGION=1024K

o TIME - Especifica el tiempo máximo de CPU (tiempo en que el procesador utiliza


recursos) autorizado para la ejecución del paso.

TIME=([minutos|),[segundos|)

Ambos requieren valores numéricos el primero en rango comprendido entre 1y 1439 y


el segundo con valor entre 1 y 59 .Ejemplos TIME=1, TIME=(1,20), TIME=(,40)
Time=1440 (24 horas) presupone que no hay límite de CPU para ese JOB

Para indicar 15 segundos:

//TRAB1 JOB DEPEXT,PUIG,MSGCLASS=V,CLASS=C


//*
//PAS01 EXEC PGM=AAAP000,TIME=(,15)

La ausencia de codificación de este parámetro presupone el trabajar con el tiempo


limitado por la instalación.

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

La no especificación de nombre lógico en una ficha DD presupone la concatenación al fichero


de la sentencia DD anterior. En ocasiones un paso puede precisar de más de un fichero para
una determinada entrada de datos y ello es posible por medio de la concatenación de DDs. La
forma en codificarse es:

//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.

Anteriormente a este capítulo he hablado de las líneas de la cabecera de un jcl y de las


sentencias que ejecutan programas (EXEC). Podemos tener sentencias DD tanto en la
cabecera como en cada uno de los pasos de nuestro jcl:

Sentencias DD en la cabecera del jcl.

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:

o JOBLIB  La ejecución de un programa se inicia en la busca del objeto (código en


lenguaje maquina) en las librerías estándar de la instalación (SYS1.LINKLIB) pero en
según qué casos puede sernos de utilidad el desplazar esa búsqueda a otras librerías.

La especificación de una o varias librerías no evita en último caso el acudir a las


estándar de la instalación si no se encontrase en ninguna de las referidas.
Ha de codificarse después de la ficha JOB y antes de cualquier paso EXEC.
No puede utilizarse en procedimientos catalogados.

La codificación de JOBLIB predispone a los pasos EXEC posteriores a que todos


acudan a esas librerías para la obtención del objeto a ejecutar. Será excepción de lo
dicho los pasos EXEC que dispongan de una DD STEPLIB en cuyo caso serán esas
las librerías de captura.

o JOBCAT  La diferencia de la JOBCAT con la JOBLIB radica en que mientras la


anterior buscaba el objeto a ejecutar, esta marca el camino a seguir para la búsqueda y

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.

Ha de codificarse después de la ficha JOB y de la JOBLIB y antes de cualquier paso


EXEC.

La codificación de JOBCAT predispone a los pasos EXEC posteriores a que todos


acudan a esas librerías para la obtención del catalogo de ficheros. Será excepción de
lo dicho los pasos EXEC que dispongan de una DD STEPCAT en cuyo caso serán
esas las librerías de catalogo.

o SYSCHK  Define el fichero de grabación de CHEKPOINTS (puntos de control) de un


programa que se guardan para rearranque posterior.

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.

Sentencias DD en cada paso (EXEC) del job.

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:

o STEPLIB  La ejecución de un programa se inicia en la busca del objeto (código en


lenguaje maquina) en las librerías estándar de la instalación (SYS1.LINKLIB) pero en
según qué casos puede sernos de utilidad el desplazar esa búsqueda a otras librerías.

La especificación de una o varias librerías no evita en último caso el acudir a las


estándar de la instalación si no se encontrase en ninguna de las referidas.

Ha de codificarse después de la ficha EXEC aunque no tiene porque ser la primera DD.

A diferencia de la JOBLIB puede utilizarse en procedimientos catalogados.

En el siguiente ejemplo, cuando se lance el job, éste buscará el ejecutable del


programa PROGRAMA1 en la libreria1 y si no lo encuentra lo buscará en la librería2:

//PASO01 EXEC PGM=PROGRAMA1


//STEPLIB DD DSN=xxxx.nombre.libreria1,DISP=SHR
// DD DSN=xxxx.nombre.libreria2,DISP=SHR
...
...

¿Para qué puede servir la STEPLIB?

Son muchas las utilidades que tiene.

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.

SOLUCIÓN: Lo que debes hacer es dejar la compilación de tu programa en una librería


a la que tengas acceso en el entorno de producción (una librería que hayas creado tú o
alguna puente o de intercambio que exista, en muchas plataformas existe una librería

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:

//PASO01 EXEC PGM=MIPROGRAMA


//STEPLIB DD DSN=xxxx.nombre.libreria1,DISP=SHR
...

Cuando se ejecute el jcl, el programa "tirará" de la librería indicada en la STEPLIB.

Pongo otro ejemplo:

Imagina que puntualmente se necesita modificar un programa durante un periodo de


tiempo concreto.
Por ejemplo, tienes un programa con información acerca de la velocidad máxima en las
autovías (120 km/h). Pero resulta que de la noche a la mañana lo que creías que no iba
a ocurrir, ocurre, y es que la velocidad ha de ser bajada a 110 km/h durante un plazo
determinado.
Bien, lo normal sería modificar tu programa, implantarlo, y esperar a que dentro de X
meses tengas que volver a modificar el programa para devolverlo a su estado
original(120 km/h), con todo lo que eso conlleva, volver a bajar el programa, modificar,
probar, implantar, etc....

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).

o STEPCAT  La diferencia de la STEPCAT con la STEPLIB radica en que mientras la


anterior buscaba el objeto a ejecutar, esta marca el camino a seguir para la búsqueda y
obtención del catalogo de ficheros. sigue las mismas pautas y en último extremo acude
a las estándar de la instalación.
Ha de codificarse después de la ficha EXEC aun que no tiene porque ser la primera
DD.
La sentencia STEPCAT solo puede referirse a catálogos de usuario del tipo VSAM.

o SYSABEND  Determina el fichero donde el sistema efectuara el vuelco de memoria


por terminación anormal ABENDED. La información que aporta hace referencia a:
Núcleo del sistema
Área del programa problema
Tabla de Trace

o SYSUDUMP  Determina el fichero donde el sistema efectuara el vuelco de memoria


por terminación anormal ABENDED. A diferencia de la anterior tan solo facilita
información del área del programa.

o DUMMY  representa un fichero ficticio, el programa lo abrirá, efectuará operaciones


de E/S sobre el (ficticias), pero el sistema no dará error. Muy útil cuando no queremos,
por lo que sea, obtener el fichero de salida de un programa. Ponemos el fichero a
DUMMY y la ejecución será exactamente igual que si lo tuviéramos pero sin escribir
nada en la salida.

Página 17 de 28
JCL Básico

Sentencia DD (Parte II)

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:

//PAS01 EXEC PGM=MIPROGRAMA


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA2 DD *
AQUI_ESCRIBIMOS_LOS_DATOS_DE_ENTRADA2
//SALIDA1 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

Otra utilidad es en los SORT:


//SYSIN DD *
SORT FIELDS=(1,4,CH,A)
/*

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:

//PAS01 EXEC PGM=MIPROGRAMA


//SYSIN DD DATA,DLM=‘##’
SORT FIELDS=(1,1,CH,A)
##--> Delimitador modificado

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.

Aclaraciones: El programa utilizado ha de realizar el open y el close como si de un fichero real


se tratara. En el siguiente ejemplo se ejecuta el programa MIPROGRAMA del mismo modo que
lo haría normalmente, pero en el fichero de SALIDA1 no se obtendrán datos, sin embargo el
funcionamiento del programa será exactamente el mismo.

Página 18 de 28
JCL Básico

//PAS01 EXEC PGM=MIPROGRAMA


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DUMMY
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

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):

//PAS01 EXEC PGM=MIPROGRAMA


//DD1 DD DYNAM
//DD2 DD DYNAM
//DD3 DD DYNAM
//DD4 DD DYNAM
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DUMMY
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//DD1 DD DYNAM
//DD2 DD DYNAM
//DD3 DD DYNAM
//DD4 DD DYNAM
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DUMMY
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DUMMY
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

Página 19 de 28
JCL Básico

Parámetros palabras clave

Pueden codificarse en cualquier orden y son opcionales.

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:

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DDNAME=FICHERO2
//SALIDA1 DD DSN=xxxx.nombre.fichero2,
// DISP=(NEW,CATLG,DELETE),...
...
//PAS01 EXEC FERPROC
//PASO01.FICHERO2 DD *
AQUI_ESCRIBIMOS_LOS_DATOS_DE_NUESTRO_FICHERO
/*

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.

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//SYSPRINT DD SYSOUT=2,COPIES=2
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero2
// DISP=(NEW,CATLG,DELETE),...
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

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:

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//SYSPRINT DD SYSOUT=2,DEST=LOCAL
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero2
// DISP=(NEW,CATLG,DELETE),...
//SALIDA2 DD DSN=xxxx.nombre.fichero3,
// DISP=(NEW,CATLG,DELETE),...

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.

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//SYSPRINT DD SYSOUT=2,HOLD=YES
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero2
// DISP=(NEW,CATLG,DELETE),...

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

En juego de caracteres se indican los caracteres


FOLD - es opcional, permite modificar el juego de caracteres por otro (por ejemplo cambiar
mayúsculas a minúsculas)
VERIFY - el operador verificará el juego de caracteres

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//SYSPRINT DD SYSOUT=2,UCS=(YN,,VERIFY)
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero2
// DISP=(NEW,CATLG,DELETE),...

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.

//PAS01 EXEC PGM=MIPROGRAMA,DYNAMNBR=4


//SYSPRINT DD SYSOUT=2,OUTLIM=1000
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero2
// DISP=(NEW,CATLG,DELETE),...

El valor máximo es 16777215. Si no se indica se considera ilimitado.

Página 21 de 28
JCL Básico

Sentencia DD (Parte III)

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:

//PAS01 EXEC PGM=MIPROGRAMA


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA2 DD DSN=xxxx.nombre.fichero2,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero3,
// ...
//SALIDA2 DD DSN=xxxx.nombre.fichero4,
// ...

¿Qué nombre he de dar al fichero?


El nombre que des a un fichero es libre pero teniendo en cuenta las reglas obligatorias que
marca el host y las reglas opcionales que te marque la arquitectura donde te encuentres.
Como las reglas de arquitectura van en función del entorno donde te encuentres voy a
comentar las reglas del host:

− Nombres simples: Un único nombre de 8 posiciones alfanuméricas en donde el primer


carácter alfabético ha de ser uno de los siguientes: @ $ #

− 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.

− Nombres de ficheros particionados: los explicaré más adelante.


− Nombres de ficheros temporales: los explicaré más adelante.
− Nombres de ficheros generacionales: los explicaré más adelante.

− Nombres que referencian a ficheros anteriores:

Una opción es utilizar "DSN=NULLFILE" en vez de "DD DUMMY"

Estos dos ejemplos son lo mismo:

//PAS01 EXEC PGM=MIPROGRAMA


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA2 DD DSN=xxxx.nombre.fichero2,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero3,
// ...
//SALIDA2 DD DSN=NULLFILE

//PAS01 EXEC PGM=MIPROGRAMA


//ENTRADA1 DD DSN=xxxx.nombre.fichero1,DISP=SHR
//ENTRADA2 DD DSN=xxxx.nombre.fichero2,DISP=SHR
//SALIDA1 DD DSN=xxxx.nombre.fichero3,
// ...
//SALIDA2 DD DUMMY

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

Explico cada uno de ellos.

Primer parámetro:

• NEW: El fichero es de nueva creación.

• 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:

• DELETE - Se elimina el fichero tras la ejecución.

Si (,DELETE,XXX)  en caso de que el paso termine bien se borra el fichero.


Si (,XXX,DELETE)  en caso de error se borra el fichero.
Si (,DELETE,DELETE)  tanto si el paso termina bien como si no, en cualquier caso
se borra el fichero.

• 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.

Si (,KEEP,XXX)  en caso de que el paso termine bien se guarda.


Si (,XXX,KEEP)  en caso de error se guarda el fichero.
Si (,KEEP,KEEP)  tanto si el paso termina bien como si no, en cualquier caso se
guarda el fichero.

• 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:

Si (,CATLG,XXX)  en caso de que el paso termine bien se cataloga.


Si (,XXX,CATLG)  en caso de error se cataloga el fichero.
Si (,CATLG,CATLG)  tanto si el paso termina bien como si no, en cualquier caso se
cataloga el fichero.

• UNCATLG - Se borra la dirección del catalogo del acceso a un fichero.

Tercer parámetro: se trata de las mismas opciones que para el segundo parámetro.

Página 23 de 28
JCL Básico

NOTA. Valores por defecto:

Si no pones nada o pones DISP=(NEW) por defecto el sistema toma:


DISP=(NEW,DELETE,DELETE).
Si pones solo DISP=(OLD) el sistema toma por defecto DISP=(OLD,KEEP,KEEP).
Si pones solo DISP=(SHR) el sistema toma por defecto DISP=(SHR,KEEP,KEEP).

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

Sirve para especificar en qué tipo de dispositivo queremos guardar el fichero:


UNIT=dispositivo

• SYSALLDA - Dispositivo de acceso directo (Disco).


Uso: UNIT=SYSALLDA

• TAPE - Cinta.
Uso: UNIT=TAPE

• TA80 - Cartucho.
Uso: UNIT=TA80

• TA90 - Cartucho de alta densidad.


Uso: UNIT=TA90

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,,)

• Unidad  Lo primero en hacer es elegir la unidad de medida del espacio, teniendo en


cuenta que:
− TRK: El espacio necesario se pide en pistas. PISTAS = (LONG.REGISTRO *
NUM.REGISTROS) / 47474
− CYL: El espacio necesario se pide en cilindros.

Generalmente este se utiliza para cadenas de JCL que utiliza 15 pistas.


Ojo este prácticamente no libera pistas. CILINDROS = PISTAS / 15

• Memoria primaria  Cantidad de memoria que se estima que necesitará el fichero.


• Memoria secundaria  cantidad a añadir en caso de sobrepasar la memoria primaria.
• Número de bloques  Número de bloques del directorio. Este dato se obtiene
mediante:
− FICHEROS PEQUEÑOS Y MEDIANOS.
BLOQUE = (15476 / LONG.REGISTRO) ENTERO * LONG.REGISTRO

− FICHEROS GRANDES.
BLOQUE = (23476 / LONG.REGISTRO) ENTERO * LONG.REGISTRO

• RLSE  Se encarga de liberar el espacio no ocupado tras crear el fichero.

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.

• ROUND  Tiene sentido en espacio por bloques y efectúa el redondeo a número


entero de cilindros.

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)

• LRECL  Longitud del registro.

• BLKSIZE  Longitud del bloqueo. Poner un número múltiplo del LRECL.

• DSORG  Tipo de organización.


PS-Secuencial
IS-Secuencial Indexado
DA-Organización directa
PO-Particionado

Página 25 de 28
JCL Básico

IDCAMS, IEFBR14, IEBGENER.


En este artículo vamos a describir algunas utilidades MVS básicas que pueden sernos
útiles/necesarias al codificar un JCL.

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

Borra los ficheros que le indiquemos en la SYSIN.


Añadimos el "SET MAXCC = 0" para que en caso de que no exista el fichero no nos de error y
continúe la ejecución del JCL.

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)
/*

Copia el fichero de entrada en el fichero de salida.


Opciones de copiado:
# SKIP: número de registros que deben saltarse desde el inicio del fichero antes de comenzar
el proceso de copiado. También se pueden codificar:
# COUNT: número de registros que queremos copiar. También se pueden codificar:

Página 26 de 28
JCL Básico

Creación de ficheros VSAM

//****************************************************
//*
//******************** 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)

Crea el fichero VSAM NOMBRE.FICHERO.


Opciones:
* DELETE: Es la instrucción de borrado.
* CLUSTER: Indica que borre todos los ficheros que componen el VSAM (índice y datos).
* DEFINE CLUSTER: Definición del fichero VSAM.
* NAME: Nombre físico del fichero.
* INDEXED: Indica que el fichero es indexado.
* VOL: El nombre del volumen/disco donde se quiere que resida. En nuestra instalación no es
necesario ponerlo, ya que la asignación es automática.
* TRACKS, CYLS, RECORDS: Determina el espacio en pistas, cilindros o registros. La primera
magnitud indica el espacio de la extensión primaria y la segunda el espacio para las
extensiones secundarias.
* RECSZ: Longitud del registro. La primera magnitud indica la longitud.
* CISZ: Control Interval Size, longitud Intervalo de control. El intervalo de control es el
equivalente al bloque en los ficheros VSAM.
* KEY: Indica la información necesaria para ubicar la clave. La primera magnitud indica la
longitud de la clave y la segunda el desplazamiento de la misma respecto del principio del
registro.
* SHR: Indica el grado de accesibilidad concurrente al fichero. (2 3) Son los valores más
usuales e indican que sólo puede haber un acceso concurrente de actualización y es de libre
acceso de lectura.
* FSPC: Free Space. Indica la distribución del espacio libre en el fichero, la primera magnitud
indica el espacio libre en cada intervalo de control y la segunda indica el número de intervalos
de control libres en el Área de Control.

Página 27 de 28
JCL Básico

IEFBR14
Sirve para catalogar ficheros en vacío, borrarlos, etc. utilizando la sentencia DISP.

Catalogación de un fichero vacío

//******************************************************
//*
//******************** 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
/*

Cataloga un fichero en vacío.


Incluiremos en el DISP la información que consideremos.

Borrado de ficheros temporales

//*******************************************************
//**** BORRADO DE FICHEROS TEMPORALES
//*******************************************************
//BORRADO EXEC PGM=IEFBR14
//DD1 DD DSN=FICHERO.A.BORRAR,DISP=(OLD,DELETE,KEEP)
/*

Borra el fichero indicado.

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
/*

Cuando es una copia simple en la SYSUT1 se codifica el fichero de entrada.


Si en el SYSUT1 indicamos NULLFILE crearemos el fichero indicado en SYSUT2 en vacío.

Página 28 de 28

También podría gustarte