数据库实用程序 - AWS 大型机现代化

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.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。

DSNTEP2/DSNTEP4 检查/错误处理

  • 如果由于任何原因在查询运行期间发生异常,则将记录一条错误消息并抛出,从而导致当前运行单元停止。StopRunUnitException

  • 如果SYSIN是各种数据集的串联而其中任何一个数据集不受支持,则会抛出 a RuntimeException。当前,当与 /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.useDatabaseConfiguration

  • load.format.localDate

  • load.format.dbDate

  • load.format.localTime

  • load.format.dbTime

  • load.sqlCodePointShift

  • convertGraphicDataToFullWidth

有关配置这些参数可选 Web 应用程序的可用属性的详细信息,请参阅。

DSNUTILB 检查/错误处理

  • 如果SYSIN数据集不包含任何可用的命令,则RuntimeException会抛出 a。

  • 如果在数据库操作期间发生任何异常,则会记录一条错误消息,返回码将设置为 8,然后抛出 aStopRunUnitException(停止当前的运行单元)。

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

可以使用以下程序别名(并与相应的旧版排序实用程序名称相匹配):

  • INFUTILB

  • INZUTILB

该实用程序不接受任何参数,而是从SYSIN数据集(“控制卡”)中读取要运行的命令。从数据库中提取的记录将写入SYSREC数据SYSPUNCH集,可选的数据集用于存储可用于重新加载数据的控制卡(DSNUTILB例如,使用其他实用程序)。

从本质 INFUTILB/INZUTILB 上讲,主要由现代化的作业脚本调用。

要获取有关支持的命令的详细信息,请参阅相应的旧版文档。 INFUTILB/INZUTILB 他们正在 “按原样” 使用传统的 “控制卡” 数据集。

INFUTILB /INZUTILB 相关的配置参数

该实用程序的行为受以下配置参数的影响:

  • 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

有关配置这些参数可选 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.sqlCodePointShift

  • unload.noPad

  • unload.nbi.whenNull

  • unload.nbi.whenNotNull

  • unload.useDatabaseConfiguration

  • unload.format.date

  • unload.format.time

  • unload.format.timestamp

  • hasGraphic

  • forcedDate

  • frozenDate

有关配置这些参数可选 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") }) } } }

旧版的内联卡片使用直播保持 “原样”。