En este artículo vamos a describir algunos utilidades MVS básicas que pueden sernos útiles/necesarias al codificar un JCL.
IDCAMS:
El programa IDCAMS puede utilizarse para borrar ficheros, copiar ficheros y crear ficheros VSAM.
Veamos algunos pasos de ejemplo:
//******************************************************
//*
//**************************** BORRADO *****************
//BORRADO EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEL NOMBRE.DE.FICHERO
SET MAXCC = 0
Borra los ficheros que le indiquemos en la SYSIN.
Añadimos el "SET MAXCC = 0" para que en caso de que no exista el fichero no nos de error y continúe la ejecución del JCL.
Opciones de borrado:
* CLUSTER: indica que se tiene que borrar un fichero VSAM. Cuando se elimina el CLUSTER, se borran también los DATA e INDEX asociados al fichero.
* PURGE: permite borrar un fichero aunque no haya llegado su fecha de caducidad.
* ERASE: se machacan los datos del fichero con ceros binarios.
//******************************************************
//*
//********************** COPIA DE FICHEROS *************
//COPIA EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//ENTRADA DD DSN=FICHERO.DE.ENTRADA,DISP=SHR
//SALIDA DD DSN=FICHERO.DE.SALIDA,DISP=SHR
//SYSIN DD *
REPRO -
INFILE(ENTRADA) -
OUTFILE(SALIDA)
/*
Copia el fichero de entrada en el fichero de salida.
Opciones de copiado:
# SKIP: número de registros que deben saltarse desde el inicio del fichero antes de comenzar el proceso de copiado. También se pueden codificar:
# COUNT: número de registros que queremos copiar.
Comprobar si un fichero está vacío con PRINT + COUNT:
//**=======================================================*
//** PASO01 - COMPRUEBA SI EL FICHERO TIENE DATOS O ESTÁ VACIO
//**=======================================================*
//PASO01 EXEC PGM=IDCAMS
//IN DD DSN=nombre.fichero.prueba1,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PRINT INFILE(IN) COUNT(1)
IF MAXCC=12 THEN SET MAXCC=4
- Si existe y tiene datos --> Todo es correcto (MAXXCC=0)
- Si existe pero está vacío --> da un MAXXCC=4
- Si no existe --> El jcl abenda dando un FLUSH
Creación de VSAM:
//****************************************************
//*
//******************** DEFINICION DE VSAM ************
//PASOXXXX EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE NOMBRE.FICHERO -
CLUSTER
SET MAXCC = 0
DEFINE CLUSTER( -
NAME(NOMBRE.FICHERO) -
INDEXED -
VOL(BCT668) -
TRACKS(300 50) -
RECSZ(4800 4800) -
CISZ(12288) -
KEY(16 0) -
SHR(2 3) -
FSPC(15 15)
Crea el fichero VSAM NOMBRE.FICHERO.
Opciones:
* DELETE: Es la instrucción de borrado.
* CLUSTER: Indica que borre todos los ficheros que componen el VSAM
(índice y datos).
* DEFINE CLUSTER: Definición del fichero VSAM.
* NAME: Nombre físico del fichero.
* INDEXED: Indica que el fichero es indexado.
* VOL: El nombre del volumen/disco donde se quiere que resida. En
nuestra instalación no es necesario ponerlo, ya que la asignación es
automática.
* TRACKS, CYLS, RECORDS: Determina el espacio en pistas, cilindros
o registros. La primera magnitud indica el espacio de la extensión
primaria y la segunda el espacio para las extensiones secundarias.
* RECSZ: Longitud del registro. La primera magnitud indica la longitud.
* CISZ:: Control Interval Size, longitud Intervalo de control. El intervalo de
control es el equivalente al bloque en los ficheros VSAM.
* KEY: Indica la información necesaria para ubicar la clave. La primera
magnitud indica la longitud de la clave y la segunda el desplazamiento
de la misma respecto del principio del registro.
* SHR: Indica el grado de accesibilidad concurrente al fichero. (2 3) son
los valores más usuales e indican que sólo puede haber un acceso
concurrente de actualización y es de libre acceso de lectura.
* FSPC: Free Space. Indica la distribución del espacio libre en el fichero,
la primera magnitud indica el espacio libre en cada intervalo de control
y la segunda indica el número de intervalos de control libres en el Area
de Control.
IEFBR14:
Sirve para catalogar ficheros en vacío,borrarlos, etc. utilizando la sentencia DISP.
//******************************************************
//*
//******************** CATALOGACION VACIO **************
//PASO040 EXEC PGM=IEFBR14
//*
//FILEOUT DD DSN=NOMBRE.DE.FICHERO,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(350,(169,50),RLSE),
// RECFM=FB,LRECL=350
/*
Cataloga un fichero en vacío.
Incluiremos en el DISP la información que consideremos.
//*******************************************************
//**** BORRADO DE FICHEROS TEMPORALES
//*******************************************************
//BORRADO EXEC PGM=IEFBR14
//DD1 DD DSN=FICHERO.A.BORRAR,DISP=(OLD,DELETE,KEEP)
/*
Borra el fichero indicado.
IEBGENER:
Sirve para copiar ficheros secuenciales de uno a otro.
//*******************************************************
//**** COPIA DE FICHERO SECUENCIAL
//*******************************************************
//PASOXXXX EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=FICHERO.DE.ENTRADA
//SYSUT2 DD DSN=FICHERO.DE.SALIDA
//SYSIN DD DSN=DUMMY
/*
Cuando es una copia simple en la SYSUT1 se codifica el fichero de entrada.
Si en el SYSUT1 indicamos NULLFILE crearemos el fichero indicado en SYSUT2 en vacío.