AWS Mainframe Modernization 自我管理體驗不再開放給新客戶。如需類似 AWS Mainframe Modernization 自我管理體驗的功能,請從廠商導向產品和來源探索功能 AWS Transform。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱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.sqlCodePointShiftunload.noPadunload.nbi.whenNullunload.nbi.whenNotNullunload.useDatabaseConfigurationunload.format.dateunload.format.timeunload.format.timestamphasGraphicforcedDatefrozenDateforcedDateMode
如需設定這些參數的詳細資訊選用 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.DFSIGDCBhasGraphicforcedDatefrozenDateforcedDateMode
如需設定這些參數的詳細資訊選用 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.timestamphasGraphicforcedDatefrozenDateforcedDateMode
如需設定這些參數的詳細資訊選用 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") }) } } }
來自舊版的內嵌卡會使用串流保持「原狀」。