Desarrollando en Cobol y Natural sobre Plataforma Mainframe
Mostrando entradas con la etiqueta VSAM. Mostrar todas las entradas
Mostrando entradas con la etiqueta VSAM. Mostrar todas las entradas

lunes, 18 de abril de 2016

Ver fichero VSAM mediante DITTO

La aplicación DITTO/ESA for OS/390 es una herramienta de IBM muy útil a la hora de tratar con registros de ficheros VSAM. En el blog ya hemos visto muchas otras formas de visualizar el contenido de un VSAM, pero nunca viene mal disponer de un acceso alternativo. Quizás nos sea útil en el futuro.

Ver fichero VSAM mediante DITTO


Como ya sabemos, el contenido de los ficheros VSAM no se consulta del mismo modo que el de los ficheros secuenciales estándar. En general, para acceder a sus registros tenemos que hacer uso de herramientas específicas para dicha tarea. A este respecto, hoy en particular vamos a revisar la aplicación "DITTO/ESA for OS/390" de IBM.

Es posible que muchos de vosotros no dispongáis de esta herramienta en vuestro trabajo. Si es así, comentadlo con vuestros responsables o con vuestro cliente. En muchas ocasiones no suelen poner pegas para incluir esta aplicación en la instalación e incluso, si tenéis suerte, puede que ya esté instalada y simplemente no tuviérais constancia de ello.


La herramienta DITTO/ESA dispone de muchas funcionalidades, pero hoy en el post vamos a centrarnos en la opción que nos permite visualizar el contenido de los ficheros VSAM. Si trabajáis a menudo con ficheros VSAM, entonces este conocimiento os será muy útil. Si no los usáis demasiado, bueno, entonces es que estáis empezando en esto del mundo Host: pronto os cansaréis de operar con ellos.

Opción DITTO para visualizar registros VSAM


A continuación, sin más demora, vamos ir viendo los pasos que hay que seguir para visualizar registros VSAM mediante DITTO. Intentaré hacerlo con el mayor detalle posible, para intentar evitar que os queden muchas dudas al respecto.

1º) Accedemos al menú principal de DITTO/ESA for OS/390. Esto se hace de forma diferente en cada instalación, así que tendréis que preguntar a vuestros responsables de soporte.


2º) Se selecciona la opción 1 - BROWSE DATA y pulsamos INTRO. De esta forma, accederemos a la ventana de visualización de datos.



3º) Se selecciona la opción 3 - VSAM DATA y pulsamos INTRO. Así se accederá al menú de visualización.






4º) Procedemos a introducir el nombre del fichero VSAM buscado en el campo DATA SET NAME. Pulsamos INTRO y pasaremos a la ventana en la que se nos muestra el contenido del fichero.



Por ejemplo, en la imagen anterior vemos que se ha introducido el fichero VSAM con nombre 'JJLDB2.DSNDBD.JJATL23.JJFRLOTE.I0001.A001'.

5º) Si ponemos M y pulsamos PF5, nos desplazaremos a la derecha hasta el final del fichero VSAM. De esta forma, los últimos campos de los registros quedarán visibles para nosotros.




Siguiendo con el ejemplo anterior, en la imagen podemos ver los últimos campos del fichero VSAM con nombre 'JJLDB2.DSNDBD.JJATL23.JJFRLOTE.I0001.A001'.

Conclusiones acerca del Browse de DITTO


Siguiendo los pasos comentados anteriormente, no deberíamos tener problema para ver el contenido de los ficheros VSAM mediante DITTO. De todas formas, tal y como os he dicho más arriba, aquí lo más importante es que os digan cómo se puede acceder a la herramienta en vuestra instalación (o, si no disponéis de ella, que negociéis con vuestro cliente y que intentéis que os la proporcione).

En el post de hoy hemos visto cómo usar la opción BROWSE del DITTO para visualizar el contenido de los ficheros VSAM. Por supuesto, la aplicación permite realizar funcionalidades adicionales como, por ejemplo, edición de datasets VSAM. En futuros post os iré hablando sobre estas otras opciones.

En el blog ya hemos ido hablando en repetidas ocasiones sobre diferentes herramientas que nos permiten acceder a ficheros VSAM. Aunque normalmente nos bastará con disponer de una de ellas en nuestro trabajo, nunca viene mal conocer el mayor número posible de aplicaciones de tratamiento VSAM. La razón de esta necesidad es que va a resultar complicado que nos encontremos con la misma herramienta en dos clientes diferentes.



