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

AWS Mainframe Modernization Service (受管執行期環境體驗) 不再向新客戶開放。對於與 AWS Mainframe Modernization Service (受管執行期環境體驗) 類似的功能,探索 AWS Mainframe Modernization Service (自我管理體驗)。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS 大型主機現代化可用性變更

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料集公用程式

BLUESAMCOPY/BLUESAMCREATE/BLUESAMDELETE/BLUESAMCLEAR

這些公用程式可在 Blusam 資料集上提供基本資料集操作函數。

bypassBluesamStatus 旗標 (存放在 JobContext 中) 會決定是否略過正常資料集狀態驗證,以防止線上和批次程序之間的並行存取衝突。

bypassBluesamStatus為 true 時:

  • 在操作期間略過一般資料集狀態檢查

  • 允許存取通常可能遭到封鎖的資料集

藍色SAMCOPY

BLUESAMCOPY 程式會將資料和中繼資料結構從一個 Bluesam 資料集複製到另一個資料集。

Parameters

BLUESAMCOPY 程式需要兩個參數:

  • FROM=<source dataset name> - 要從中複製的來源資料集

  • TO=<target dataset name> - 要複製到的目標資料集

Behavior (行為)

  • 如果目標資料集不存在, 會使用來源的中繼資料結構建立目標資料集

  • 如果目標存在, 會在複製之前將其清除 (覆寫現有資料)

  • 當線上程序未使用資料集或bypassBluesamStatus將 設為 true 時,操作會繼續進行

  • 保留金鑰、壓縮、記錄長度和其他中繼資料屬性

錯誤處理

如果來源資料集不存在或線上程序正在使用任一資料集,則傳回程式碼 1。

範例用量

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // copy bluesam dataset res = mpr.withArguments("FROM=MYBLUESAMTABLE","TO=MYBLUESAMTABLE2").runProgram("BLUESAMCOPY")

藍色SAMCREATE

BLUESAMCREATE 程式會使用指定的參數建立 Bluesam 資料集。

Parameters

BLUESAMCREATE 程式需要七個參數:

  • name=<dataset name> - 要建立的資料集 (強制性)

  • compress=<true/false> - 啟用壓縮 (選用,預設值:false)

  • fixedLength=<true/false> - 固定長度記錄狀態 (選用,預設值:false)

  • recordLength=<integer> - 以位元組為單位記錄長度 (選用,預設值:-1)

  • primaryKey=<key id>,duplicates=<true/false>,fields=<offset,length,...> - 主索引鍵規格 (選用)

  • key=<altkey id>,duplicates=<true/false>,fields=<offset,length,...> - 備用金鑰 (可以有多個 或 0)

  • clearExisting=true/false - 清除現有資料集 (選用預設值: true)

特定金鑰參數說明:

  • duplicates:指定金鑰是否允許重複值;

  • fields:定義金鑰的欄位位置 (1 型) 和長度;

Behavior (行為)

  • 如果資料集不存在, 會使用指定的參數建立資料集

  • 如果資料集存在, 會在 clearExisting=true

  • 當線上程序未使用資料集或bypassBluesamStatus將 設定為 時,操作會繼續進行 true

錯誤條件

在所有情況下傳回程式碼 0。

範例用量

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // create bluesam dataset mpr.withArguments( "name=MYBLUESAMTABLE", "compress=FALSE", "fixedLength=true", "recordLength=54", "primaryKey=MYKEY_PK,duplicates=FALSE,fields=0,6") .runProgram("BLUESAMCREATE")

藍色SAMDELETE

BLUESAMDELETE 程式會刪除 Bluesam 資料集。

Parameters

BLUESAMDELETE 程式需要 1 個或多個參數:

  • <dataset name> - 要刪除的資料集 (可以有多個)

Behavior (行為)

  • 當線上程序未使用資料集或bypassBluesamStatus將 設定為 時,操作會繼續進行 true

  • 如果資料集存在,請將其刪除

錯誤條件

在所有情況下傳回程式碼 0。

範例用量

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // delete bluesam datasets res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2","MYBLUESAMTABLE3").runProgram("BLUESAMDELETE")

藍色SAMCLEAR

