データベースユーティリティ - AWS Mainframe Modernization

AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization Service (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、AWS 「 Mainframe Modernization の可用性の変更」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データベースユーティリティ

このセクションでは、データベース関連のユーティリティについて説明します。レガシープラットフォームでは、これらのプログラムは通常 DB2 データベースで動作しますが、最新の環境では代替データベースが選択されます (AWS Aurora が一般的な選択肢です)。

DSNTEP2/DSNTEP4

DSNTEP2/DSNTEP4 の目的

DNSTEP ユーティリティは、入力データセットから SQL クエリを実行し、結果を出力データセットに書き込みます。モダナイズされたターゲットデータベース (DB2 以外) のレガシー SQL クエリを自動的に書き換え、ストリーム、Blusam SYSINデータセット、フラットファイル、GDG 生成、データセット連結の複数のデータセットタイプをサポートします。

DSNTEP2/DSNTEP4 署名

ユーティリティは引数を取らず、次の 2 つのデータセットを使用します。

  • 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

これらのパラメータの設定の詳細については、オプションのウェブアプリケーションで使用可能なプロパティ「」を参照してください。

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

これらのパラメータの設定の詳細については、オプションのウェブアプリケーションで使用可能なプロパティ「」を参照してください。

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 クエリは、最新のターゲットデータベース要件 (サポートされているエンジン: PostgreSQL、Oracle、DB2) に合わせてon-the-fly自動的に適応されています。

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

これらのパラメータの設定の詳細については、オプションのウェブアプリケーションで使用可能なプロパティ「」を参照してください。

INFUTILB/INZUTILB チェック/エラー処理

  • ターゲットデータベースがサポートされているデータベースエンジン (PostgreSQL、Oracle、DB2) の一部でない場合、プログラムのリターンコードは 8 に設定され、 UnsupportedOperationExceptionがスローされます。

  • プログラムが一時ファイルの削除に失敗した場合、リターンコードは 4 に設定され、エラーメッセージがログに記録されますが、プログラムの実行は中断されません。

  • 次のすべての場合、プログラムのリターンコードは 4 または 8 に設定され、 AbendExceptionがスローされます (プログラムの実行が停止します)。

    • SYSREC データセットがサポートされている種類の 1 つでない場合 (GDG またはファイルシステムベースのデータセット)、コード 4 を返します。

    • SYSPUNCH データセットがサポートされている種類の 1 つでない場合 (GDG またはファイルシステムベースのデータセットまたは DUMMY)、コード 4 を返します。

    • プログラムがSYSRECデータセットレコードサイズを取得できない場合 (データセットカタログで設定または定義されていない場合)、コード 8 を返します。

    • プログラムがSYSPUNCHデータセットレコードサイズを取得できない場合 (データセットカタログで設定または定義されていない場合)、コード 8 を返します。

    • SYSREC データセットコンテンツの作成に使用したクエリが有効でない場合 (障害のあるクエリがログに記録されます)、コード 4 を返します。

    • データベースからのデータの取得中に例外が発生した場合は、コード 8 を返します。

    • コマンドOUTDDNSYSINデータセットにない場合、アンロードタスクの場合、コード 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

これらのパラメータの設定の詳細については、オプションのウェブアプリケーションで使用可能なプロパティ「」を参照してください。

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

レガシーのインラインカードは、ストリームを使用して「そのまま」に保持されます。