資料庫公用程式 - AWS 大型主機現代化

AWS Mainframe Modernization Service (受管執行期環境體驗) 不再向新客戶開放。對於與 AWS Mainframe Modernization Service (受管執行期環境體驗) 類似的功能,探索 AWS Mainframe Modernization Service (自我管理體驗)。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱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是各種資料集的串連,且任何資料集都不受支援,RuntimeException則會擲回 。目前,當使用 做為 DSNTEP2/4 的輸入時,僅支援一般檔案和 GDG 世代類型做為串連檔案的一部分。

DSNTEP2/DSNTEP4 範例用量

以下是 DNSTEP4 的範例 JCL 用量:

//******************************************************************** //* 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則會擲回 。

  • 如果資料庫操作期間發生任何例外狀況,則會記錄錯誤訊息,傳回碼會設為 8,並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 簽章

您可以使用下列程式別名 (並與對應的舊版排序公用程式名稱相符):

  • 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),則程式傳回碼會設為 8UnsupportedOperationException,並擲出 。

  • 如果程式無法刪除暫時檔案,傳回碼將設為 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,將記錄錯誤訊息,但不會中斷程式執行。

針對下列任何情況,程式傳回碼會設為 8,並AbendException擲回 (停止程式執行):

  • 如果命令卡內容空白;

  • 如果在剖析處理命令期間發生任何例外狀況;

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") }) } } }

來自舊版的內嵌卡會使用串流保持「原狀」。