BLUESAMCLEAR 程式會從現有資料集移除所有資料,同時保留其結構和中繼資料。

Parameters

BLUESAMCLEAR 程式需要 1 個或多個參數:

  • <dataset name> - 要清除的資料集 (可以有多個)

Behavior (行為)

  • 當線上程序未使用資料集或bypassBluesamStatus將 設定為 時,操作會繼續進行 true

  • 如果資料集存在,請將其清除

錯誤條件

在所有情況下傳回程式碼 0。

範例用量

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) // clear bluesam datasets res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2").runProgram("BLUESAMCLEAR")

BPXWDYN

此公用程式會模擬動態資料集配置和解除配置的 z/OS BPXWDYN 服務。在現代應用程式中,檔案配置會透過FileConfigurationUtils建置器 api 在 Groovy 指令碼中完成。此程式允許在沒有 Groovy 的情況下動態管理這些配置,這對於現代化應用程式中的互動式或條件式檔案處理至關重要。

Parameters

會保留舊版引數格式。預期單一引數包含 2 位元組大小的標頭,後面接著命令字串。

用於配置的命令字串格式: ALLOC DD(<name>) DSN('<dsn>') SHR?

解除配置的命令字串格式: FREE DD(<name>)

錯誤處理

  • 設定錯誤代碼 0 表示成功,設定 1 表示失敗

  • 針對無效的命令或參數擲回 RuntimeException

範例用量

以下是透過 AWS 轉換進行 COBOL 現代化所產生的 BPXWDYN 程式 Java 範例用量:

COBOL 程式碼:

01 WK-AREA. 03 DS-ALLOC-STRING. 05 DS-LENGTH PIC S9(004) COMP VALUE 100. 05 DS-TEXT PIC X(100) VALUE "ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR". ... 01 RC-RETURN-CODE-AREA. 03 RC-RETURN-CODE PIC S9(008) COMP. ... CALL 'BPXWDYN' USING DS-ALLOC-STRING RETURNING RC-RETURN-CODE.

和相符的 Java 現代化:

private final Group dsAllocString = new Group(root).named("DS-ALLOC-STRING"); private final Elementary dsLength = new Elementary(dsAllocString,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("100")).named("DS-LENGTH"); private final Elementary dsText = new Elementary(dsAllocString,new AlphanumericType(100),"ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR").named("DS-TEXT"); ... private final Group root = new Group(getData()).named("RC-RETURN-CODE-AREA"); private final Elementary rcReturnCode = new Elementary(root,new BinaryType(8, 0, "STD", false, false, true)).named("RC-RETURN-CODE"); ... // Call to utility program BPXWDYN ctrl.callSubProgram( "BPXWDYN", CallBuilder.newInstance().byReference(ctx.getWkArea().getDsAllocStringReference()).getArguments(), ctx); ctx.getRcReturnCodeArea().setRcReturnCode(NumberUtils.convert(ctx.getProgramReturned()).intValue());

GDGUTILS

GDGs(世代資料群組) 允許應用程式使用版本控制的資料集,其中每個執行都會建立新的世代,同時維持對上一代的存取。此公用程式會建立和管理這些資料集的產生。此公用程式旨在以 groovy 指令碼呼叫。

Parameters

參數順序無關緊要

  • action=<create|refreshevents> - 要執行的操作 (強制性)

  • gdgname=<name> - GDG 基礎的名稱 (強制性)

  • storageProvider=<filesystem|bluesam> - 儲存後端

  • relativeGeneration=<+integer> - 相對世代編號 (例如,下一個為 +1)

  • absoluteGeneration=integer - 絕對產生數量

  • recordLength=<integer> - 在資料集中記錄大小

  • fixedLength=<true/false> - 指定記錄在資料集中具有固定長度

  • ownerPath=<File system path> - 存放資料集的路徑 (檔案系統特定,該案例為必要)

  • compress=<true/false> - 表示如果資料在資料存放區中壓縮 (bluesam specific),則資料應保持在記憶體中壓縮 (選用,false 是預設值)

  • catalog - 指定要編製目錄的資料集 (選用)

  • warmUp - 表示資料集應在開啟時載入記憶體 (藍本特定) (選用)

