Mostrando entradas con la etiqueta IDCAMS. Mostrar todas las entradas
Mostrando entradas con la etiqueta IDCAMS. Mostrar todas las entradas

lunes, 24 de enero de 2011

JCL básico V: IDCAMS, IEFBR14, IEBGENER.

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.