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.