relativeGeneration 或 absoluteGeneration:需要設定其中一個屬性。

作業

  • 建立:根據 GDG 中繼資料建立新的 GDG 資料集產生 (同時處理檔案系統和 Bluesam 儲存)

  • refreshevents:調整產生數量 (Gdg Metadata) 而不建立新的資料集 (在重新啟動已建立資料集的失敗任務時使用)

錯誤處理

  • 設定錯誤代碼 0 表示成功,設定 1 表示失敗

  • 針對無效的命令或參數擲回 RuntimeException

範例用量

Gdg 建立操作:下列程式碼會建立IC.PLI.GDGTEST資料集的 bluesam 產生 (43)

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) Map params = new Hashtable() params.put("jobContext", jobContext) Object[] args =["action=create","gdgname=IC.PLI.GDGTEST","absoluteGeneration=43","storageProvider=bluesam","recordLength=80"] mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")

Gdg refreshevents 操作:只有 relativeGeneration 與此操作相關。下列程式碼會更新IC.PLI.GDGTEST資料集的產生編號 (+1 相較於目前世代)

import ... mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) Map params = new Hashtable() params.put("jobContext", jobContext) Object[] args =["action=refreshevents","gdgname=IC.PLI.GDGTEST","relativeGeneration=1","storageProvider=bluesam"] mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")

ICEGENER/SYNCGENR

此公用程式程式模擬 z/OS 系統公用程式 ICEGENER 的行為,它會將資料集從輸入 (SYSUT1 資料集) 複製到輸出 (SYSUT2 資料集)。此 Java 實作提供同等功能,同時支援檔案系統和 Bluesam 儲存。

Parameters

無引數

必要的資料集

  • SYSUT1:輸入資料集/檔案

  • SYSUT2:輸出資料集/檔案

SYSUT2 資料集的處置處理

  • 新功能:建立新的資料集/檔案

  • OLD/SHR:使用現有的資料集/檔案 (必須存在)

  • MOD:修改,如果遺失則建立,如果存在則附加

錯誤處理

  • 如果複製成功,請設定錯誤代碼 0;如果失敗,請設定 1

  • 拋棄IllegalStateException無效使用 Bluseam 資料集

範例用量

以下是透過 AWS 轉換進行 JCL 現代化所產生的 ICEGENER 程式的 Groovy 範例用量:

JCL 程式碼:

//STEP01 EXEC PGM=ICEGENER //SYSUT1 DD DSN=POI.INPUT,DISP=SHR //SYSUT2 DD DSN=POI.OUTPU, // DISP=(,CATLG,DELETE), // UNIT=3490, // DCB=(RECFM=FB,LRECL=100) /*

和相符的 Groovy 現代化:

mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("SYSUT1") .dataset("POI.INPUT") .disposition("SHR") .build() .bluesam("SYSUT2") .dataset("POI.OUTPU") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("ICEGENER")

IDCAMS/KQCAMS

此公用程式程式模擬舊版程式 IDCAMS 的行為,這是用於 VSAM (虛擬儲存存取方法) 檔案操作的大型主機資料管理工具。它會處理舊版 IDCAMS 命令,維護與原始 SYSIN 輸入相同的語法。

Context

您可以透過 中定義的兩個參數來設定程式行為application-utility-pgm.yml

  • jclType:JCL 類型識別符 (vse 或 mvs)。如果非 vse jcl 的檔案為空,IDCAMS 公用程式 PRINT/REPRO 命令會傳回 4

  • forcedCharsetIdcams:IDCAMS 處理的選用字元集覆寫

Parameters

無引數。操作會透過 SYSIN 資料集傳遞。

必要的資料集

  • SYSIN - 包含 IDCAMS 命令陳述式

  • 輸入/輸出資料集 - 如 IDCAMS 命令中所參考 (取決於 IDCAMS 陳述式)

主要功能/支援的命令

