Desarrollando en Cobol y Natural sobre Plataforma Mainframe

jueves, 25 de septiembre de 2014

Acceso a Archivos UNIX desde ZOS mediante ISPF

Aunque no sea muy conocida por la mayoría de los programadores Cobol, desde el sistema operativo ZOS existe la posibilidad de entrar al entorno UNIX mediante la herramienta ISPF. De hecho, este "UNIX ZOS" acepta los mismos comandos que el estándar, así que los expertos en dicho entorno no tendrán problemas para adaptarse.

La herramienta ISPF nos permite acceder al entorno UNIX desde el entorno tradicional ZOS mediante el empleo de los servicios USS (Unix System Services). Gracias a ello, podemos teclear comandos desde el entorno ZOS del mismo modo que si nos encontrásemos en un entorno UNIX puro.



En realidad, se trata de dos utilidades diferenciadas. Una de ellas, denominada TSO OMVS, sirve para ejecutar los comandos UNIX estándar y la otra, denominada ZOS UDL, nos permite visualizar el contenido de los archivos y directorios UNIX que tenemos asignados. Hoy vamos a revisar esta última.

Para acceder a esta utilidad, partiendo desde el menú POM (Primary Option Menu) del ISPF, tendremos que seguir los siguientes pasos.

1º) Opción Utilities: Seleccionamos la opción 3 - Utilities - Perform utility functions.

3  Utilities     Perform utility functions 

2º) Opción Udlist: Seleccionamos la opción 17 - Udlist - Print or display (to process) z/OS UNIX directory list.

17 Udlist      Print or display (to process) z/OS UNIX directory list

3º) Accedemos al panel z/OS UNIX Directory List Utility, donde tendremos que introducir el pathname en el que tengamos almacenados nuestros archivos Unix. En nuestro ejemplo, es el /u/JJST029 ("u" corresponde a Unix y "JJST029" es nuestro código de usuario).



4º) A continuación, accedemos a un panel en el que se muestran todos los archivos (filenames) que hay disponibles en nuestro directorio.

Pathname . : /u/JJST029                                            
                                                                   
Command  Filename        Message          Type Permission Audit  Ext
---------------------------------------------------------------------
         .                                Dir  rwxr-xr-x  fff---   
         ..                               Dir  r-xr-xr-x  ------   
         .sh_history                      File rw-------  fff--- --s-
         ds.lst                           File rw-------  fff--- --s-
         etc.lst                          File rw-------  fff--- --s-
         jjst                             File rwx-w----  fff--- --s-
         Welcome                          File rw-------  fff--- --s-
******************************* Bottom of data **********************


Aquí se podrá trabajar con los archivos y los directorios que tenemos almacenados en nuestro entorno UNIX. Podremos crear, borrar, editar o ver el contenido de cualquiera de los ficheros que se muestren en el listado anterior.

5º) Por ejemplo, podríamos proceder a visualizar el contenido de nuestro archivo denominado "jjst". Para ello, ponemos una B (browse) delante del mismo y pulsamos INTRO.

 BROWSE    /u/JJST029/jjst                            Line 0000
 Command ===>                                                 
********************************* Top of Data *****************
hola unix                                                     
******************************** Bottom of Data ***************


En este caso se muestra el texto "hola unix", que es el contenido que previamente habíamos dado de alta en el archivo jjst.

Como vemos, es muy sencillo ver nuestro archivos UNIX desde ZOS mediante esta opción del ISPF. Este panel nos puede ayudar a trabajar de una manera cómoda con los ficheros almacenados en UNIX, independientemente de si se han creado mediante la utilidad TSO OMVS mencionada al principio (que simula el entorno UNIX) o mediante un JCL que ha enviado nuestro dataset al directorio UNIX.

En un futuro publicaremos otro post en el que explicaremos cómo se puede generar un archivo desde un JCL y dejarlo, con el nombre que queramos, en nuestro directorio UNIX ZOS asignado para que podamos operar con él desde el panel "z/OS UNIX Directory List Utility" (utilidad UDL) que hemos visto hoy.

Pues nada, esperamos que lo comentado sirva para que, los que no conocíais esta opción, a partir de ahora sepáis que siempre podremos trabajar desde el entorno UNIX con los ficheros que deseemos, sin más que enviarlos al directorio asignado.

Saludos.

jueves, 18 de septiembre de 2014

Utilización de Ficheros In-Stream en JCL

En ocasiones, cuando deseamos probar un procedimiento o un programa que acabamos de codificar, no queremos perder el tiempo creando todos los ficheros secuenciales precisados por el mismo. En esos casos, por contra, nuestro objetivo es completar dicha prueba en el menor tiempo posible. Afortunadamente, para cubrir esta necesidad disponemos de los ficheros In-Stream.