Conforme vayamos teniendo más experiencia en Cobol, nos daremos cuenta de que la aplicación DITTO de IBM es bastante utilizada en el mundo Host. Así que, cuanto antes os pongáis con la tarea de aprender su funcionalidad, pues más fácil os resultará posteriormente empezar a trabajar con ella. Siempre hay que coger el toro por los cuernos...

Pues nada, eso es lo que quería comentaros hoy con respecto a esta herramienta. Espero que todo haya quedado claro pero, si no es así, dejadme vuestras preguntas en el apartado de comentarios. Intentaré contestaros lo antes posible.

Saludos.

lunes, 11 de abril de 2016

READ FILE: Leer fichero VSAM desde Cobol

Uno de los problemas relevantes con los que nos vamos a encontrar a menudo es la necesidad de acceder a un fichero VSAM para leer su contenido desde un programa Cobol. Este acceso no es tan sencillo como la lectura de una tabla DB2 y, por tanto, para su implementación tendremos que utilizar instrucciones CICS. Pero bueno, no hay que dejarse amedrentar por ello y en este post trataremos de explicar en detalle cómo realizar dicha operativa.

Leer fichero VSAM desde programa Cobol


En muchas ocasiones nos vamos a encontrar con que, desde un programa Cobol, tenemos que proceder a leer información que no está almacenada en ninguna tabla DB2 y que, en cambio, está contenida en un fichero VSAM. Para poder realizar esta función tendremos que recurrir a la instrucción CICS denominada READ FILE (o, en su codificación antigua, READ DATASET). Se trata de uno de los comandos básicos de acceso a ficheros.



Para ver cómo se debería implementar esta actuación vamos a revisar un ejemplo con el que me encontré hace algún tiempo. En él se trataba de leer los registros contenidos en un fichero VSAM denominado JJRPRTAK para luego tratarlos posteriormente en el programa Cobol.

05 COM2EZ-CLAVE.                                  
   10 COM2EZ-EIBTASK                      PIC 9(7).
   10 COM2EZ-JJEQ-IN-TIPELE               PIC X.  
   10 COM2EZ-JJEQ-NU-EXTERN               PIC 9(9).

05 W-RESP                    PIC S9(8) COMP  VALUE ZEROES.

...

EXEC CICS                  
   READ FILE('JJRPRTAK')
        INTO(COM2EZ) 

        LENGTH(COM2EZ-LONGITUD)      
        RIDFLD(COM2EZ-CLAVE)             
        RESP(W-RESP)       
END-EXEC. 


IF W-RESP NOT  = 0                                 
   MOVE W-CD-1             TO COM2JN-W-NMENSA      
   MOVE W-CD-MENSAJE-E0301 TO COM2JN-W-MENSA(W-CD-1)
   PERFORM 9999-ERROR THRU 9999-ERROR-FIN          
END-IF.
                                            

Como vemos, en el código anterior tenemos dos partes diferenciadas. En la primera parte aparece, entre los marcadores EXEC CICS y END-EXEC, el comando READ FILE y las cláusulas de las que se compone. Y en la segunda parte se muestra simplemente una de las formas (habría otras alternativas) en la que se podría implementar el control de errores asociado a la instrucción READ FILE.



Cláusulas de la instrucción CICS READ FILE


A la hora de implementar un READ FILE, lo  más importante es que tengamos claro a qué concepto corresponde cada una de las cláusulas del comando CICS. A continuación, vamos a ir examinando las sentencias de las que se compone la instrucción READ DATASET del ejemplo anterior.

1º) Instrucción READ: Este comando se emplea para indicarle al CICS que vamos a proceder con la lectura de un fichero VSAM.

2º) Cláusula FILE (o DATASET): En esta cláusula tenemos que indicar el nombre del fichero que queremos leer con la instrucción READ.

3º) Cláusula INTO: Aquí indicaremos el nombre de la variable del área de datos en la que queremos que se almacenen los campos del registro recuperado del fichero VSAM.

4º) Cláusula LENGTH: Aquí tendremos que especificar la longitud del área de datos en la que se va a capturar el registro del fichero VSAM.


5º) Cláusula RIDFLD: En esta importante cláusula tendremos que indicar el nombre de la variable de la clave por la que se tiene que buscar el registro en el fichero VSAM. Esto es, el READ del CICS buscará el registro cuya clave coincida con la que hemos especificado en RIDFLD y, una vez encontrado, nos lo devolverá para que almacenemos sus campos en la variable que habíamos indicado en INTO.

