El Lenguaje de Control de Trabajos

  El Lenguaje de Control de Trabajos ["Job Control Language" ("JCL"), en inglés], es un lenguaje informático o un conjunto de especificaciones de morfología y sintaxis requeridas para la redacción de instrucciones de ejecución de programas informáticos por parte del sistema operativo de un equipo informático. Este lenguaje se usa en los Ordenadores Centrales ("Mainframes", en inglés) y es específico para cada sistema operativo.
  Las instrucciones (también llamadas "pasos" o "sentencias") del JCL son declaraciones u órdenes con las que se indica al sistema operativo qué tareas debe realizar, en qué secuencia han de ejecutarse y en qué periféricos están ubicados los ficheros de datos (de entrada y/o de salida) que requieren dichas tareas.
  En el contexto de JCL, un procedimiento [también llamado trabajo ("job", en inglés)] es un conjunto coherente de instrucciones para realizar un trabajo particular.
  El uso de este tipo de lenguaje (generalmente en archivos de texto plano conocidos como "archivos JCL") permite un alto grado de flexibilidad e independencia respecto a la ubicación física de los programas y ficheros involucrados.
  Teniendo en cuenta todo esto, se puede asegurar que, en este contexto, todo procedimiento está dividido en pasos que contienen los parámetros y programas necesarios para poder ejecutar dicho trabajo con éxito.


