JCL Cobol
JCL Cobol
JCL Cobol
Introducción
Este tutorial está enfocado a intentar explicar de forma sencilla el proceso que
necesitamos para ejecutar cualquier proceso Batch (proceso por lotes) en un entorno
Host en el lenguaje JCL (Job Control Lenguaje).
2. Lo básico.
Estas son algunas de las características básicas que se deben de tener en cuenta a la
hora de codificar un Job:
no funcionan
▪ Un Job debe tener como mínimo un paso o sentencia del tipo EXEC asociada al
programa que se desea ejecutar.
▪ El Job termina en una última línea que incluye solo los caracteres //
Como el fin de ejecutar cualquier Job es realizar el procesamiento de datos, vamos a
definir una serie de términos para ver la organización e interpretación de dichos datos.
Dentro del Job habrá que definir cuanto espacio en máquina vamos a necesitar para
guardar dichos datos. Existen 2 tipos:
Sentencia JOB, primera sentencia (llamada también cabecera) que indica el principio
del Job. Solo puede existir una por Job.
▪ CLASS: indica la cola de entrada donde esperará el trabajo para ser ejecutado.
▪ MSGCLASS: indica la cola de salida donde dejará los mensajes que genere la
ejecución.
▪ MSGLEVEL: indica el tipo de mensajes que ha de imprimir el sistema, se realiza
mediante dos sub-parámetros el primer ´1´ indica que queremos todos los
mensajes JCL que se generen en el sistema y el segundo ´1´ indica que también
queremos los mensajes relacionados con la información de los ficheros que vaya
a usar el Job. Si no queremos la información relacionada con los ficheros
dejaremos (1, 0).
▪ NOTIFY: indica el nombre del usuario al que el sistema enviará un mensaje
cuando termine el trabajo.
▪ TIME: indica el tiempo máximo de CPU que puede emplear el Job.
▪ REGION: indica la cantidad de memoria que va a utilizar el Job en su ejecución.
▪ COND: indica una condición para que los pasos del Job se sigan ejecutando.
▪ PRTY: se establece una prioridad al Job dentro de la clase de entrada.
▪ RESTART: indica desde que paso queremos re arrancar un Job (en caso de fallo
del mismo) saltándose los pasos anteriores. Si no se especifica lanzaría todo el
Job desde el principio y hay ocasiones en las que no es necesario.
▪ TYPRUN: indica el tipo de ejecución del Job (SCAN, validación sintáctica…)
El nombre del Job seria PRUEBJOB y el nombre del programador seria TUTORIAL. Un
aspecto a tener en cuenta es que ni el nombre del Job ni el del programador deben
superar los 8 caracteres, y si pones más, no te preocupes que al ejecutar el Job te lo
dirá con un mensaje de error.
Ni que decir tiene que la mejor forma para que una cabecera este correctamente
codificada es realizar el típico copy/paste de un Job que ya funcione ;_)
DISP=(NEW,CATLG,DELETE)
4. Programas y utilidades.
Una vez vistas la sentencia EXEC y la sentencia DD, vamos a ver una serie de
programas (utilidades para IBM) que nos proporciona MVS (Sistma operativo del
MainFrame) y que nos pueden ser de gran ayuda:
Ordenación:
Copia:
Definición:
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:
COPY OUTDD=nombreDD
INDD=(nombreDD,(nombreDD,R),…)
▪ SELECT: especifica los nombres de los miembros de los ficheros de entrada que
se van a copiar.
▪ EXCLUDE: indica los nombres de los miembros que se excluirán de la copia.
5. Utilidades no MVS.
A continuación vamos a analizar otras utilidades, no MVS, que pienso os pueden ser
de gran utilidad en el día a día.
LOAD
Utilidad que permite cargar registros en tablas y construir o ampliar índices de las
mismas.
Si la tabla ya contiene datos, se podrían añadir otros nuevos, o bien, reemplazar los
datos ya existentes. Ni que decir tiene que antes de realizar la carga los datos serán
previamente validados.
Ejemplo:
SYSREC: fichero de entrada que contiene los datos a cargar.
▪ DATA: identifica los datos seleccionados para cargar con el nombre de la tabla
que se indica en INTO TABLE.
▪ INDDN: especifica el nombre del fichero de entrada. Dicho fichero tiene que ser
de acceso secuencial y formato fijo o variable. Por defecto es SYSREC.
▪ RESUME: indica si los registros van a ser cargados en un table space vacío o no.
▪ NO: valor por defecto. Carga registros en un table space vacío. Por si acaso
no estuviese vacío, habría que utilizar REPLACE para evitar errores.
▪ YES: carga registros en un table space no vacío. Si estuviese vacío, daría un
warning, pero los datos se cargarían correctamente.
▪ REPLACE: indica si el table space y todos sus índices necesitan ser reseteados,
para vaciar antes de cargar los registros. Con esta opción, las columnas nuevas a
cargar reemplazarán a todas las existentes.
▪ LOG: indica si la entrada al sistema ocurre durante la fase de reload o en el
proceso de carga.
▪ NO: valor por defecto . Entrada al sistema durante el proceso de carga.
▪ YES: esta opción pone la restricción COPY-pending, por la cual no se puede
actualizar ninguna tabla. A través de NOCOPYPEND, se indica al LOAD que
no fije el status de COPY-pending.
UNLOAD
Utilidad que permite recuperar datos de tablas DB2, descargando las tablas enteras, o
bien, especificando ciertas columnas.
Ejemplo:
▪ SYSREC: fichero de salida que contiene los datos descargados.
▪ SYSPRINT: fichero de salida donde la utilidad deja los mensajes de ejecución.
▪ SYSPUNCH: fichero de trabajo que contiene las sentencias de LOAD necesarias
para un proceso de recarga de datos.
▪ SYSIN: codificación de los mandatos o sentencias de control.
RESTART
Si lanzamos un Job y por cualquier circunstancia falla o es cancelado, no hace falta
volver a ejecutarlo desde el principio, con esta utilidad le decimos desde que paso
queremos que comience de nuevo la ejecución. Hay que tener en cuenta que si
relanzamos un Job puede que se hayan creado los ficheros de salida correspondientes
al paso que se relanza o a paso posteriores. Dichos ficheros deben borrarse antes de
relanzarlo ya que si no fallará el Job por duplicidad de ficheros.
▪ GT Mayor que
▪ GE Mayor o igual que
▪ EQ Igual a
▪ LT Menor que
▪ LE Menor o igual que
▪ NE Distinto de
IF/THEN/ELSE/ENDIF
Se utiliza para ejecutar condicionalmente pasos dentro de un trabajo, y puede tener tres
campos:
▪ Nombre (opcional)
▪ Operación
▪ IF, siempre va seguida de una expresión relacional y de la palabra clave
THEN. Especifica los pasos del trabajo que el sistema procesará cuando la
evaluación de la expresión relacional de la cláusula IF sea una condición
verdadera.
▪ ELSE, puede aparecer a continuación del IF. Especifica los pasos del trabajo
que el sistema procesará cuando la evaluación de la expresión relacional de
la cláusula IF sea una condición falsa.
▪ ENDIF, indica el final de la estructura de sentencia.
▪ El campo de la expresión relacional
Pueden anidarse estructuras hasta un máximo de 15 niveles.
▪ palabras clave:
▪ RC, indica el código de retorno.
▪ ABEND=TRUE, indica que se ha producido una terminación anormal.
▪ ABEND=FALSE, indica que no se ha producido ninguna terminación
anormal.
▪ ABENDCC=Sxxx o ABENDCC=Uxxxx, indica un código de terminación
anormal específico del sistema (S0C4) o del usuario (U0100).
▪ nombrepaso.RUN=TRUE, indica que se ha ejecutado el paso especificado.
▪ nombrepaso.RUN=FALSE, indica que no se ha ejecutado el paso
especificado.
GDG
Generation Data Group (GDG), es un grupo de archivos que están funcional y
cronológicamente relacionados entre sí.
No son ficheros VSAM.
Su nombre lo asigna el sistema de la siguiente manera:
Nombfich.GnnnnVnn
Creación de un GDG
Creación de un GDS
FICHERO.PRUEBA.TUTORIAL.G0001V01
Borrado de un GDS
Borrado de un GDG
6. Referencias.
▪ http://www.ibmmainframes.com/manuals.php