6º) Cláusula RESP: Aquí indicaremos el nombre de la variable en la que queremos capturar el código de retorno de la ejecución del comando CICS READ FILE.

7º) Control de errores: Finalmente, en la última intrucción IF validaremos si el retorno ha sido igual a cero (ejecución correcta) o distinto de cero (ejecución errónea). En este último caso procederemos a ejecutar el control de errores que consideremos necesario.

Una vez rellenadas las cláusulas anteriores, nuestra declaración EXEC CICS debería ejecutarse sin problema alguno. Como resultado de la misma se accedería al fichero indicado en FILE mediante la clave especidficada en la cláusula RIDFLD. Y posteriormente se cargaría el contenido de un registro del fichero VSAM en la variable especificada en la cláusula INTO, siempre y cuando se obtenga un código de retorno nulo en RESP.



Conclusiones acerca de la instrucción READ FILE


La instrucción READ FILE nos será muy útil en los casos en los que tengamos necesidad de acceder a los ficheros VSAM de una aplicación. Recordemos que los accesos a las tablas DB2 deben hacerse de otra forma diferente, tal y como ya vimos en el blog hace algún tiempo. Pero en el mundo host tan importantes son los VSAM como el DB2.

Hay que tener en cuenta que, al tratarse de un comando CICS, la instrucción READ FILE también podría ejecutarse directamente desde el entorno CICS. Esto se haría mediante el empleo de la transacción CECI. Tal y como ya sabemos, CECI nos permite, entre otras cosas, acceder tanto a ficheros VSAM como a colas TS y colas TD.

Si provisionamos las cláusulas tal y como hemos especificado más arriba, no deberíamos tener ningún problema a la hora de ejecutar nuestro programa Cobol. Pero, eso sí, si nunca habéis usado EXEC CICS READ FILE, entonces tendréis que tener un poco de paciencia, ya que a nadie le suelen funcionar los comandos CICS la primera vez que los usa.



En un futuro seguiremos viendo instrucciones CICS adicionales para operar con los ficheros VSAM desde programas Cobol. Aparte de leer, siempre son necesarias las operaciones de actualización, de inserción y de borrado. Pero, como digo, eso lo dejaremos para más adelante.

Así que eso es todo por hoy. Espero que os haya quedado claro cómo debemos emplear el comando CICS READ FILE. Si seguís teniendo alguna duda, la podéis dejar en el apartado de comentarios.

Saludos.

jueves, 20 de noviembre de 2014

Modificar contenido de un fichero VSAM desde ISPF

Hace unas semanas comenzamos a explicar cómo se podía acceder al contenido de un fichero VSAM desde el ISPF, teniendo en cuenta que la opción 3.4 no permite trabajar con ellos. Hoy detallaremos cómo se pueden modificar los registros VSAM desde esa misma herramienta.

En un post anterior estuvimos viendo cómo se podía examinar el contenido de un fichero VSAM mediante el FILE MANAGER (revisar post Ver contenido de un fichero VSAM desde ISPF). Del mismo modo que hay una forma para visualizar los registros VSAM, también existe un método para modificarlos. Los pasos a seguir serían los siguientes.

Edición del contenido de un fichero VSAM

1º) Seleccionamos la opción 13 - File Manager - File Manager for Z/OS. De este modo, accedemos a las distintas opciones del File Manager ZOS.

13 File Manager  File Manager for Z/OS

2º) A continuación, desde el menú principal del File Manager, seleccionamos la opción 2 - Edit - Edit data. Esto nos permitirá acceder a la ventana de visualización.

2  Edit          Edit data 

3º) En la pantalla de edición tendremos que indicar el nombre del fichero VSAM que deseamos ver, el PDS en el que se encuentran las copys y el nombre de la copy asociada a nuestro fichero (en ella se detallarán los campos de los que se componen los registros del dataset). Como Processing Option elegiremos la número 1 - Above.



4º) Tras pulsar INTRO accedemos a la ventana en la que se nos mostrarán los registros contenidos en el fichero VSAM. Para cada uno de estos registros, se muestra una línea con la información contenida en todos los campos del dataset.



A diferencia del caso de visualización, ahora estamos en modo edición (Edit). Por tanto, podríamos modificar el campo que deseemos de cualquier registro, o incluso añadir un registro adicional con información nueva.

5º) Por ejemplo, vamos a proceder a insertar un registro nuevo. Para ello, nos posicionamos en el registro 000013, insertamos una I al comienzo del mismo y pulsamos INTRO.

