Introducción a los GDGs

Los Grupos de Datos de Generación (GDGs) son una característica poderosa en JCL que permite gestionar conjuntos de datos secuenciales que se crean y utilizan en un orden específico. Los GDGs son útiles para aplicaciones que requieren mantener versiones históricas de datos, como copias de seguridad, registros de transacciones, y más.

Conceptos Clave

  • Generación: Cada conjunto de datos dentro de un GDG se denomina "generación" y se identifica con un número de generación.
  • Base GDG: Es el nombre del grupo de datos que actúa como un contenedor para todas las generaciones.
  • Número de Generación: Se especifica como GxxxxVyy, donde xxxx es el número de generación y yy es el número de versión.

Ventajas de Usar GDGs

  • Organización: Facilita la organización y el acceso a múltiples versiones de datos.
  • Automatización: Permite la creación y eliminación automática de generaciones.
  • Consistencia: Asegura que las aplicaciones siempre accedan a la versión correcta de los datos.

Creación de una Base GDG

Para crear una base GDG, se utiliza la utilidad IDCAMS. A continuación se muestra un ejemplo de cómo definir una base GDG:

//DEFINEGDG EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
  DEFINE GDG (NAME(MY.GDG.BASE) LIMIT(5) SCRATCH)
/*

Explicación del Código

  • PGM=IDCAMS: Especifica que se está utilizando el programa IDCAMS.
  • SYSPRINT: Define el destino de los mensajes de salida.
  • SYSIN: Contiene los comandos IDCAMS.
  • DEFINE GDG: Comando para definir una base GDG.
    • NAME: Nombre de la base GDG.
    • LIMIT: Número máximo de generaciones que se mantendrán.
    • SCRATCH: Indica que las generaciones más antiguas se eliminarán automáticamente cuando se alcance el límite.

Creación de una Nueva Generación

Para crear una nueva generación dentro de una base GDG, se utiliza la declaración DD en JCL. Aquí hay un ejemplo:

//NEWGEN   EXEC PGM=IEFBR14
//NEWDD    DD  DSN=MY.GDG.BASE(+1), DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)), DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)

Explicación del Código

  • PGM=IEFBR14: Especifica un programa de utilidad que no realiza ninguna operación, utilizado aquí para la creación del conjunto de datos.
  • DSN=MY.GDG.BASE(+1): Especifica que se está creando una nueva generación en la base GDG.
  • DISP=(NEW,CATLG,DELETE): Indica que el conjunto de datos es nuevo, se catalogará y se eliminará si el trabajo falla.
  • SPACE: Define el espacio de almacenamiento para el conjunto de datos.
  • DCB: Define las características del conjunto de datos, como el formato de registro y la longitud.

Acceso a Generaciones Existentes

Para acceder a una generación específica dentro de un GDG, se puede utilizar el número de generación relativo o absoluto. Aquí hay ejemplos de ambos:

Acceso Relativo

//READGEN  EXEC PGM=MYPROG
//INPUTDD  DD  DSN=MY.GDG.BASE(0), DISP=SHR

Acceso Absoluto

//READGEN  EXEC PGM=MYPROG
//INPUTDD  DD  DSN=MY.GDG.BASE.G0001V00, DISP=SHR

Explicación del Código

  • DSN=MY.GDG.BASE(0): Accede a la generación más reciente.
  • DSN=MY.GDG.BASE.G0001V00: Accede a una generación específica utilizando el número absoluto.

Ejercicio Práctico

Ejercicio

  1. Define una base GDG llamada TEST.GDG.BASE con un límite de 3 generaciones.
  2. Crea tres nuevas generaciones dentro de esta base GDG.
  3. Accede a la segunda generación más reciente y escribe un mensaje en el conjunto de datos.

Solución

//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
  DEFINE GDG (NAME(TEST.GDG.BASE) LIMIT(3) SCRATCH)
/*

//STEP2    EXEC PGM=IEFBR14
//NEWDD1   DD  DSN=TEST.GDG.BASE(+1), DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)), DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)

//STEP3    EXEC PGM=IEFBR14
//NEWDD2   DD  DSN=TEST.GDG.BASE(+1), DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)), DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)

//STEP4    EXEC PGM=IEFBR14
//NEWDD3   DD  DSN=TEST.GDG.BASE(+1), DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1)), DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)

//STEP5    EXEC PGM=MYPROG
//INPUTDD  DD  DSN=TEST.GDG.BASE(-1), DISP=SHR
//OUTPUTDD DD  SYSOUT=*
//SYSIN    DD *
  // Aquí se escribiría el código para escribir un mensaje en el conjunto de datos
/*

Conclusión

Los Grupos de Datos de Generación (GDGs) son una herramienta esencial en JCL para gestionar versiones de conjuntos de datos de manera eficiente y organizada. En este módulo, hemos aprendido a definir una base GDG, crear nuevas generaciones y acceder a generaciones existentes. Estos conceptos son fundamentales para cualquier programador que trabaje con JCL y necesite mantener un historial de datos.

En el próximo módulo, exploraremos el procesamiento condicional en JCL, lo que nos permitirá ejecutar trabajos basados en condiciones específicas.

© Copyright 2024. Todos los derechos reservados