EL ARCHIVO JCL

  Un archivo JCL es un archivo de texto plano (extensión ".jcl", aunque también puede tener las extensiones ".job" o ".prc") que se compone de las sentencias que forman parte del trabajo.
  Cada paso debe tener 72 caracteres para su codificación, puesto que a partir de ahí se considera un comentario y no tendrá efecto sobre el procedimiento. A pesar de su flexibilidad, una sentencia tiene una sintaxis similar a la siguiente: <VARIABLE> <SENTENCIA> <PARÁMETRO 1>,<PARÁMETRO 2>,... . Además, todo paso del archivo debe estar escrito en mayúsculas.  Por otra parte, las líneas de este tipo de archivo están siempre numeradas en su parte izquierda.

  También se debe tener en cuenta que  el archivo puede actuar directamente sobre el equipo anfitrión, generalmente con el sistema operativo z/OS, o sobre equipos informáticos (o particiones) con otros sistemas operativos. Puede distinguirse un tipo u otro por la primera parte del archivo, conocido como "cabecera":
  •   Uso con el equipo anfitrión:  Este tipo de cabecera también se denomina "ficha job". Comienza siempre con la sentencia JOB.
  •   Uso con equipos externos: Su cabecera es muy parecida al inicio de un guión bash.

  Otras características básicas de un archivo de este tipo, cuando se utiliza con un equipo anfitrión, son:
  •   La mayoría de las sentencias comienzan con //.
  •   Los comentarios se realizan con //*.
  •   También existe un delimitador /*.
  •   Debe tener, al menos, un paso EXEC asociado al programa que se desea ejecutar.
  •  Generalmente, la finalización del archivo incluye una última línea que únicamente tendrá escrito //.
  Si un archivo escrito con este tipo de lenguaje se emplea con equipos externos, posee partes escritas en lenguaje bash, con las características básicas a mayores:
  •   Poseer sentencias escritas en minúsculas y/o mayúsculas (según el caso).
  •   Los pasos ejecutados mediante guiones comienzan por ..
  •   Los comentarios también pueden comenzar por #.
  Al final del archivo, generalmente, se especifican los pasos de finalización del programa al que pertenece, lo que se conoce como "control de salida":
  • 998: Finalización correcta.
  • 999: Finalización incorrecta.
  Estos pasos finales pueden ser una sentencia EXEC (si el archivo actúa sobre el equipo anfitrión)...
... o un guión bash (en el caso de que el archivo se ejecute con equipos externos).

  Para la correcta gestión de los archivos se deben conocer los siguientes conceptos:
  •   DATOS: Es la información que el ordenador necesita para realizar su proceso.
  •   CAMPOS: Es un área de datos concreta.
  •   REGISTRO: Conjunto de campos.
  •   FICHERO: Conjunto de registros.

  •   Para realizar una correcta ejecución de un procedimiento, hay que asegurarse de tener una serie de registros coherentes, pudiendo ser el formato de los mismos de las siguientes formas:
    •   Fijo (F): Todos tienen una misma longitud.
    •   Variable (V): De longitud variable.
    •   Bloqueado (B): Los registros lógicos y físicos no tienen la misma longitud.
    •   Expandido (S): Los registros lógicos pueden expandirse a diferentes registros físicos.
    •   Indefinido (U): Son de longitud variable, no se especifica la longitud en el registro. Se genera un bloque del tamaño del registro.
      Una vez definidos los formatos de los registros habrá que ver cuáles son los tipos de ficheros que existen:
    •   SECUENCIAL: Se almacenan los registros uno detrás de otro, recuperándose, a la hora de su lectura, en el mismo orden en que fueron grabados en el 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.
    •   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.



    SENTENCIAS BÁSICAS DE JCL

    Sentencia JOB
      Muestra el comienzo del procedimiento y sólo puede existir una de estas en el archivo.
      Su sintaxis es:
      <NOMBRE DE PROCEDIMIENTO> <JOB> <PARÁMETRO 1>, '<NOMBRE DEL PROGRAMADOR>',<PARÁMETRO 2>,...
      
      Ni el nombre del procedimiento ni el del programador deben superar los 8 caracteres (si se escribe más, al ejecutar el procedimiento aparecerá un mensaje de error).
      Aunque no tienen que estar todos presentes, sus parámetros más relevantes son:
    •   CLASS: Indica la cola de entrada donde esperará el trabajo para ser ejecutado.
    •   MSGCLASS: Muestra la cola de salida donde dejará los mensajes que genere la ejecución.
    •   MSGLEVEL: Señala el tipo de mensajes que ha de imprimir el sistema, se realiza mediante dos valores; el primero indica si se desean todos los mensajes JCL que se generen en el sistema (valor "1" es afirmativo), mientras que el segundo indica que también se desean los mensajes relacionados con la información de los ficheros que vaya a usar el procedimiento (valor "1" es afirmativo). Si no se necesita la información relacionada con los ficheros, se pondrán los valores "(1, 0)".
    •   NOTIFY: Indica el nombre del usuario al que el sistema enviará un mensaje cuando termine el trabajo.
    •   TIME: Muestra el tiempo máximo de CPU que puede emplear el trabajo.
    •   REGION: Señala la cantidad de memoria que va a utilizar el procedimiento 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: Muestra desde qué paso se quiere rearrancar un trabajo (en caso de fallo del mismo) saltándose los pasos anteriores. Si no se especifica lanzaría todo el procedimiento desde el principio y hay ocasiones en las que no es necesario.
    •   TYPRUN: Indica el tipo de ejecución del trabajo (SCAN, validación sintáctica…).
    Ejemplo de sentencia JOB.

    Sentencia EXEC
      Se utiliza para ejecutar un programa dentro de un trabajo.
      Su sintaxis es la siguiente:
      <NOMBRE DE PROCEDIMIENTO> <EXEC> <PARÁMETRO 1>,<PARÁMETRO 2>,...

      Los parámetros básicos de este paso son:
    •   PGM: Muestra el nombre del programa a ejecutar.
    •   REGION: Especifica la cantidad de memoria que puede utilizar el paso.
    •   TIME: Indica el tiempo máximo que puede emplear el paso (minutos, segundos).
    •   COND: Específica bajo qué condiciones no se ejecutará el paso.
    •   ACCT: Especifica la información contable relativa al paso, exigida por la instalación.
    •   DYNAMNBR: Máximo número de ficheros que pueden asignarse en un momento determinado, para su reutilización en el siguiente paso.
    •   PARM: Se utiliza para pasar algún tipo de información al programa que está en proceso (máximo 100 caracteres).
    •   RD: Controla las posibilidades de rearranque del paso en el que está codificado.
    •   ADDRSPC: Indica el tipo de memoria (virtual o real) en que se ejecutará el paso.
    Ejemplo de sentencia EXEC.
      
    Sentencia DD
      Describe los ficheros con los que se va a trabajar (un paso de este tipo por cada fichero). Además, identifica cada fichero lógico definido en la SELECT del programa con su fichero físico.
      Tiene la siguiente sintaxis:
    <NOMBRE DE FICHERO> <DD> <PARÁMETRO 1>, '<NOMBRE DEL PROGRAMADOR>',<PARÁMETRO 2>,...

      Sus parámetros generales son:
  •   DSN: Nombre físico del fichero.
  •   DISP: Indica el estado en el que se encuentra el fichero cuando empieza el trabajo, y cómo quedará después de la ejecución. Su sintaxis es la siguiente: DISP=(VALOR1,VALOR2,VALOR3); el primer valor indica el estado del fichero al iniciarse el paso (NEW, no existe y se crea en el paso, mas, si el fichero no existe, equivale a este valor, y si no se codifica, se asume este valor por defecto; OLD, existe y se debe utilizar de forma exclusiva; SHR, existe y se puede compartir; MOD, si el fichero ya existe, no se puede compartir, y se posiciona tras el último registro existente en el fichero), el segundo valor corresponde al estado del fichero cuando termina bien el paso, el tercer valor es el estado del fichero cuando el paso finaliza de manera anormal [se notifica mediante el término "ABEND". DELETE, el fichero se borra, incluso del catálogo; KEEP, el fichero se guarda al terminar el paso, pero no guarda información de fichero (UNIT, VOL…) para pasos posteriores, se debe volver a codificarlas al usar el fichero; CATLG, el fichero se guarda y se cataloga. UNCATLG, el fichero se guarda, pero se elimina del catálogo. PASS, el fichero se guarda al terminar el paso, pero se borra al terminar el trabajo, aunque guarda información del fichero para pasos posteriores, y sólo es válido para el VALOR2, ya que en caso de "ABEND", se pierden todos los ficheros temporales; si no se codifica, se asume KEEP; si ya existe (OLD), y DELETE, si no existe (NEW)].
  •   VOL: Volumen en el que residirá el nuevo fichero.
  •   UNIT: Se utiliza para indicar al sistema que sitúe el fichero en un dispositivo específico (disco, cinta).
  •   LABEL: Especifica el tipo de etiqueta asociada con el fichero, el número relativo del fichero en la cinta y si el fichero tiene protección de entrada o de salida.
  •  SPACE: Permite solicitar espacio para un fichero nuevo en un volumen de acceso directo. Consta de los siguientes valores: Unidad en las que se mide el espacio [pista (TRK, pequeña superficie de un disco físico), cilindros (CYL, formado por 15 pistas); para ficheros pequeños se deberá utilizar la primera unidad, ya que si se abusa de la segunda la máquina puede echar para atrás en procedimiento por falta de espacio]; cantidad de espacio a asignar (extensión primaria, espacio que se reservará para el fichero en el momento de crearlo; extensión secundaria, cantidad de espacio que se añade cada vez que el fichero se quede pequeño); RLSE: indica que el espacio no utilizado en la creación del fichero, se liberará al cerrarlo.
  •   SYSOUT: Indica que el fichero lógico debe direccionarse a una clase de salida, en lugar de a un disco o a una cinta.
  •   COPIES: Número de copias que se desea obtener de un listado.
  •   DEST: Impresora física por la que se listará el informe a imprimir.
  •   OUTLIM: Número máximo de líneas que se van a imprimir.
  •   RECFM: Formato y bloqueo del registro.
  •   LRECL: Longitud del registro.
  •   BLKSIZE: Longitud del bloque.
  •   JOBLIB: Librería donde se encuentran los programas que se quieren ejecutar.
  •   STEPLIB: Librería donde se encuentra el programa del paso que se quiere ejecutar.
  •   SYSABEND: Realiza el volcado de memoria de usuario y de sistema en caso de finalización anómala del proceso.
  •   SYSUDUMP: Realiza el volcado de memoria de usuario en caso de finalización anómala del proceso.
  •   SYSCHK: Opción para que el sistema escriba un fichero de puntos de control ("checkpoints", en inglés) para posibles rearranques en la ejecución de un programa.

  • Ejemplo de sentencia DD.

    EL EDITOR LPEX

      Este programa, de z Systems, es el editor predeterminado para los archivos JCL. Proporciona mejoras específicas de lenguaje como, por ejemplo, el resaltado de errores de sintaxis y acciones de fuente.
      Los siguientes caracteres pueden constituir una palabra en un archivo JCL: letras, números, subrayado (_), guión (-), punto (.) y et (&).
      Algunos de sus comandos más relevantes, que se escriben en la columna izquierda, donde se encuentra la numeración de líneas, son:
    • I: Añade una línea.
    • D<nº de líneas>: Borra el número de líneas designado desde la línea marcada.
    • D999: Borra todo el documento.
    • D: Borra la línea marcada.
    • DD…DD: Borra las líneas del documento comprendidas entre ambos comandos (se escribe el primero en una línea, y el segundo tantas líneas más abajo como se quieran borrar).

      Aguardo que la presente entrada haya sido del gusto del lector. Si es así, espero que este la comente y/o la comparta, por favor.

    No hay comentarios:

    Publicar un comentario

    Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.