000002  1       AT. MADRID           90      77      26
000003  2       BARCELONA            87      100     33
000004  3       REAL MADRID          87      104     38
000005  4       ATH. BILBAO          70      66      39
000006  5       SEVILLA              63      69      52
000007  6       VILLARREAL           59      60      44
000008  7       REAL SOCIEDAD        59      62      55
000009  8       VALENCIA             49      51      53
000010  9       CELTA                49      49      54
000011 10       LEVANTE              48      35      43
000012 11       MALAGA               45      39      46
000013 12       RAYO                 43      46      80
000014                                                 
****** ****  End of data  ****                                                           

De este modo, se añadirá una nueva línea en el editor, la 000014, en la que podremos ir incluyendo el contenido deseado del nuevo registro.

6º) A continuación, rellenamos todos los campos del registro con los datos correspondientes. La nueva información que vayamos añadiendo se mostrará con un color diferente al del resto, indicándonos que se trata de campos aún no consolidados en el fichero VSAM.



7º) Introducimos SAVE en la línea de comandos y pulsamos INTRO. De esta forma, el nuevo registro que habíamos introducido en el editor quedará verdaderamente dado de alta en el fichero VSAM. Por contra, si hubiésemos introducido el comando CANCEL, entonces la información modificada en el editor no se consolidaría y nunca llegaría a actualizarse en el VSAM.

Command ===> SAVE

8º) Finalmente, podremos ir a la opción de visualización del File Manager y comprobar si el registro creado realmente aparece en la consulta.



Como podemos ver en la imagen, el nuevo registro añadido aparece correctamente en la visualización (000014 13       GETAFE               42      35      54      38). Por tanto, así queda confirmado que la inserción de registro VSAM se completó sin problemas.

Como se puede observar en todo lo anteriormente comentado, la modificación de registros de ficheros VSAM es un proceso bastante sencillo. Hay que tener en cuenta que los VSAM no se pueden visualizar mediante la opción 3.4 del ISPF y, por tanto, la elección del FILE MANAGER para este tipo de trabajos es la elección más sensata.

Y eso es todo por lo que respecta al File Manager. Esperamos que todos los puntos hayan quedado aclarados y si os queda alguna duda, como siempre, enviádnosla y trataremos de resolverla lo antes posible.

Saludos.

jueves, 13 de noviembre de 2014

Ver contenido de un fichero VSAM desde ISPF

Los ficheros VSAM no pueden ser visualizados con un Browse del mismo modo que hacemos con un fichero secuencial o con un PDS. Afortunadamente, en el ISPF disponemos de una opción que nos permitirá acceder fácilmente al interior de los mismos, ya sea simplemente para visualizar su contenido o para modificar alguno de sus registros.

En el menú principal POM del ISPF (Primary Option Menu) hay disponible una opción, denominada FILE MANAGER, que nos permite realizar distintas acciones sobre los ficheros VSAM. Entre estas operaciones, disponemos de la visualización y la edición del contenido de los registros del dataset.



Para ver cómo se puede realizar la visualizacion y la edición del VSAM, vamos a suponer que nos encontramos en el menú POM del ISPF.

Visualización del contenido de un fichero VSAM

1º) Seleccionamos la opción 13 - File Manager - File Manager for Z/OS. De este modo, accedemos a las distintas opciones del File Manager ZOS.

13 File Manager  File Manager for Z/OS

2º) A continuación, desde el menú principal del File Manager, seleccionamos la opción 1 - View - View data. Esto nos permitirá acceder a la ventana de visualización.

1  View          View data

3º) En la pantalla de visualización tendremos que indicar el nombre del fichero VSAM que deseamos ver, el PDS en el que se encuentran las copys y el nombre de la copy asociada a nuestro fichero (en ella se detallarán los campos de los que se componen los registros del dataset). Como Processing Option elegiremos la número 1 - Above.



4º) Finalmente, accedemos a la ventana en la que se nos mostrarán los registros contenidos en el fichero VSAM. Recordemos que estamos en modo visualización y, por tanto, no se puede modificar nada de la información mostrada.



Tal y como podemos ver en la imagen, esta opción nos muestra los datos almacenados en todos los campos de cada uno de los registros que hay dados de alta en el VSAM.

Esta es una forma muy sencilla de visualizar el contenido de los ficheros VSAM. Teniendo en cuenta que este tipo de ficheros no se puede abrir mediante la opción 3.4 del ISPF (como hacemos normalmente con un dataset secuencial), el FILE MANAGER nos ofrece una cómoda alternativa para solucionar esta deficiencia.

