Seguimos con la implementación de Tivoli Workload Scheduler 9.3. El último paso que hicimos fue compilar las exits necesarias para el funcionamiento de la herramienta.
Ahora empezaremos a realizar los cambios en la PARMLIB.
Añadiremos las exits EXIT7 y EXIT51 al fichero de parámetros de JES2. Para saber cuál es, buscaremos la tarea JES2 en la librería PROCLIB. En mi caso, es el miembro JES2PARM de la PARMLIB.
Lo editaremos y añadiremos lo siguiente teniendo mucho de cuidado con los comentarios. Si editamos mal este miembro, el JES2 no arrancará.
LOAD(OPCAXIT7) /* Load IBM Workload Scheduler for z/OS exit mod */
EXIT(7) ROUTINES=OPCAENT7,STATUS=ENABLED /* Define EXIT7 entry point */
LOAD(TWSXIT51) /* Load IBM Workload Scheduler for z/OS exit mod */
EXIT(51) ROUTINES=TWSENT51,STATUS=ENABLED /*Define EXIT51 entry point*/
IEFSSNxx
Añadiremos las siguientes líneas en el miembro IEFSSNxx de la PARMLIB para el Controller y Tracker:
SUBSYS SUBNAME(OPCC) INITRTN(EQQINITM) INITPARM (’0,M’)
SUBSYS SUBNAME(OPCT) INITRTN(EQQINITM) INITPARM (’100,M’)
OPCC y OPCT son los nombres de los subsistemas.
EQQINITM es el nombre del módulo que se encuentra en la librería **. SEQQLMD0 de TWS.
El número incluido en el parámetro INITPARM es la cantidad de memoria ECSA que será utilizado. Para el controller debe ser 0 y para el tracker con “100” es suficiente para unos 1100 jobs (según el manual de IBM).
PROGxx
Añadiremos la librería de módulos de TWS **. SEQQLMD0 a la concatenación de librerías APF autorizadas y de LINKLST.
Aprovechamos para incluir en el miembro PROGxx la inicialización de las exits creadas anteriormente. Deben ser añadidas antes de la inicialización de la LNKLST, es decir, antes de la línea que indica “LNKLST DEFINE NAME(LNKLST00)”.
EXIT ADD EXITNAME(SYS.IEFU83) MODNAME(TWSU83)
EXIT ADD EXITNAME(SYS.IEFACTRT) MODNAME(TWSACTRT)
EXIT ADD EXITNAME(SYS.IEFUJI) MODNAME(TWSUJI)
EXIT ADD EXITNAME(SYSSTC.IEFU83) MODNAME(TWSU83)
EXIT ADD EXITNAME(SYSSTC.IEFACTRT) MODNAME(TWSACTRT)
EXIT ADD EXITNAME(SYSSTC.IEFUJI) MODNAME(TWSUJI)
EXIT ADD EXITNAME(SYSJES2.IEFU83) MODNAME(TWSU83)
EXIT ADD EXITNAME(SYSJES2.IEFACTRT) MODNAME(TWSACTRT)
EXIT ADD EXITNAME(SYSJES2.IEFUJI) MODNAME(TWSUJI)
SMFPRMxx
En este miembro de la PARMLIB indicaremos los registros que se recogerán en SMF. El manual de IBM indica el siguiente ejemplo:
/*SYS and SUBSYS keywords*/
SYS(TYPE(6,14,15,18,26,30,60,62,64,90),EXITS(IEFU83,IEFACTRT,IEFUJI))
SUBSYS(STC,EXITS(IEFUJI,IEFACTRT,IEFU83))
SUBSYS(JESn,EXITS(IEFUJI,IEFACTRT,IEFU83))
Yo he adaptado los parámetros que ya tenía para que se incluyan los registros indicados en el ejemplo. Observad la imagen para ver el resultado.
IKJTSOxx
Debemos añadir el módulo EQQMINOM a la lista AUTHTSF tal y como se muestra en la imagen.
También tenemos que añadir los comandos BACKUP, BULKDISC, JSUACT, OPINFO, OPSTAT, SRSTAT, WSSTAT a la lista AUTHCMD tal y como se ve en la imagen.
SCHEDxx
Añadiremos la siguiente línea a este miembro:
PPT PGMNAME(EQQMAJOR) NOSWAP
CREAR DATASET DE TWS
En esta parte vamos a crear todos los dataset (parámetros, current plan, long term plan, logs) que usará TWS.
Vamos a la librería que creamos al principio que almacena todos los jobs de ejemplo. En mi caso, OPC.S0W1.SAMPJCL.
Empezamos con el job EQQPCS01. Este job crea varios dataset VSAM y NO-VSAM. Debemos revisar el job y ajustar el espacio de esos dataset para que no nos quedemos sin espacio. De forma opcional, si no usamos SMS, podemos añadir “VOL=SER=xxxxxx” para indicar el disco en los ficheros NO-VSAM.
Una vez ejecutado, terminará correctamente. En la imagen se pueden ver algunas librerías creadas.
Seguiremos con el job EQQPCS02. Este job también crea dataset. Debemos revisar el espacio para ajustarlo a lo que necesitemos. Lo ejecutamos y comprobamos que termine correctamente.
Seguiremos con el job EQQPCS03. Este job crea los ficheros necesarios para ejecutar un Trial Plan (una prueba de si el Current Plan extenderá correctamente, por ejemplo).
Antes de ejecutar el job, hay que cambiar %%%%%%%% por lo que queramos, por ejemplo, OPC.TRIAL. Finalmente, lo ejecutamos y comprobamos que termina correctamente.
Seguiremos con el job EQQPCS09. Este jobs crea los ficheros necesarios para backup del Current Plan. Lo ejecutamos y terminará correctamente.
El job EQQPCS12 creará el GDG base necesario para la función de cambio de MLOG que habilitamos al principio. Lo ejecutamos y terminará correctamente.
El job EQQPCS13 creará los GDG base para la función de backup/restore que habilitamos al principio. Lo ejecutamos y terminará correctamente.
STARTED TASK Y FICHEROS DE PARÁMETROS.
Volvemos a ir a la librería OPC.S0W1.SAMPJCL y copiamos los miembros EQQCONOP y EQQTRAP a la librería OPC.S0W1.PARM.
Ahora entramos en el miembro EQQCONOP y vamos a crear nuevos miembros con las partes correspondientes del JCL. Usaremos el comando de bloque cc – cc, para copiar las partes que queremos, y el comando CREATE.
Vamos a crear el miembro CONOP. Para ello marcamos con "CC" en la línea que se muestra en la imagen.
Ahora vamos a la línea que se muestra en la imagen y ponemos "CC" otra vez, para cerrar el bloque que queremos copiar, y en la barra de comandos ponemos "CREATE CONOP".
Hacemos lo mismo, pero ahora crearemos el miembro STDAR.
Por último, crearemos el miembro CONOB de la misma forma.
Si volvemos a entrar a la librería OPC.S0W1.PARM, aparecerán los nuevos miembros. Ahora haremos lo mismo con el miembro EQQTRAP.
Haremos lo mismo para crear los miembros STDEWTR y STDJCC.
Renombramos el miembro CONOB a BATCHOPT.
Renombramos el miembro CONOP a OPCCPARM.
Renombramos el miembro TRAP a OPCTPARM.
Entramos a editar el miembro OPCCPARM.
Ponemos NFCOPCC en el parámetro NCFAPPL, que será el nombre de nuestra LU del controller.
¡IMPORTANTE! Hay que poner RECOVERY NO, sino se producirá un abend al arrancar el controler más adelante.
Seguimos bajando y ponemos NCFOPCT en el parámetro SNA, para que se comunique con el tracker.
Guardamos y salimos. Ahora editamos el miembro OPCTPARM. Ponemos NCFOPCT en el parámetro NCFAPPL, que será el nombre de nuestra LU del tracker.
Bajamos y ponemos NCFOPCC en el parámetro SNAHOST, para que se comunique con el controller.
Ya hemos terminado con la segunda parte. Aquí os dejo el enlace a la tercera parte: TWS/OPC - Implementando Tivoli Workload Scheduler 9.3 - 3/3