此處不提供 SYSIN 控制卡中找到的 IDCAMS 命令詳細資訊,但應從現有的相關舊版平台文件中擷取。

  • DEFINE - 建立 VSAM 叢集和資料集

  • DELETE - 移除資料集 (支援萬用字元)

  • REPRO - 在資料集之間複製資料

  • 列印 - 顯示資料集內容

  • VERIFY - 驗證資料集是否存在和完整性

  • ALTER - 修改資料集屬性 (重新命名)

  • ALLOC - 動態配置資料集

  • SET - 管理條件代碼 (LASTCC/MAXCC)

  • IF-THEN-ELSE - 條件式命令執行

  • CANCEL - 終止任務執行

錯誤處理

  • 如果最後一個命令成功,請設定錯誤碼 0;如果失敗,請設定 -1

  • SET (LASTCC) 命令可用來覆寫錯誤碼,例如 SET LASTCC = 0

範例用量

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IDCAMS 程式的 Groovy 範例用量:

JCL 程式碼:

//STEP15 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //ACCTDATA DD DISP=SHR, // DSN=AWS.M2.CARDDEMO.ACCTDATA.PS //ACCTVSAM DD DISP=SHR, // DSN=AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS //SYSIN DD * REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM) /*

和相符的 Groovy 現代化:

mpr.withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .bluesam("ACCTDATA") .dataset("AWS.M2.CARDDEMO.ACCTDATA.PS") .disposition("SHR") .build() .bluesam("ACCTVSAM") .dataset("AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS") .disposition("SHR") .build() .fileSystem("SYSIN") .stream("REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)", getEncoding()) .build() .getFileConfigurations()) .withParameters(params) .runProgram("IDCAMS")

IEBGENER/JSDGENER

此程式會複寫 IEBGENER 公用程式。它用於複製和操作循序資料集。此實作支援進階資料處理操作的 IEBGENER 控制陳述式,以擴展基本的複製功能。

Parameters

無引數。操作會透過 SYSIN 資料集傳遞。

必要的資料集

  • SYSIN:包含控制陳述式 (選用,如果未定義,則 IEBGENER 程式與 ICEGENER 相同)

  • SYSUT1:輸入資料集/檔案

  • SYSUT2:輸出資料集/檔案

主要功能/支援的 IEBGENER 控制陳述式

此處不提供 SYSIN 控制卡中 IEBGENER 控制陳述式的詳細資訊,但應從現有的相關舊版平台文件中擷取。

  • GENERATE - 透過指定要處理的記錄類型 (MAXNAME) 和欄位 (MAXFLDS) 數目上限,定義資料處理程序的整體結構

  • 記錄 - 透過指定將從輸入資料集複製或以特定值產生之個別欄位的位置、長度和格式,定義每個記錄類型的實際配置和內容

  • 不支援 LABEL/MEMBER/EXIT

範例:

GENERATE MAXNAME=3,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name */ FIELD=(12,8,CH), /* Birth date */ FIELD=(20,8,CH,VALUE='ACTIVE') RECORD TYPE=3, FIELD=(1,1,CH,VALUE='F'), FIELD=(2,30,CH,VALUE='END OF REPORT ')

錯誤處理

如果複製成功,請設定錯誤代碼 0;如果失敗,請設定 1。

範例用量

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEBGENER 程式的 Groovy 範例用量:

JCL 程式碼:

//GENDATA EXEC PGM=IEBGENER //SYSUT1 DD DSN=INPUT.EMPLOYEE.DATA, // DISP=SHR //SYSUT2 DD DSN=OUTPUT.EMPLOYEE.FILE, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920) //SYSIN DD * GENERATE MAXNAME=2,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name from input */ FIELD=(12,8,CH), /* Birth date from input */ FIELD=(20,8,CH), /* Dept from input */ FIELD=(28,8,CH) /* Salary from input */ /*

和相符的 Groovy 現代化:

mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .systemOut("SYSPRINT") .output("*") .build() .bluesam("SYSUT1") .dataset("INPUT.EMPLOYEE.DATA") .disposition("SHR") .build() .bluesam("SYSUT2") .dataset("OUTPUT.EMPLOYEE.FILE") .disposition("NEW") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .fileSystem("SYSIN") .stream( """GENERATE MAXNAME=2,MAXFLDS=5 RECORD TYPE=1, FIELD=(1,1,CH,VALUE='H'), FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024 ') RECORD TYPE=2, FIELD=(1,1,CH,VALUE='D'), FIELD=(2,10,CH), /* Name from input */ FIELD=(12,8,CH), /* Birth date from input */ FIELD=(20,8,CH), /* Dept from input */ FIELD=(28,8,CH) /* Salary from input */""", getEncoding()) .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEBGENER")

