Herramientas de bases de datos - AWS Modernización de mainframe

AWS El servicio de modernización de mainframes (experiencia en entornos de ejecución gestionados) ya no está abierto a nuevos clientes. Para obtener prestaciones similares a las del Servicio de Modernización de AWS Mainframe (experiencia en entornos de ejecución gestionados), explore el Servicio de Modernización de AWS Mainframe (experiencia autogestionada). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de la modernización del AWS mainframe.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Herramientas de bases de datos

Esta sección trata sobre las utilidades relacionadas con las bases de datos. En las plataformas heredadas, estos programas suelen funcionar en DB2 bases de datos, mientras que en los entornos modernos se eligen bases de datos alternativas (AWS Aurora es una opción popular).

DSNTEP2/DSNTEP4

DSNTEP2/DSNTEP4 Propósito

La utilidad DNSTEP ejecuta consultas SQL desde conjuntos de datos de entrada y escribe los resultados en conjuntos de datos de salida. Reescribe automáticamente las consultas SQL antiguas para bases de datos de destino modernizadas (más allá DB2) y admite varios tipos de conjuntos de datos: flujos, conjuntos de SYSIN datos de Blusam, archivos planos, generaciones de GDG y concatenaciones de conjuntos de datos.

DSNTEP2/Firma DSNTEP4

La utilidad no acepta argumentos y utiliza dos conjuntos de datos:

  • SYSIN: conjunto de datos de entrada que contiene sentencias SQL

  • SYSPRINT: Conjunto de datos de salida para los resultados de SELECT las consultas (solo consultas)

DSNTEP2/parámetros de configuración DSNTEP4 relacionados

Los siguientes parámetros de configuración influyen en el comportamiento de la utilidad:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Consulte Propiedades disponibles para las aplicaciones web opcionales para obtener más información sobre la configuración de estos parámetros.

DSNTEP2/DSNTEP4 Comprobaciones/Gestión de errores

  • Si, por cualquier motivo, se produce una excepción durante la ejecución de la consulta, se registrará un mensaje de error y se StopRunUnitException generará un mensaje de error, lo que provocará la detención de la unidad de ejecución actual.

  • Si SYSIN se trata de una concatenación de varios conjuntos de datos y alguno de ellos no es compatible, se generará un. RuntimeException Actualmente, solo los archivos planos y los tipos de generaciones de GDG se admiten como parte de un archivo concatenado, cuando se utilizan como entrada con /4. DSNTEP2

DSNTEP2/Ejemplos de usos DSNTEP4

Este es un ejemplo del uso de JCL de: DNSTEP4

//******************************************************************** //* RETRIEVE DATA FROM TABLE AP_JBI7_INVOICE * //******************************************************************** //* //DSNTEP03 EXEC PGM=DSNTEP4,DYNAMNBR=20 //SYSPRINT DD DSN=output(out012.txt), // DISP=SHR,DCB=(RECFM=FB,LRECL=1152) //SYSIN DD * SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR;

y el correspondiente fragmento de código groovy modernizado:

