miércoles, 2 de marzo de 2011

JCL Básico II: La Cabecera

LENGUAJE DE CONTROL DE TRABAJOS

Campos de las sentencias de JCL
     Cada sentencia de control está compuesta por los siguientes campos:
  • IDENTIFICADOR - Indica al sistema de que 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:
    • Posicionales: su significado viene determinado por la position que ocupa en la sentencia. Su ausencia debe indicarse con una coma.
    • De Palabra Clave: su significado viene determinado por la palabra especial que lo identifica. Siempre van después de los posicionales.
  • 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 (//*).

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:
    • INFORMACIÓN DE CONTABILIDAD - especifica la information de contabilidad exigida por la instalación.
    • NOMBRE DEL PROGRAMADOR - identifica al grupo responsable del trabajo.
  • Parametros de Palabra Clave en la sentencia JOB:
    • 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
    • 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.
    • MSGLEVEL - indica el tipo de mensajes que ha de imprimir el sistema.
      Es un parámetro compuesto de dos subparámetros posicionales: 
      • 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
    • 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 jcl acabe se muestre un mensaje al usuario que ha submitido el jcl.
    • 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.
      - 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 numero par y como unidad K(1024 octetos) 
    • 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 pa´rametro COND. Ejemplos:
      • COND=(0,NE) --> Si el jcl no da un 0 en algún paso se cancela la ejecución.
      • COND=(4,NE) --> Si el jcl no da un 4 en algún paso se cancela la ejecución.
      • COND=(12,LE) --> Si el jcl 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 mas 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.
    • 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.
    • DYNAMNBR Este parámetro esta 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 que momento debe de reservar recursos para la asignación dinámica de ficheros.
      DYNAMNBR.PASO01=10
      El numero 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
    • 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)
    • RESTART - rearrancar un trabajo desde el paso especificado, saltando los pasos anteriores. Que queremos lanzar el jcl desde el PASO15 (por ejemplo) saltándose los 14 pasos anteriores, pues le indicamos: RESTART=PASO15
    • TYPRUN - indica el tipo de ejecucion 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
    • 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.

    • PERFORM Grupo de rendimiento al que se aplica al JOB PERFORM="numero con valores comprendidos entre 1 y 255"



    Ejemplo de una cabecera:
     //NAMEJCLX JOB (101, 'MI JCL'),MSGLEVEL=(2,1) , CLASS=A,
     //                              MSGCLASS=H,NOTIFY=&SYSUID
     //*

12 comentarios:

Anónimo dijo...

con el tema de las condiciones:
"Se puede poner en la cabecera, en un paso en concreto, o en ambos sitios. "

No aclaraste qué condicion toma el paso, si es q está en ambos sitios.

La condicion que va a tomar es lo que diga ese paso en particular. y si los demás pasos no llevan condiciones propias van a tomar lo que diga la condicion de la cabecera.

saldos!

Tallian dijo...

Gracias por la aportación!
: )

Anónimo dijo...

muy buena la aportación, saludos!!

Anónimo dijo...

¿Me podeis confirmar la respuesta a esta pregunta, por favor? Lo he copiado de otro sitio y pone que la respues es A.

5. Complete correctly:
When I want a jobstep to be executed only if the previous jobstep has a return code of strictly
less than 8, I should add...
O (a) COND=(8,LE)
O (b) COND=(8,GE)
O (c) COND=(8,LT)
O (d) COND=(8,GT)

Tallian dijo...

La A sería menor o igual a 8, menor que 8 sería la C.
Puedes ver las comparaciones en http://www.consultoriocobol.com/2010/12/sort-vol1-sort-include.html

Anónimo dijo...

gracias . Ya me parecia que estaba mal...

ronald julian leon cortes dijo...

hola muchachos como ejecuto un solo paso del jcl ejemplo un paso n , que haga un sorteo que pase de visam a secuencial..,, gracias

El Benjita dijo...

Estimado, soy novato en esto y recien he visto apenas un par de codigos JCL pero sin duda esto me ha ayudado bastante a comprender aspectos importantes de esta programación.

Muchas gracias por el tiempo dedicado, me pondré a leer los siguientes ahora.

luis enrique garcia domador dijo...

Agradecido por mantener esta pàgina al servicio de los ususarios del gran dinosaurio, saludos desde Venezuela

Tallian dijo...

Gracias a vosotros Luis Enrique. Saber que sirve de ayuda a los compañeros del mundillo es lo que anima a seguir :-)

Unknown dijo...

Muchas gracias!!!
Tallian por compartir tan valiosa informacion.
Comparto la option de que Cobol es un Enorme Dinosaurio.
Pero que hasta el dia de hoy sigue operando de una manera muy eficiente. y por mi experiencia en este medio segira por varios annos mas. Saludos a todos los cibernautas que programan en cobol. lo mas robusto y estable que conozco hasta hoy.

Unknown dijo...

Muy buen material! lo voy a recomendar a mis compañeros de estudio! saludos!