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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDate
如需設定這些參數的詳細資訊選用 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.useDatabaseConfigurationload.format.localDateload.format.dbDateload.format.localTimeload.format.dbTimeload.sqlCodePointShiftconvertGraphicDataToFullWidth
如需設定這些參數的詳細資訊選用 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 簽章
您可以使用下列程式別名 (並與對應的舊版排序公用程式名稱相符):
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,將記錄錯誤訊息,但不會中斷程式執行。
針對下列任何情況,程式傳回碼會設為 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") }) } } }
來自舊版的內嵌卡會使用串流保持「原狀」。