Pues nada, esperamos que con esto os haya quedado clara la forma en la que podemos acceder al detalle de los ficheros VSAM desde el propio ISPF.

Saludos.

jueves, 14 de agosto de 2014

Creación de fichero VSAM mediante JCL (y 2)

Hace unas semanas comenzamos a ver cuáles eran los pasos que debíamos seguir para la construcción de un JCL cuya función fuese la generación de un fichero VSAM mediante la utilidad IDCAMS (ver post Creación de fichero VSAM mediante JCL - 1). Hoy trataremos de completar la descripción del proceso.

Recordemos que en esa primera parte habíamos hablado de los pasos de borrado y de carga de datos, así como de la declaración de las cards SYSPRINT y SYSIN del paso de creación del fichero VSAM. A continuación, terminaremos de ver las declaraciones necesarias para el mencionado paso de creación.



3º) Declaración DEFINE: El comando DEFINE sirve para indicar a la utilidad IDCAMS que tiene que proceder a la creación de un fichero VSAM.  Esta cláusula se divide en 3 partes:

a) Cláusula CLUSTER: Aquí es donde se deberá indicar el nombre del fichero VSAM y las características asociadas a dicho fichero. En el ejemplo, este fichero se denominará JJ00.FACTURAS.PEND.

  DEFINE CLUSTER ( NAME (JJ00.FACTURAS.PEND) -

Al dar de alta el fichero, tendremos que especificar una serie de datos precisados para la creación del mismo.

- TRACKS: Espacio de almacenamiento requerido por el VSAM.

- RECORDSIZE: Tamaño del registro almacenado en el fichero.

- FREESPACE: Para los ficheros indexados, esto especifica el porcentaje de espacio que deseamos establecer como espacio reservado (para futuras expansiones) cuando el CLUSTER sea inicialmente cargado o cuando se realice una inserción masiva sobre el mismo.

- VOLUMES: Unidad en la que se almacenará el fichero.

- SHAREOPTIONS: Sirve para indicar la forma en que el CLUSTER puede ser compartido, de manera que varios jobs puedan acceder al VSAM al mismo tiempo. Se debe indicar la Región (CICS) y el Sistema (MVS).

- KEYS: En los ficheros indexados deberá indicarse cuál es el campo clave del registro. Posteriormente, podremos localizar un registro específico simplemente con indicar el valor del campo clave, ya que no podrá estar repetido en dos registros diferentes.

- UNIQUE: Esto se indica cuando deseamos que nuestro CLUSTER no forme parte de un espacio de datos (dataspace) que contenga otros CLUSTER. De este modo, en la unidad se crea un nuevo espacio de datos que queda reservado enteramente para nuestro CLUSTER (por tanto, debe existir espacio libre en las unidades especificadas para realizar esta acción).

- IMBED: Sirve para indicar que los registros de secuencia de conjunto deben ser insertados en el componente de datos del CLUSTER.

- INDEXED: Aquí tendremos que indicar qué tipo de fichero VSAM queremos dar de alta: NONINDEXED para ficheros secuenciales (ESDS), INDEXED para ficheros indexados (KSDS), NUMBERED para ficheros relativos (RRDS) o LINEAR para ficheros lineales (LDS).

                   TRACKS (02 00) -
                   RECORDSIZE (80 80) -
                   FREESPACE (00 00) -
                   VOLUMES (E3WK01) -
                   SHAREOPTIONS (2 3) -
                   KEYS (6 1) -
                   UNIQUE -
                   IMBED ) -


b) Cláusula DATA: Al tratarse de un fichero VSAM indexado (es decir, de tipo KSDS), aquí podremos indicar el nombre del fichero de datos asociado. En el ejemplo, este fichero se denominará JJ00.FACTURAS.PEND.DATA. Recordemos que los KSDS emplean dos subficheros para el tratamiento de la información: uno para el almacenamiento de los índices y otro para el almacenamiento de los datos asociados a cada índice.

            DATA ( NAME (JJ00.FACTURAS.PEND.DATA) ) -

c) Cláusula INDEX: Del mismo modo, al tratarse de un fichero VSAM indexado, aquí podremos indicar el nombre del fichero de índices asociado. En el ejemplo, este fichero se denominará JJ00.FACTURAS.PEND.INDEX.

           INDEX ( NAME (JJ00.FACTURAS.PEND.INDEX) )