Los ficheros In-Stream son aquellos cuyos registros se definen en el propio código del JCL, eliminando así la necesidad de crear un dataset secuencial para almacenarlos. La ejecución del JCL leerá esos registros in-stream de manera idéntica a como lo haría si estuviesen contenidos en un fichero secuencial estándar.



A continuación, mostramos un ejemplo de utilización de un fichero In-Stream en un paso JCL. En particular, aquí se está empleando en conjunción con la utilidad IEBGENER.

//PASO1    EXEC PGM=IEBGENER                          
//SYSPRINT DD SYSOUT=*                                
//SYSIN    DD DUMMY                                   
//SYSUT2   DD SYSOUT=*                                
//SYSUT1   DD DATA *    INICIO IN-STREAM              
1111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333
4444444444444444444444444444444444444444444444444444444
5555555555555555555555555555555555555555555555555555555

/* FIN IN-STREAM                                      
// 
                                                 

En este ejemplo, la idea es que el programa IEBGENER recoja los registros de un fichero de entrada (en la card SYSUT1) y los envíe a la salida (card SYSUT2). Debido a que en la salida estamos incluyendo la expresión SYSOUT=*, entonces lo que se hará es enviar los registros leidos al SPOOL.

Como se puede observar, en la DD de la card SYSUT1 no estamos incluyendo una declaración DSN seguida del nombre del fichero secuencial de entrada, como se haría en un proceso estándar. En su lugar, estamos provisionando la cláusula DATA *, que es la que marca el inicio del fichero In-Stream.

Bajo la declaración DATA * se deben introducir los registros de datos que formarán parte de nuestro fichero. En el ejemplo vemos que aparecen 5 registros de 55 posiciones cada uno. Su contenido se detalla del mismo modo que si estuviésemos escribiendo la información en un fichero secuencial.

//SYSUT1   DD DATA *    INICIO IN-STREAM              
1111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333
4444444444444444444444444444444444444444444444444444444
5555555555555555555555555555555555555555555555555555555

/* FIN IN-STREAM 

Cuando ejecutemos este paso JCL, la utilidad IEBGENER leerá los 5 registros del fichero In-Stream de manera exactamente igual a como lo haría si los estuviese recuperando de un dataset secuencial. La salida se mostrará en el SPOOL, tal y como habíamos indicado.

 COMMAND INPUT ===>                                           
IEF142I JJ00Z PASO1 - STEP WAS EXECUTED - COND CODE 0000   
IEF285I   JJ00.JJ00Z.JOB04550.D0000102.?         SYSOUT 
IEF285I   JJ00.JJ00Z.JOB04550.D0000103.?         SYSOUT 
IEF285I   JJ00.JJ00Z.JOB04550.D0000101.?         SYSIN  
IEF373I STEP/PASO1   /START 2014157.0931                      
IEF032I STEP/PASO1   /STOP  2014157.0931                      
        CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00 M
        VIRT:    60K  SYS:   308K  EXT:        0K  SYS:    1121
IEF375I  JOB/JJ00Z/START 2014157.0931                      
IEF033I  JOB/JJ00Z/STOP  2014157.0931                      
        CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00 M
DATA SET UTILITY - GENERATE                                   
IEB352I WARNING: ONE OR MORE OF THE OUTPUT DCB PARMS COPIED FRO
                                                              
PROCESSING ENDED AT EOD                                       
111111111111111111111111111111111111111111111111111111111111111
222222222222222222222222222222222222222222222222222222222222222
333333333333333333333333333333333333333333333333333333333333333
444444444444444444444444444444444444444444444444444444444444444
555555555555555555555555555555555555555555555555555555555555555

******************************** BOTTOM OF DATA ***************

Se puede observar como, al final de la impresión del SPOOL, aparece el contenido de los 5 registros que habíamos dado de alta en nuestro fichero In-Stream. La información mostrada no se puede diferenciar de la que se visualizaría si esos 5 registros hubiesen sido recuperados de un fichero secuencial de entrada.

Esta es una forma muy fácil de realizar pruebas rápidas sobre programas creados o modificados, ya que nos evita tener que dar de alta todos los ficheros secuenciales que se van a utilizar y, además, así no tenemos que estar cambiando los datos de los registros contenidos en ellos. En ocasiones nos ayudará a ahorrar bastante biempo.

En principio, el paso In-Stream es muy sencillo y, por tanto, no debería producir ningún error de ejecución, siempre y cuando lo especifiquemos de la forma que os hemos indicado más arriba. Obviamente, el contenido de los registros in-stream sí que puede (y debe) ser modificado.

Pues nada, esperamos que lo comentado os haya ayudado a descubrir una forma más rápida de probar los programas. Siempre viene bien saber que existe esta opción, aunque luego finalmente nos decidamos a usar la forma más tradicional.

Saludos.

jueves, 11 de septiembre de 2014

Lista de Utilidades ZOS básicas para JCL

A la hora de operar con ficheros secuenciales en un JCL, el sistema operativo ZOS nos proporciona una serie de herramientas, denominadas utilidades, que nos permiten realizar multitud de acciones con datasets: creación, eliminación, copia, ordenación e incluso impresión su contenido.

En el blog, a lo largo del tiempo, ya hemos ido hablando de cómo se puede implementar el código JCL para poder trabajar con las utilidades principales: IEFBR14, IEBCOPY, IEBGENER, IDCAMS y DFSORT. Cada una de ellas tiene unas características específicas que deben ser conocidas antes de ponernos a elaborar el paso correspondiente.



Hoy queríamos hacer un resumen de las utilidades revisadas, para que dispongamos de una guía que nos permita acceder con facilidad al detalle de cada uno de estos programas. La lista de utilidades básicas es la siguiente:

- Utilidad IEFBR14: Se trata de una utilidad que no realiza ninguna acción. Con su lanzamiento se entra a ejecutar el programa y, a continuación, se sale de él. Sirve para catalogar ficheros en vacío, borrarlos, etc... Podemos ver más información de la misma en el post Utilidad IEFBR14 para JCL.

- Utilidad IEBCOPY: Esta utilidad se emplea para realizar una copia de un miembro particionado (o de un miembro Library) o para unir dos miembros particionados. Podemos ver más información en el post Utilidad IEBCOPY para JCL.

- Utilidad IEBGENER: Esta utilidad sirve para realizar copias de ficheros secuenciales. Normalmente se emplea para realizar un backup de un fichero secuencial origen, aunque también se puede utilizar para producir un PDS o un PDSE a partir de un Secuencial. Podemos ver más información en el post Utilidad IEBGENER para JCL.



- Utilidad IDCAMS: Se emplea para realizar la operativa sobre los ficheros VSAM. Lo más importante es que nos permite realizar la creación de los mismos. Aunque también se emplea para realizar la eliminación, la carga de datos o incluso la impresión del contenido de los VSAM. Tenemos más información en el post Utilidad IDCAMS para JCL - 1 y en el post Utilidad IDCAMS para JCL - y 2.

- Utilidad DFSORT: Esta utilidad se emplea para realizar la ordenación de los registros del fichero secuencial indicado y almacenar el resultado ordenado en un nuevo fichero. Aparte de esto, la utilidad también puede ser empleada para realizar simples copias de ficheros o para unir el contenido de varios ficheros. Tenemos más información en el post Utilidad DFSORT para JCL - 1 y en el post Utilidad DFSORT para JCL - y 2.

Como vemos, estas utilidades nos permiten realizar todas las actividades básicas con ficheros secuenciales y con ficheros VSAM. Con ellas podemos realizar desde su creación y su eliminación hasta la copia, ordenación e incluso impresión del contenido de los datasets.



Por supuesto, existen muchas utilidades más en el mundo ZOS, pero realmente estas son las que, con diferencia, vamos a emplear más a menudo. Probablemente en un futuro vayamos viendo, poco a poco, algunas de las menos conocidas, pero con las mencionadas ya tenemos de sobra para trabajar con JCL.

Pues nada, con todo lo comentado ya no nos deberían quedar dudas acerca de las utilidades básicas de JCL. Pero si, a pesar de todo, os sigue quedando alguna, podéis preguntarnos con total libertad.

Saludos.

sábado, 6 de septiembre de 2014

Se acabaron las vacaciones

Bueno, ya estamos por aqui de nuevo, dispuestos a retomar la programación tras estas semanas de descanso. Por supuesto, nos lo iremos tomando con calma al principio, ya que hay que dejar que el cuerpo se vaya adaptando poco a poco a la nueva rutina.

Esperamos que vosotros también hayáis podido disfrutar de vuestras vacaciones veraniegas: siempre es importante recargar las pilas de vez en cuando. Y si no ha sido así, al menos deseamos que haya habido alguna buena razón que os lo haya compensado.



Pues nada, ya iremos publicando más cosas en el blog...

Saludos.

Related Posts Plugin for WordPress, Blogger...