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 deSELECTlas 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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
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
StopRunUnitExceptiongenerará un mensaje de error, lo que provocará la detención de la unidad de ejecución actual. -
Si
SYSINse trata de una concatenación de varios conjuntos de datos y alguno de ellos no es compatible, se generará un.RuntimeExceptionActualmente, 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.useDatabaseConfigurationload.format.localDateload.format.dbDateload.format.localTimeload.format.dbTimeload.sqlCodePointShiftconvertGraphicDataToFullWidth
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
SYSINconjunto de datos no contiene ningún comando utilizable,RuntimeExceptionse 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
StopRunUnitExceptiongenerará 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):
INFUTILBINZUTILB
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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestampunload.columnFillerunload.varCharIsNullunload.DFSIGDCBhasGraphicforcedDatefrozenDate
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á
UnsupportedOperationExceptionun. -
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
AbendExceptiondetendrá la ejecución del programa):Si el
SYSRECconjunto 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
SYSPUNCHconjunto 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
SYSRECconjunto 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
SYSPUNCHconjunto 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
SYSRECconjunto 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
OUTDDNcomando falta en elSYSINconjunto de datos, para una tarea de descarga, devuelva el código 8;Si no se pudo encontrar ningún comando válido en el
SYSINconjunto 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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
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.