IEFBR14

IEFBR14 是一種「什麼都不做」程式,只需傳回傳回的傳回碼為 0 (零)。其主要用途是透過 DD 陳述式進行資料集配置、刪除或目錄維護,而無需執行任何實際的資料處理。

Parameters

無引數

錯誤處理

一律設定錯誤代碼 0。

範例用量

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEFBR14 程式的 Groovy 範例用量:

用來建立新的循序資料集的 JCL 程式碼:

//STEP1 EXEC PGM=IEFBR14 //NEWSEQ DD DSN=USER.NEW.SEQ.DATA, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(10,5)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)

和相符的 Groovy 現代化:

mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("NEWSEQ") .dataset("USER.NEW.SEQ.DATA") .disposition("NEW") .normalTermination("CATLG") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEFBR14")

刪除現有資料集的 JCL 程式碼:

//STEP3 EXEC PGM=IEFBR14 //DELDD DD DSN=USER.OLD.DATASET, // DISP=(OLD,DELETE,DELETE)

和相符的 Groovy 現代化:

mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .bluesam("DELDD") .dataset("USER.OLD.DATASET") .disposition("OLD") .normalTermination("DELETE") .abnormalTermination("DELETE") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IEFBR14")

JCLBCICS

此程式會管理資料集狀態,並根據組態啟用/停用資料集,同時支援個別檔案和萬用字元模式:它會變更 JICS 資料表 file_table 中的 STATUS 欄位。

Parameters

無引數。操作會透過DatasetsConfiguration物件傳遞,例如

mpr.withDatasetsConfiguration(new DatasetsConfiguration().close(<Dataset Name>)

Context

程式行為可由兩個參數設定:

application-utility-pgm.yml 中:

  • jclbcics.ddname.size (預設值為 8):它會全域設定資料集名稱大小;如果設定此值且資料集名稱長度小於此值,則會截斷資料集名稱。

在呼叫程式的 Groovy 檔案的個別步驟中

  • JCLBCICS_OVERRIDDEN_SIZE:它會覆寫全域資料集名稱大小:

TreeMap stepMapTransfo = [:] Map stepParams = ["MapTransfo":stepMapTransfo] stepParams["MapTransfo"]["JCLBCICS_OVERRIDDEN_SIZE"] = '6'

如果調整後的 dd 名稱大小 (截斷後) 小於 8,則 dd 名稱會被視為萬用字元,且函數會針對以此 dd 名稱開頭的所有資料集運作。

主要功能

支援的操作包括:

  • OPEN:將資料集設定為 ENABLED 狀態

  • CLOSE:將資料集設定為 DISABLED 狀態

這些操作會透過DatasetsConfiguration建置器類別宣告:

new DatasetsConfiguration().close(<DD name>).open(<DD name>)

DD 名稱:資料集的名稱,如果 dd 名稱大小小於 dd 名稱大小上限 (8),則會接受萬用字元 *。

錯誤處理

設定錯誤代碼 0

範例用量

以下是 JCLBCICS 計劃的 Groovy 範例用量:

它會停用資料集 UFOLJ3P,啟用以 AX 開頭的所有資料集,啟用以 DX 開頭的所有資料集

import com.netfective.bluage.gapwalk.rt.call.MainProgramRunner import com.netfective.bluage.gapwalk.rt.call.ProgramExecutionResult import com.netfective.bluage.gapwalk.rt.io.support.DatasetsConfiguration MainProgramRunner mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class) def TreeMap stepMapTransfo = [:] def Map stepParams = ['MapTransfo':stepMapTransfo] stepParams['MapTransfo']['JCLBCICS_OVERRIDDEN_SIZE'] = '7' ProgramExecutionResult res = mpr .withDatasetsConfiguration(new DatasetsConfiguration().close("UFOLJ3P").open("AX*").open("DX")) .withParameters(stepParams) .runProgram("JCLBCICS")