Una vez especificados todos los parámetros anteriores, ya estaremos preparados para lanzar el JCL con el paso de creación del fichero VSAM (indexado, en este caso). Aunque hay gran cantidad de parámetros, si los indicamos tal y como aparecen más arriba, en principio no deberíamos tener problemas en el momento de la ejecución.

En nuestro ejemplo, tras ejecutar el job pudimos comprobar que se había generado el fichero VSAM correspondiente (JJ00.FACTURAS.PEND) y sus dos subficheros asociados (JJ00.FACTURAS.PEND.DATA y JJ00.FACTURAS.PEND.INDEX).

- Enter "/" to select action             Message      Volume
------------------------------------------------------------- 

 JJ00.FACTURAS.PEND                                   *VSAM*
 JJ00.FACTURAS.PEND.DATA                              ZARES1
 JJ00.FACTURAS.PEND.INDEX                             ZARES1
**************** End of Data Set list ***********************


Como se puede apreciar, el Data Set JJ00.FACTURAS.PEND aparece con la etiqueta *VSAM* en la columna "Volume", lo que lo identifica claramente como un fichero VSAM. Junto a él, podemos observar la presencia de los ficheros DATA e INDEX.



Finalmente, comentar que, aunque el ejemplo lo hemos realizado para un fichero KSDS, el código podría ser fácilmente adaptado para ficheros VSAM secuenciales (ESDS) o ficheros VSAM relativos (RRDS), ya que el procedimiento de generación es bastante similar.

Y eso es todo. Esperemos que lo comentado sirva para arrojar un poco más de luz sobre los ficheros VSAM y que os permita realizar la generación de los mismos sin problema alguno.

Saludos.

jueves, 7 de agosto de 2014

Creación de fichero VSAM mediante JCL (1)

Hace algún tiempo estuvimos viendo la forma de generar un fichero VSAM mediante la opción "VSAM Utilities" del ISPF (ver post Creación de fichero VSAM mediante ISPF). Hoy veremos cómo se puede realizar esta misma acción mediante el lanzamiento de un JCL previamente configurado.

En realidad, una vez tengamos claro cómo hay que parametrizarlo, lo más normal es que prefiramos la opción de generación del VSAM mediante JCL frente a la generación mediante ISPF. Obviamente, es mucho más rápido y cómodo lanzar un JCL que tener que ir detallando todos los datos que se solicitan en la opción "VSAM Utilities".



A continuación vamos a mostrar un ejemplo de cómo se debería implementar, en un JCL, el paso de creación de un fichero VSAM de tipo KSDS (indexado).

//****************************************************
//DELETE   EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  DELETE  (JJ00.FACTURAS.PEND)

//****************************************************
//DEFINE   EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  DEFINE CLUSTER ( NAME (JJ00.FACTURAS.PEND) -
                   TRACKS (02 00) -
                   RECORDSIZE (80 80) -
                   FREESPACE (00 00) -
                   VOLUMES (E3WK01) -
                   SHAREOPTIONS (2 3) -
                   KEYS (6 1) -
                   UNIQUE -
                   IMBED ) -
            DATA ( NAME (JJ00.FACTURAS.PEND.DATA) ) -
           INDEX ( NAME (JJ00.FACTURAS.PEND.INDEX) )
