AWS 大型机现代化服务(托管运行时环境体验)不再向新客户开放。有关类似于 AWS 大型机现代化服务(托管运行时环境体验)的功能,请浏览 AWS 大型机现代化服务(自我管理体验)。现有客户可以继续正常使用该服务。有关更多信息,请参阅AWS 大型机现代化可用性变更。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据库实用程序
本节介绍的是与数据库相关的实用程序。在传统平台上,这些程序通常在 DB2 数据库上运行,而在现代环境中,则会选择其他数据库(AWS Aurora 是一种流行的选择)。
DSNTEP2/DSNTEP4
DSNTEP2/DSNTEP4 目的
DNSTEP 实用程序从输入数据集执行 SQL 查询,并将结果写入输出数据集。它会自动为现代化的目标数据库(超越 DB2)重写旧版 SQL 查询,并支持多种SYSIN数据集类型:流、Blusam 数据集、平面文件、GDG 生成和数据集串联。
DSNTEP2/DSNTEP4 签名
该实用程序不带任何参数,使用两个数据集:
-
SYSIN: 包含 SQL 语句的输入数据集 -
SYSPRINT: 查询结果的输出数据集(仅限SELECT查询)
DSNTEP2/DSNTEP4 相关配置参数
该实用程序的行为受以下配置参数的影响:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。
DSNTEP2/DSNTEP4 检查/错误处理
-
如果由于任何原因在查询运行期间发生异常,则将记录一条错误消息并抛出,从而导致当前运行单元停止。
StopRunUnitException -
如果
SYSIN是各种数据集的串联而其中任何一个数据集不受支持,则会抛出 aRuntimeException。当前,当与 /4 一起用作输入时,仅支持将平面文件和 GDG 世代类型作为连接文件的一部分。 DSNTEP2
DSNTEP2/用法DSNTEP4 示例
以下是 JCL 的用法 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;
以及匹配的现代化 groovy 脚本片段:
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") }) } } }
请注意,SQL 查询是 “按原样” 提供给 DSNTEP2 /4 实用程序的,不做任何修改。
DSNUTILB
DSNUTILB 目的
用于加载、复制和管理数据的数据库实用程序。通常在旧版 DB2 数据库上运行;现代化版本支持 AWS Aurora 和其他目标数据库。
DSNUTILB 签名
从本质上讲,DSNUTILB本来就是要用现代化的作业脚本来调用的。
不带任何参数;从SYSIN数据集中读取命令。
支持的命令有:
TEMPLATE(数据集的动态分配)LISTDEF(将数据库对象分组为列表,可供其他命令使用)COPY(创建数据库对象的副本)LOAD(将记录加载到表中)DISCARD(从表中删除记录)
有关命令的更多详细信息,请查阅相关的相应旧版文档。
DSNUTILB 相关的配置参数
该实用程序的行为受以下配置参数的影响:
unload.useDatabaseConfigurationload.format.localDateload.format.dbDateload.format.localTimeload.format.dbTimeload.sqlCodePointShiftconvertGraphicDataToFullWidth
有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。
DSNUTILB 检查/错误处理
-
如果
SYSIN数据集不包含任何可用的命令,则RuntimeException会抛出 a。 -
如果在数据库操作期间发生任何异常,则会记录一条错误消息,返回码将设置为 8,然后抛出 a
StopRunUnitException(停止当前的运行单元)。
DSNUTILB 用法示例
以下是 JCL 脚本中使用 DSNUTILB 的示例:
//******************************************************************** //* 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
使用命令卡片内容 (dsn01.card)--用于将数据从旧平台导出的平面文件加载到数据库中--:
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) )
以及配套的 groovy 现代化脚本片段:
// 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
INFUTILB 目的
INFUTILB/INZUTILB 是用于从数据库中提取数据——卸载——(DB2 在传统环境中)并将其转换为各种输出格式的实用程序。
系统会自动调整传统的 SQL 查询 on-the-fly以满足现代目标数据库的需求(支持的引擎:PostgreSQL、Oracle 和)。 DB2
INFUTILB /INZUTILB Signature
可以使用以下程序别名(并与相应的旧版排序实用程序名称相匹配):
INFUTILBINZUTILB
该实用程序不接受任何参数,而是从SYSIN数据集(“控制卡”)中读取要运行的命令。从数据库中提取的记录将写入SYSREC数据SYSPUNCH集,可选的数据集用于存储可用于重新加载数据的控制卡(DSNUTILB例如,使用其他实用程序)。
从本质 INFUTILB/INZUTILB 上讲,主要由现代化的作业脚本调用。
要获取有关支持的命令的详细信息,请参阅相应的旧版文档。 INFUTILB/INZUTILB 他们正在 “按原样” 使用传统的 “控制卡” 数据集。
INFUTILB /INZUTILB 相关的配置参数
该实用程序的行为受以下配置参数的影响:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestampunload.columnFillerunload.varCharIsNullunload.DFSIGDCBhasGraphicforcedDatefrozenDate
有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。
INFUTILB/INZUTILB 检查/错误处理
-
如果目标数据库不是支持的数据库引擎(PostgreSQL、Oracle DB2 和)的一部分,则程序返回码将设置为 8 并
UnsupportedOperationException抛出。 -
如果程序未能删除临时文件,则返回码将设置为 4,将记录一条错误消息,但程序运行不会中断。
-
对于以下所有情况,程序返回码将设置为 4 或 8,并抛出(停止程序运行):
AbendException如果
SYSREC数据集不是支持的类型(GDG 或基于文件系统的数据集);返回代码 4;如果
SYSPUNCH数据集不是支持的类型(GDG 或基于文件系统的数据集或DUMMY);返回代码 4;如果程序无法检索
SYSREC数据集记录大小(数据集目录中未设置或未定义);返回代码 8;如果程序无法检索
SYSPUNCH数据集记录大小(数据集目录中未设置或未定义);返回代码 8;如果用于创建
SYSREC数据集内容的查询无效(错误的查询将被记录下来);返回代码 4;如果在从数据库中获取数据时出现任何异常;返回代码 8;
如果
SYSIN数据集中缺少该OUTDDN命令,则执行卸载任务;返回代码 8;如果在
SYSIN数据集中找不到有效的命令,则返回代码 8;
INFUTILB /INZUTILB 用法示例
以下是旧版 jcl 脚本片段示例:
//******************************************************************** //* 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
它使用以下命令卡 (inf12.card) 从数据库中卸载一些数据(在这里,记录是根据其日期选择的):
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
以及匹配的 groovy 脚本片段,这是 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
JXHDBCLR 目的
JXHDBCLR 是一个数据库清除实用程序,可在 GS21 平台上找到,它根据命令卡中提供的特定语句截断表。
JXHDBCLR 签名
它不接受任何参数,而是从SYSIN数据集(命令卡)中读取语句。
由于其性质,它主要被现代化的作业脚本调用。
JXHDBCLR 相关的配置参数
该实用程序的行为受以下配置参数的影响:
unload.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。
JXHDBCLR 检查/错误处理
如果找不到要截断的表,则会记录一条警告消息,但程序运行不会中断。
如果在表截断期间出现一些故障,则程序返回码将设置为 4,将记录错误消息,但程序运行不会中断。
对于以下任何一种AbendException情况,程序返回码将设置为 8 并抛出(停止程序运行):
如果命令卡片内容为空;
在解析命令处理过程中是否出现任何异常;
JXHDBCLR 用法示例
带有内联命令卡的 JXHDBCLR 用法示例:
//******************************************************************* //** 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
以及匹配的现代化 groovy 脚本片段:
// 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") }) } } }
旧版的内联卡片使用直播保持 “原样”。