def stepDSNTEP03(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("DSNTEP03", "DSNTEP4", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSPRINT") .path("output(out012.txt)").recordSize(1152) .disposition("SHR") .build() .fileSystem("SYSIN") .stream( """ SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR; """, getEncoding()) .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("DSNTEP4") }) } } }

Tenga en cuenta que la consulta SQL se proporciona «tal cual» a la utilidad DSNTEP2 /4, sin ninguna modificación.

DSNUTILB

DSNUTILB Propósito

Utilidad de base de datos para cargar, copiar y gestionar datos. Normalmente funciona en DB2 bases de datos antiguas; la versión modernizada es compatible con AWS Aurora y otras bases de datos de destino.

Firma DSNUTILB

Por naturaleza, DSNUTILB está pensado más bien para que lo denominen guiones de trabajo modernizados.

No toma argumentos; lee los comandos del conjunto de datos. SYSIN

Los comandos compatibles son:

  • TEMPLATE(asignación dinámica de conjuntos de datos)

  • LISTDEF(agrupe los objetos de la base de datos en listas, utilizables por otros comandos)

  • COPY(crear copias de los objetos de la base de datos)

  • LOAD(cargar registros en tablas)

  • DISCARD(eliminar registros de las tablas)

Para obtener más información sobre los comandos, consulte la documentación anterior correspondiente.

Parámetros de configuración relacionados con DSNUTILB

Los siguientes parámetros de configuración influyen en el comportamiento de la utilidad:

  • unload.useDatabaseConfiguration

  • load.format.localDate

  • load.format.dbDate

  • load.format.localTime

  • load.format.dbTime

  • load.sqlCodePointShift

  • convertGraphicDataToFullWidth

Consulte Propiedades disponibles para las aplicaciones web opcionales para obtener más información sobre la configuración de estos parámetros.

DSNUTILB comprueba o gestiona errores

  • Si el SYSIN conjunto de datos no contiene ningún comando utilizable, RuntimeException se lanzará un comando.

  • Si se produce alguna excepción durante las operaciones de la base de datos, se registrará un mensaje de error, el código de retorno se establecerá en 8 y se StopRunUnitException generará un (se detendrá la unidad de ejecución actual).

Ejemplos de usos de DSNUTILB

Este es un ejemplo del uso de DSNUTILB en un script JCL:

//******************************************************************** //* LOAD DATA IN TABLE AP_JBI7_INVOICE. * //******************************************************************** //DSN01 EXEC PGM=DSNUTILB,DYNAMNBR=20 //SYSREC DD DSN=input(input021.data), // DISP=SHR // DCB=(RECFM=FB,LRECL=76) //SYSIN DD DSN=input(dsn01.card), // DISP=SHR

con el contenido de la tarjeta de comandos (dsn01.card), que se utiliza para cargar datos en la base de datos desde un archivo plano exportado desde la plataforma anterior:

LOAD DATA INDDN SYSREC RESUME NO LOG YES NOCOPYPEND SORTDEVT SYSDA SORTNUM 12 SORTKEYS 100000 DISCARDS 0 INTO TABLE BUR000.AP_JB17_INVOICE WHEN (76:76) = 'L' ( IDENTIFIER POSITION(1:1) SMALLINT ,CUST_ID POSITION(10) VARCHAR NULLIF(39) = '?' ,CUST_KD POSITION(40:43) CHAR ,INVC_AMNT POSITION(44:49) NUMERIC ,INVC_DAT POSITION(50:75) TIMESTAMP EXTERNAL(26) )

y el correspondiente fragmento de guion modernizado y genial:

// STEP DSN01 - PGM - DSNUTILB**************************************************** def stepDSN01(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("DSN01", "DSNUTILB", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSREC") .path("input(input021.data)").recordSize(76) .disposition("SHR") .build() .fileSystem("SYSIN") .path("input(dsn01.card)") .disposition("SHR") .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("DSNUTILB") }) } } }

INFUTILB/INZUTILB

Propósito de INFUTILB

Los INFUTILB/INZUTILB son programas de utilidad que se utilizan para extraer datos de las bases de datos (descargarlos) (DB2 en un entorno heredado) y convertirlos a varios formatos de salida.

Las consultas SQL antiguas se adaptan automáticamente on-the-fly para cumplir con los requisitos de las bases de datos de destino modernas (motores compatibles: PostgreSQL, Oracle y). DB2

Firma INFUTILB/INZUTILB

Se pueden utilizar los siguientes alias de programa (que coincidan con el nombre de las utilidades de clasificación antiguas correspondientes):

  • INFUTILB

  • INZUTILB

La utilidad no acepta ningún argumento, sino que lee los comandos que se van a ejecutar desde el SYSIN conjunto de datos (una «tarjeta de control»). Los registros extraídos de la base de datos se escriben en el SYSREC conjunto de datos y el SYSPUNCH conjunto de datos opcional se utiliza para almacenar la tarjeta de control que se puede utilizar para recargar los datos (mediante otras utilidades, DSNUTILB por ejemplo).

Por naturaleza, INFUTILB/INZUTILB están pensados en su mayoría para ser llamados mediante scripts de trabajo modernizados.

Para obtener más información sobre los comandos compatibles, consulte la documentación anterior correspondiente. INFUTILB/INZUTILB Utilizan conjuntos de datos antiguos de «tarjetas de control» «tal cual».

Parámetros de configuración relacionados con INFUTILB/INZUTILB

Los siguientes parámetros de configuración influyen en el comportamiento de la utilidad:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • unload.columnFiller

  • unload.varCharIsNull

  • unload.DFSIGDCB

  • hasGraphic

  • forcedDate

  • frozenDate

Consulte Propiedades disponibles para las aplicaciones web opcionales para obtener más información sobre la configuración de estos parámetros.

INFUTILB/INZUTILB comprueba/Gestiona errores

  • Si la base de datos de destino no forma parte de los motores de bases de datos compatibles (PostgreSQL, Oracle DB2 y), el código de retorno del programa se establecerá en 8 y se generará UnsupportedOperationException un.

  • Si el programa no puede eliminar los archivos temporales, el código de retorno se establecerá en 4, se registrará un mensaje de error, pero la ejecución del programa no se interrumpirá.

  • En todos los casos siguientes, el código de retorno del programa será 4 u 8 y aparecerá un (lo que AbendException detendrá la ejecución del programa):

    • Si el SYSREC conjunto de datos no es de los tipos admitidos (ya sea un conjunto de datos basado en GDG o un sistema de archivos), devuelva el código 4;

    • Si el SYSPUNCH conjunto de datos no es de los tipos compatibles (ya sea un conjunto de datos basado en GDG o un sistema de archivosDUMMY), devuelva el código 4;

    • Si el programa no puede recuperar el tamaño del registro del SYSREC conjunto de datos (no está establecido o no está definido en el catálogo de conjuntos de datos), devuelva el código 8;

    • Si el programa no puede recuperar el tamaño del registro del SYSPUNCH conjunto de datos (no está establecido o no está definido en el catálogo de conjuntos de datos), devuelva el código 8;

    • Si la consulta utilizada para crear el contenido del SYSREC conjunto de datos no es válida (se registrará la consulta defectuosa), devuelva el código 4;

    • Si se produce alguna excepción al obtener datos de la base de datos, devuelva el código 8;

    • Si el OUTDDN comando falta en el SYSIN conjunto de datos, para una tarea de descarga, devuelva el código 8;

    • Si no se pudo encontrar ningún comando válido en el SYSIN conjunto de datos, devuelva el código 8;

Ejemplos de usos de INFUTILB/INZUTILB

Este es un ejemplo de un fragmento de script jcl antiguo:

//******************************************************************** //* UNLOAD DATA FROM TABLE AP_JBI7_INVOICE. * //******************************************************************** //INF1 EXEC PGM=INFUTILB //SYSREC DD DSN=output(out032.data), // DISP=SHR // DCB=(RECFM=FB,LRECL=90) //SYSIN DD DSN=input(inf12.card), // DISP=SHR

que utiliza la siguiente tarjeta de comandos (inf12.card) para descargar algunos datos de la base de datos (en este caso, los registros se seleccionan en función de su fecha):

UNLOAD SELECT * FROM BUR000.AP_JB17_INVOICE WHERE INVC_DAT >= CONCAT(STRIP(CHAR(YEAR(CURRENT DATE - 100 YEAR))),'-01-01-00.00.00.000000') AND INVC_DAT >= CONCAT('2025-01-01-',CONCAT((CURRENT TIME),'.000000')) AND INVC_DAT >= (CURRENT TIMESTAMP - 100 YEAR) ORDER BY identifier ASC OUTDDN (SYSREC) FORMAT DSNTIAUL

y el correspondiente fragmento de script groovy, resultado de la modernización automatizada de jcl:

// STEP INF1 - PGM - INFUTILB***************************************************** def stepINF1(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("INF1", "INFUTILB", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSREC") .path("output(out032.data)").recordSize(90) .disposition("SHR") .build() .fileSystem("SYSIN") .path("input(inf12.card)") .disposition("SHR") .build() .getFileConfigurations(fcmap)) .withParameters(params) .runProgram("INFUTILB") }) } } }

JXHDBCLR

Propósito de JXHDBCLR

JXHDBCLR es un programa de limpieza de bases de datos, que se encuentra en GS21 las plataformas, que trunca las tablas de acuerdo con las declaraciones específicas proporcionadas en una tarjeta de comandos.

Firma JXHDBCLR

No acepta ningún argumento, sino que lee las declaraciones del SYSIN conjunto de datos (la tarjeta de comandos).

Debido a su naturaleza, está pensado principalmente para ser llamado mediante scripts de trabajo modernizados.

Parámetros de configuración relacionados con JXHDBCLR

Los siguientes parámetros de configuración influyen en el comportamiento de la utilidad:

  • unload.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

Consulte Propiedades disponibles para las aplicaciones web opcionales para obtener más información sobre la configuración de estos parámetros.

JXHDBCLR comprueba o gestiona errores

Si no se encuentran tablas para truncar, se registrará un mensaje de advertencia, pero la ejecución del programa no se interrumpirá.

Si se producen algunos errores durante el truncamiento de las tablas, el código de retorno del programa se establecerá en 4, los mensajes de error se registrarán, pero la ejecución del programa no se interrumpirá.

En cualquiera de las siguientes condiciones, el código de retorno del programa se establecerá en 8 y se AbendException generará un (lo que detendrá la ejecución del programa):

  • Si el contenido de la tarjeta de comandos está vacío;

  • si se produce alguna excepción durante ese análisis o procesamiento de los comandos;

Ejemplos de usos de JXHDBCLR

Un ejemplo del uso de JXHDBCLR con una tarjeta de comandos integrada:

//******************************************************************* //** Step 1 - JXHDBCLR UTILITY - DBCLEAR TYPE=2/3 //******************************************************************* //STEP01 EXEC PGM=JXHDBCLR,REGION=256K,PARM='LINECNT=0' //SYSPRINT DD SYSOUT=* //SYSIN DD * DBCLEAR SCHEMA=MUSICSCH,TYPE=3,CHECK=YES DEFINE RANGE=(SINGERDEST) END

y el correspondiente fragmento de código groovy modernizado:

// STEP STEP01 - PGM - JXHDBCLR*************************************************** def stepSTEP01(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("STEP01", "JXHDBCLR", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .fileSystem("SYSIN") .stream( """ DBCLEAR SCHEMA=MUSICSCH,TYPE=3,CHECK=YES DEFINE RANGE=(SINGER) END""", getEncoding()) .build() .getFileConfigurations()) .withArguments(getParm("LINECNT=0")) .withParameters(params) .runProgram("JXHDBCLR") }) } } }

La carta incrustada de Legacy se guarda «tal cual», mediante una secuencia.