/*

//****************************************************
//REPRO    EXEC PGM=IDCAMS
//ORIGEN   DD   DSN=JJ00.FACTURAS.ORIGEN,DISP=SHR
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  REPRO INFILE (ORIGEN) OUTDATASET (JJ00.FACTURAS.PEND)
/*

//****************************************************

Como vemos, el código anterior se compone de 3 pasos y no sólo de uno. Esto es debido a que, junto al paso de creación del VSAM (DEFINE), hemos añadido un paso previo de borrado del registro existente (DELETE) y un paso posterior de carga de datos del fichero (REPRO).

El paso DELETE sirve para comprobar si ya existe un fichero con el nombre con el que pretendemos crear el VSAM. Y, en caso de que se encuentre alguno, procede a su borrado ya que, si no hiciésemos esto, el paso DEFINE de creación daría un error al verificarse que ya existe una entidad con el nombre propuesto.

Por otra parte, el paso REPRO nos sirve para, una vez creado el VSAM, cargarlo con información procedente de otro fichero origen (cuyo nombre también tendremos que especificar). En el ejemplo, estamos volcando la información del fichero JJ00.FACTURAS.ORIGEN al fichero VSAM denominado JJ00.FACTURAS.PEND.

Centrándonos ya en el propio paso de creación del VSAM (DEFINE), vemos que consiste en una invocación de la utilidad IDCAMS que lleva asociada una serie de parámetros. A continuación vemos en qué consiste cada uno de ellos.

1º) Declaración SYSPRINT: Aquí tenemos que indicar el lugar al que deseamos que se envíen todos los mensajes generados durante el proceso de ejecución. Si ponemos SYSOUT=* entonces dicha información se enviará directamente al SPOOL (a la MSGCLASS indicada en nuestro job).

//SYSPRINT DD   SYSOUT=*

2º) Declaración SYSIN: Son las sentencias de control de entrada para el programa. En este caso, la utilidad IDCAMS lleva asociada la sentencia DEFINE, que deberá ser especificada justo debajo de la declaración SYSIN.

//SYSIN    DD   *



El próximo día seguiremos viendo cuáles son las declaraciones que debemos realizar en nuestro JCL para conseguir que IDCAMS realice la creación del fichero VSAM buscado. La cláusula DEFINE CLUSTER es la más importante del paso y, por tanto, aquella en la que habrá que poner más cuidado a la hora de definir los parámetros requeridos.

Eso es todo por hoy. Os emplazamos a la segunda parte del post para continuar con la descripción del proceso a realizar para completar la puesta a punto nuestro JCL.

Saludos.

jueves, 26 de junio de 2014

Creación de fichero VSAM mediante ISPF

Cuando necesitemos crear un Fichero VSAM en nuestra aplicación (cosa que no debería ocurrir habitualmente), tendremos la posibilidad de recurrir a dos soluciones alternativas. Una de ellas consistirá en la generación del Data Set mediante la herramienta ISPF y la otra en la generación mediante un JCL adaptado a dicha función.

Si nos decidimos por la generación mediante la herramienta ISPF, el proceso a seguir será un poco más engorroso que el del lanzamiento del JCL. Aunque, probablemente, con el ISPF nos quedará un poco más claro para qué sirve cada uno de los parámetros que estamos especificando.



Los pasos a seguir para la creación de un Fichero VSAM mediante ISPF serán los siguientes, teniendo en cuenta que iniciamos el proceso desde el menú POM (ISPF Primary Option Menu).

1º) Opción 3 - Utilities. Desde el menú POM, tendremos que seleccionar la opción 3 - Utilities (Perform Utility Functions).

3  Utilities     Perform utility functions

2º) Opción 2 - Data Set. Seleccionamos opción 2 (Allocate, rename, delete, catalog, uncatalog, or display information of an entire data set).

2  Data Set    Allocate, rename, delete, catalog, uncatalog, 
               or display information of an entire data set

3º) Opción V - VSAM Utilities. Seleccionamos opción V - VSAM Utilities.

V VSAM Utilities 

4º) En el panel VSAM Utilities, tenemos que seleccionar la opción 1 - Define del apartado "Process Request" y la opción 3 - Cluster del apartado "Data Type".

Process Request                 Data Type            
1  1. Define                    3   1.  Alias        
   2. Delete                        2.  Alternate Index
   3. Information (Listcat)         3.  Cluster        


5º) Panel Define Cluster. Aquí tendremos que ir introduciendo la información correspondiente en cada uno de los parámetros requeridos. Tengamos en cuenta que no todos ellos son obligatorios.

Por ejemplo, nosotros vamos a especificar, para el fichero JJ00.FACTURAS.SALIDA1, los siguientes parámetros en el apartado "Cluster Level Information".

- Space Units: 1   1. Cylinders
- Space Units - Primary Quantity: 1
- Space Units - Secondary Quantity: 1
- Volumes: ZARES1
- Record Size - Average: 80
- Record Size - Maximun: 80
- Keys - Length: 10
- Keys - Offset: 0
- Indexed,NOnindexed,Linear or NUmbered: INDEXED

6º) Finalmente, nos aparece el Panel con los datos introducidos para el Fichero VSAM. Si estamos de acuerdo con ellos, entonces tendremos que introducir EXEC en la línea de comandos y el proceso de generación se lanzará.
                                       

/* IDCAMS COMMAND */                            
DEFINE CLUSTER (NAME(JJ00.FACTURAS.SALIDA1) -   
       CYLINDERS(1 1) -                         
       VOLUMES(ZARES1 -                         
              ) -                               
       KEYS(10 0) -                             
       RECORDSIZE(80 80) -                      
       INDEXED -                                
       ) -                                      
       DATA (NAME(JJ00.FACTURAS.SALIDA1.DATA) - 
       ) -                                      
       INDEX (NAME(JJ00.FACTURAS.SALIDA1.INDEX) -
       )   


