Ya hemos hablado en post anteriores sobre algunas de las Utilidades estándar para el tratamiento de JCL que vienen definidas en el sistema operativo ZOS. Otra de ellas es la denominada IEBCOPY, que nos puede ser muy útil para realizar el trabajo con miembros particionados (ficheros PDS) o Library (ficheros PDSE).
La utilidad IEBCOPY se emplea para realizar una copia de un miembro particionado (o de un miembro Library) o para unir dos miembros particionados. Su uso, muy sencillo, está muy extendido y lo encontraremos en gran cantidad de JCL de las aplicaciones que hay activas hoy en día.
Un ejemplo de cómo habría de emplearse lo podemos ver en el código que incorporamos a continuación. Se trata de un paso que podríamos insertar en cualquier JCL.
//STEP1 EXEC PGM=IEBCOPY
//SYSUT1 DD DSN=LIBPR.JJ00.PROCLIB,DISP=SHR
//SYSUT2 DD DSN=LIBPR.JJ01.PROCLIB,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(10,5),RLSE),UNIT=SYSDA,
// DCB=(DSORG=PO,LRECL=80,RECFM=FB,BLKSIZE=0),
// VOL=SER=ZARES1
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
Los declaraciones que hay que realizar para el IEBCOPY son las siguientes:
1º) Card SYSUT1: Se trata del miembro de origen, es decir, es el miembro del que vamos a realizar una copia. En el ejemplo es el miembro LIBPR.JJ00.PROCLIB.
//SYSUT1 DD DSN=LIBPR.JJ00.PROCLIB,DISP=SHR
2º) Card SYSIN: Son las sentencias de control de entrada para el programa. En este caso, el IEBCOPY no lleva parámetros, así que lo ponemos a DUMMY.
//SYSIN DD DUMMY
3º) Card SYSUT2: Es el miembro de salida, es decir, el miembro copia del que hemos indicado en la card SYSUT1. En el ejemplo, el miembro se denominará LIBPR.JJ001.PROCLIB. Como vemos, aquí podemos indicar las características que deseamos que tenga nuestro miembro particionado: DISP, SPACE, UNIT, DCB, VOLSER, etc...
//SYSUT2 DD DSN=LIBPR.JJ01.PROCLIB,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(10,5),RLSE),UNIT=SYSDA,
// DCB=(DSORG=PO,LRECL=80,RECFM=FB,BLKSIZE=0),
// VOL=SER=ZARES1
4º) Card 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=*
Una vez informadas estas 4 cards, nuestro paso JCL no debería dar ningún problema a la hora de crear una copia del miembro origen. En nuestro ejemplo, se creó el miembro LIBPR.JJ01.PROCLIB con una réplica de la información contenida en el miembro original LIBPR.JJ00.PROCLIB.
Esta es la forma en la que se suelen realizar copias de miembros particionados en la mayoría de las aplicaciones ZOS que hay operativas actualmente. Comentar que, aparte de para copiar, el IEBCOPY también se suele usar para realizar fusiones de miembros, pero la estructura de cards sería la misma.
Esperamos que, con la información proporcionada, podáis incluir la utilidad IEBCOPY en vuestros JCL. Si hay algo que no os ha quedado claro, no dudéis en preguntarlo.
Saludos.
Excelente, mil gracias 🫂
ResponderEliminar