

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

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

# データベースユーティリティ
<a name="system-database-utilities"></a>

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

## DSNTEP2/DSNTEP4
<a name="dsntep2-dsntep4"></a>

### DSNTEP2/DSNTEP4 の目的
<a name="dsntep2-purpose"></a>

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

### DSNTEP2/DSNTEP4 署名
<a name="dsntep2-signature"></a>

ユーティリティは引数を取らず、次の 2 つのデータセットを使用します。
+ `SYSIN`: SQL ステートメントを含む入力データセット
+ `SYSPRINT`: クエリ結果の出力データセット (`SELECT` クエリのみ)

### DSNTEP2/DSNTEP4 関連の設定パラメータ
<a name="dsntep2-configuration"></a>

ユーティリティの動作は、次の設定パラメータの影響を受けます。
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

これらのパラメータの設定の詳細については、[オプションのウェブアプリケーションで使用可能なプロパティ](ba-runtime-key-value.md#ba-runtime-key-value-web)「」を参照してください。

### DSNTEP2/DSNTEP4 チェック/エラー処理
<a name="dsntep2-error-handling"></a>
+ 何らかの理由でクエリの実行中に例外が発生した場合、エラーメッセージが記録され、 `StopRunUnitException`がスローされ、現在の実行ユニットが停止します。
+ `SYSIN` がさまざまなデータセットの連結であり、いずれかのデータセットがサポートされていない場合、 `RuntimeException` がスローされます。現在、DSNTEP2/4 で入力として使用する場合、フラットファイルと GDG 世代タイプのみが連結ファイルの一部としてサポートされています。

### DSNTEP2/DSNTEP4 サンプルの使用
<a name="dsntep2-sample-usages"></a>

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
<a name="dsnutilb"></a>

### DSNUTILB の目的
<a name="dsnutilb-purpose"></a>

データをロード、コピー、管理するためのデータベースユーティリティ。通常、 はレガシー DB2 データベースで動作します。モダナイズバージョンは AWS Aurora およびその他のターゲットデータベースをサポートします。

### DSNUTILB 署名
<a name="dsnutilb-signature"></a>

本質的に、DSNUTILB はモダナイズされたジョブスクリプトによって呼び出されることを意図しています。

引数を取りません。`SYSIN`データセットからコマンドを読み取ります。

サポートされているコマンドは次のとおりです。
+ `TEMPLATE` (データセットの動的割り当て)
+ `LISTDEF` (データベースオブジェクトをリストにグループ化し、他のコマンドで使用可能)
+ `COPY` (データベースオブジェクトのコピーを作成する)
+ `LOAD` (テーブルにレコードをロードする)
+ `DISCARD` (テーブルからレコードを削除する)

コマンドの詳細については、関連する適切なレガシードキュメントを参照してください。

### DSNUTILB 関連の設定パラメータ
<a name="dsnutilb-configuration"></a>

ユーティリティの動作は、次の設定パラメータの影響を受けます。
+ `unload.useDatabaseConfiguration`
+ `load.format.localDate`
+ `load.format.dbDate`
+ `load.format.localTime`
+ `load.format.dbTime`
+ `load.sqlCodePointShift`
+ `convertGraphicDataToFullWidth`

これらのパラメータの設定の詳細については、[オプションのウェブアプリケーションで使用可能なプロパティ](ba-runtime-key-value.md#ba-runtime-key-value-web)「」を参照してください。

### DSNUTILB チェック/エラー処理
<a name="dsnutilb-error-handling"></a>
+ `SYSIN` データセットに使用可能なコマンドが含まれていない場合、 `RuntimeException` がスローされます。
+ データベースオペレーション中に例外が発生した場合、エラーメッセージが記録され、リターンコードが 8 に設定され、 `StopRunUnitException`がスローされます (現在の実行ユニットが停止されます）。

### DSNUTILB サンプルの使用
<a name="dsnutilb-sample-usages"></a>

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
<a name="infutilb-inzutilb"></a>

### INFUTILB の目的
<a name="infutilb-purpose"></a>

INFUTILB/INZUTILB は、データベース -- アンロード -- (レガシー環境の DB2) からデータを抽出し、さまざまな出力形式に変換するために使用されるユーティリティプログラムです。

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

### INFUTILB / INZUTILB 署名
<a name="infutilb-signature"></a>

次のプログラムエイリアスを使用できます (対応するレガシーソートユーティリティ名と一致します）。
+ `INFUTILB`
+ `INZUTILB`

ユーティリティは引数を取りませんが、`SYSIN`データセット (「コントロールカード」) から実行するコマンドを読み取ります。データベースから抽出されたレコードは`SYSREC`データセットに書き込まれ、オプションの`SYSPUNCH`データセットを使用して、データの再ロードに使用できるコントロールカードが保存されます ([DSNUTILB](#dsnutilb)たとえば、他のユーティリティを使用）。

本質的に、INFUTILB/INZUTILB は、主にモダナイズされたジョブスクリプトによって呼び出されることを意図しています。

サポートされているコマンドの詳細については、適切なレガシードキュメントを参照してください。INFUTILB/INZUTILB は、従来の「コントロールカード」データセットを「現状有姿」で使用しています。

### INFUTILB / INZUTILB 関連の設定パラメータ
<a name="infutilb-configuration"></a>

ユーティリティの動作は、次の設定パラメータの影響を受けます。
+ `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`

これらのパラメータの設定の詳細については、[オプションのウェブアプリケーションで使用可能なプロパティ](ba-runtime-key-value.md#ba-runtime-key-value-web)「」を参照してください。

### INFUTILB/INZUTILB チェック/エラー処理
<a name="infutilb-error-handling"></a>
+ ターゲットデータベースがサポートされているデータベースエンジン (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 を返します。
  + コマンド`OUTDDN`が`SYSIN`データセットにない場合、アンロードタスクの場合、コード 8 を返します。
  + `SYSIN` データセットに有効なコマンドが見つからない場合は、コード 8 を返します。

### INFUTILB / INZUTILB サンプルの使用
<a name="infutilb-sample-usages"></a>

レガシー 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
<a name="jxhdbclr"></a>

### JXHDBCLR の目的
<a name="jxhdbclr-purpose"></a>

JXHDBCLR は、GS21 プラットフォームにあるデータベースクリアユーティリティプログラムであり、コマンドカードで見つかった特定のステートメントに従ってテーブルを切り捨てます。

### JXHDBCLR 署名
<a name="jxhdbclr-signature"></a>

引数は取得されませんが、`SYSIN`データセット (コマンドカード) からステートメントを読み取ります。

その性質上、モダナイズされたジョブスクリプトによって呼び出されることがほとんどです。

### JXHDBCLR 関連の設定パラメータ
<a name="jxhdbclr-configuration"></a>

ユーティリティの動作は、次の設定パラメータの影響を受けます。
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

これらのパラメータの設定の詳細については、[オプションのウェブアプリケーションで使用可能なプロパティ](ba-runtime-key-value.md#ba-runtime-key-value-web)「」を参照してください。

### JXHDBCLR チェック/エラー処理
<a name="jxhdbclr-error-handling"></a>

切り捨てるテーブルが見つからない場合、警告メッセージがログに記録されますが、プログラムの実行は中断されません。

テーブルの切り捨て中に一部の障害が発生した場合、プログラムのリターンコードは 4 に設定され、エラーメッセージがログに記録されますが、プログラムの実行は中断されません。

次のいずれかの条件では、プログラムのリターンコードは 8 に設定され、 `AbendException`がスローされます (プログラムの実行が停止します）。
+ コマンドカードのコンテンツが空の場合。
+ コマンドの処理の解析中に例外が発生した場合。

### JXHDBCLR サンプルの使用
<a name="jxhdbclr-sample-usages"></a>

インラインコマンドカードを使用した 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")
                })
        }
    }
}
```

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