Una vez confirmado, la generación del fichero VSAM debería hacerse sin problemas. En nuestro ejemplo, hemos generado el fichero JJ00.FACTURAS.SALIDA1. De hecho, si nos vamos a consultar la lista de Data Sets de nuestra aplicación (JJ00), vemos que aparecen las nuevas entidades creadas.

- Enter "/" to select action             Message      Volume
------------------------------------------------------------- 

 JJ00.FACTURAS.SALIDA1                                *VSAM*
 JJ00.FACTURAS.SALIDA1.DATA                           ZARES1
 JJ00.FACTURAS.SALIDA1.INDEX                          ZARES1
**************** End of Data Set list ***********************


Como se puede apreciar, el Data Set JJ00.FACTURAS.SALIDA1 aparece con la etiqueta *VSAM* en la columna "Volume", lo que lo identifica claramente como un fichero VSAM. Junto a él, podemos observar que también se han creado los ficheros DATA e INDEX.

Siguiendo todos los pasos anteriormente mencionados, no deberíamos tener ningún error en el proceso de generación de ficheros VSAM. Aunque en el ejemplo hemos dado de alta un fichero Indexado (KSDS), el procedimiento sería análogo para el resto de tipologías VSAM.

Pues nada, en un futuro explicaremos cómo se puede realizar esta misma creación mediante JCL y seguiremos comentado cosas adicionales sobre los VSAM.

Saludos.

jueves, 15 de mayo de 2014

Tipos de Ficheros VSAM

Los ficheros VSAM (Virtual Storage Access Method) fueron un tipo de fichero muy específico creado en 1970 para tratar de mejorar el rendimiento de los ficheros secuenciales, que era la entidad que se usaba hasta entonces para almacenar información de forma masiva.

La idea era que los archivos VSAM, debido a su estructura de almacenamiento y a su innovador método de acceso, permitiesen un tratamiento más rápido de la información y, de esa manera, el funcionamiento de las aplicaciones fuera más eficiente. Sin embargo, poco tiempo después, en 1975, aparecieron las Bases de Datos Relacionales y, desde ese momento, el empleo de los VSAM cayó en desuso.

A pesar de ello, hoy en día siguen quedando activas muchas aplicaciones que usan VSAM, con modelos de datos elaborados en los años 1970 y que han permanecido operativos durante todas estas décadas. De ahí que exista la posibilidad de que, en pleno siglo XXI, nos encontremos con la necesidad de realizar algún tipo de mantenimiento sobre este tipo de ficheros.



En la actualidad, existen 4 tipos de ficheros VSAM: KSDS, RRDS, ESDS y LDS. A continuación, detallamos un poco más en qué consiste cada uno de ellos.

1º) Entry Sequenced Data Set (ESDS): se trata del fichero VSAM equivalente al clásico Fichero Secuencial.

2º) Key Sequenced Data Set (KSDS): emplea dos subficheros para el tratamiento de los datos. Uno para el almacenamiento de índices y otro para la información (registros de datos) asociada a cada índice.

3º) Relative Record Data Set (RRDS): se trata del VSAM más eficiente. Se asigna un número relativo a cada registro, que es el que se usará para recuperar la información. Obviamente, si dicha asignación no se actualiza correctamente cada vez que borramos registros del fichero, entonces irán quedando espacios de memoria sin uso y el acceso será cada vez menos eficiente.

4º) Linear Data Set (LDS): este tipo de fichero se emplea para almacenar los TABLESPACE de las bases de datos DB2.



Tengamos en cuenta que, si vamos a crear una aplicación o un módulo nuevo, lo normal es que construyamos haciendo uso de una Base de Datos Relacional (por ejemplo, DB2) y de Ficheros Secuenciales. Hoy en día no se implementan desarrollos nuevos con ficheros VSAM, así que estos objetos únicamente los encontraremos cuando hagamos el mantenimiento de un sistema cuyo modelo de datos se elaboró en los años 70.

En principio, lo comentado debería bastar para hacernos una idea de la diferencia entre Ficheros Secuenciales, Ficheros VSAM y Bases de Datos Relacionales. De todas formas, en futuros post trataremos de ir profundizando sobre el tema.

Saludos.

Related Posts Plugin for WordPress, Blogger...