viernes, 15 de mayo de 2009

Cola de trabajos independiente

A veces hemos tenido la necesidad de aislar ciertos tipos de trabajo para que se ejecuten en orden secuencial; como la cola de trabajos QBATCH (asignada al subsistema QBATCH), puede, por omisión, ejecutar varios trabajos simultáneamente, no podemos utilizar esa cola para ejecutar trabajos secuencialmente.
Para crear una cola de trabajos independiente y asignarla al subsistema QBATCH, para que ejecute trabajos de uno en uno seguiremos los siguientes pasos:
  1. Crear una nueva cola de trabajos donde someteremos los trabajos que queramos ejecutar secuencialmente:
  2. CRTJOBQ JOBQ(QGPL/QBATCH1X1) TEXT('Job queue for run one by one')
  3. Asignar esa nueva cola de trabajos al subsistema QBATCH:
  4. ADDJOBQE SBSD(QBATCH) JOBQ(QGPL/QBATCH1X1) MAXACT(1) SEQNBR(15)
  5. El numero de secuencia (SEQNBR) sera el orden de cola que el subsistema utilizará para ejecutar los trabajos.
  6. Puede ser necesario ampliar el numero máximo de trabajos que se ejecutan en el subsistema QBATCH, y que por omisión es *NOMAX. Para comprobarlo DSPSBSD QBATCH opción 1 y ver el numero máximo de trabajos en el subsistema. Para cambiarlo usar CHGSBSD SBSD(QSYS/QBATCH) MAXJOBS(jobs que existan + 1)
  7. También podemos modificar las descripciones de trabajo, que creamos conveniente, para que se sometan siempre por esa cola de trabajos:
  8. CHGJOBD JOBD(mylib/myjobd) JOBQ(QGPL/QBATCH1X1)

lunes, 4 de mayo de 2009

Cola de mensajes QSYSMSG

El sistema operativo del AS400 tiene una función oculta y especial para enviar los mensajes que requieran alguna acción por parte del usuario (operador o administrador), a la cola de mensajes especial QSYSMSG. Esta cola de mensajes no existe al instalar el sistema operativo y debemos de crearla manualmente:


CRTMSGQ MSGQ(QSYS/QSYSMSG) TEXT('Special system messages queue') MSGQFULL(*WRAP)

Otorgamos la propiedad a QSECOFR: 
CHGOBJOWN OBJ(QSYS/QSYSMSG) OBJTYPE(*MSGQ) NEWOWN(QSECOFR)

Con esto los mensajes de cierta gravedad se escribirán en la cola de mensajes QSYSMSG, ademas de en la cola QSYSOPR. Esto puede facilitarnos la monitorización de mensajes del sistema.

Podéis encontrar información sobre esta funcionalidad en el IBM Information Center

domingo, 3 de mayo de 2009

Controlar trabajos batch

Para averiguar la duración de un trabajo batch, que no ha dejado rastro (joblog), podemos utilizar el histórico del sistema para ver cuando se arranco, cuando finalizo y con que código.
Para ello debemos utilizar el mandato DPSLOG, por ejemplo para ver la duración del trabajo MYJOB del usuario QUSER, del cual no sabemos el numero de trabajo, pero si que se debió ejecutar el día 30 de abril por la tarde:

DSPLOG PERIOD((120000 300409)) JOB(QUSER/MYJOB) MSGID(CPF1124 CPF1164)

Con esto obtendremos el siguiente resultado:El message id CPF1124 nos indica la hora de arranque del trabajo y el CPF1164 la hora de terminación y con que código; para ver el código hemos de situar el cursor sobre la línea del mensaje y pulsar F1, con ello podremos ver la siguiente pantalla:
Ahí podremos ver el código de terminación, en el ejemplo 0.
  • Si un trabajo tiene código de terminación 10, puede que haya terminado correctamente.
  • Si pulsamos Av.Pag. podremos ver la razón de todos los códigos de terminación.
  • Si pulsamos la tecla F6 imprimiremos este mensaje en nuestro el spool.
  • Si volvemos a ejecutar el mismo mandato DSPLOG, pero sin el parámetro MSGID, veremos todos los mensajes que el trabajo ha enviado al histórico del sistema.
  • Si pulsamos la tecla F9 sobre el mensaje podremos ver que programa ha grabado el mensaje (a veces toda ayuda es poca):
  • Tener en cuenta que el histórico del sistema se limpia automáticamente con las opciones de limpieza del sistema (GO CLEANUP), por omisión solo conserva los últimos 15 días.
Otra forma de controlar los trabajos es utilizar mi utilidad HSTJOBLOG.