

AWS Layanan Modernisasi Mainframe (Managed Runtime Environment experience) tidak lagi terbuka untuk pelanggan baru. Untuk kemampuan yang mirip dengan Layanan Modernisasi AWS Mainframe (pengalaman Lingkungan Runtime Terkelola), jelajahi Layanan Modernisasi AWS Mainframe (Pengalaman yang Dikelola Sendiri). Pelanggan yang sudah ada dapat terus menggunakan layanan ini seperti biasa. Untuk informasi selengkapnya, lihat Perubahan [AWS ketersediaan Modernisasi Mainframe](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Utilitas Database
<a name="system-database-utilities"></a>

Bagian ini adalah tentang utilitas terkait database. Pada platform lama, program ini biasanya beroperasi pada DB2 database, sedangkan database alternatif dipilih (AWS Aurora menjadi pilihan populer) di lingkungan modern.

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

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

Utilitas DNSTEP mengeksekusi kueri SQL dari kumpulan data input dan menulis hasil ke kumpulan data keluaran. Ini secara otomatis menulis ulang kueri SQL lama untuk database target yang dimodernisasi (di luar DB2) dan mendukung beberapa jenis `SYSIN` kumpulan data: aliran, kumpulan data Blusam, file datar, generasi GDG, dan rangkaian kumpulan data.

### DSNTEP2/DSNTEP4 Tanda tangan
<a name="dsntep2-signature"></a>

Utilitas tidak mengambil argumen dan menggunakan dua kumpulan data:
+ `SYSIN`: Masukan dataset yang berisi pernyataan SQL
+ `SYSPRINT`: Output dataset untuk hasil kueri (hanya `SELECT` kueri)

### DSNTEP2/parameter konfigurasi DSNTEP4 terkait
<a name="dsntep2-configuration"></a>

Perilaku utilitas dipengaruhi oleh parameter konfigurasi berikut:
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

Silakan lihat [Properti yang tersedia untuk aplikasi web opsional](ba-runtime-key-value.md#ba-runtime-key-value-web) untuk detail tentang mengkonfigurasi parameter ini.

### DSNTEP2/DSNTEP4 Cek/Penanganan kesalahan
<a name="dsntep2-error-handling"></a>
+ Jika, karena alasan apa pun, pengecualian terjadi selama kueri dijalankan, pesan kesalahan akan dicatat dan `StopRunUnitException` akan dilemparkan, yang menyebabkan menghentikan unit run saat ini.
+ Jika `SYSIN` adalah gabungan dari berbagai kumpulan data dan salah satu kumpulan data tidak didukung, a akan dilemparkan. `RuntimeException` Saat ini, hanya file datar dan jenis generasi GDG yang didukung sebagai bagian dari file gabungan, bila digunakan sebagai input dengan/4. DSNTEP2

### DSNTEP2/Penggunaan DSNTEP4 sampel
<a name="dsntep2-sample-usages"></a>

Berikut adalah contoh penggunaan JCL dari DNSTEP4:

```
//********************************************************************
//* 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;
```

dan cuplikan skrip groovy modern yang cocok:

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

Harap dicatat bahwa kueri SQL disediakan “apa adanya” ke utilitas DSNTEP2 /4, tanpa modifikasi apa pun.

## DSNUTILB
<a name="dsnutilb"></a>

### Tujuan DSNUTILB
<a name="dsnutilb-purpose"></a>

Utilitas database untuk memuat, menyalin, dan mengelola data. Biasanya beroperasi pada DB2 database lama; versi modern mendukung AWS Aurora dan database target lainnya.

### Tanda Tangan DSNUTILB
<a name="dsnutilb-signature"></a>

Secara alami, DSNUTILB lebih dimaksudkan untuk dipanggil oleh skrip pekerjaan modern.

Tidak membutuhkan argumen; membaca perintah dari `SYSIN` dataset.

Perintah yang didukung adalah:
+ `TEMPLATE`(alokasi dinamis kumpulan data)
+ `LISTDEF`(kelompokkan objek database ke dalam daftar, dapat digunakan oleh perintah lain)
+ `COPY`(membuat salinan objek database)
+ `LOAD`(memuat catatan ke dalam tabel)
+ `DISCARD`(hapus catatan dari tabel)

Untuk detail tambahan tentang perintah, silakan lihat dokumentasi warisan yang tepat terkait.

### DSNUTILB parameter konfigurasi terkait
<a name="dsnutilb-configuration"></a>

Perilaku utilitas dipengaruhi oleh parameter konfigurasi berikut:
+ `unload.useDatabaseConfiguration`
+ `load.format.localDate`
+ `load.format.dbDate`
+ `load.format.localTime`
+ `load.format.dbTime`
+ `load.sqlCodePointShift`
+ `convertGraphicDataToFullWidth`

Silakan lihat [Properti yang tersedia untuk aplikasi web opsional](ba-runtime-key-value.md#ba-runtime-key-value-web) untuk detail tentang mengkonfigurasi parameter ini.

### DSNUTILB Cek/Penanganan kesalahan
<a name="dsnutilb-error-handling"></a>
+ Jika `SYSIN` dataset tidak berisi perintah yang dapat digunakan, a `RuntimeException` akan dilemparkan.
+ Jika ada pengecualian yang terjadi selama operasi database, pesan kesalahan akan dicatat, kode pengembalian akan diatur ke 8 dan `StopRunUnitException` akan dilemparkan (menghentikan unit run saat ini).

### DSNUTILB Penggunaan Sampel
<a name="dsnutilb-sample-usages"></a>

Berikut adalah contoh penggunaan DSNUTILB dalam skrip JCL:

```
//********************************************************************
//* 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
```

dengan konten kartu perintah (dsn01.card) - digunakan untuk memuat data ke dalam database, dari file datar yang diekspor dari platform lama --:

```
  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)
 )
```

dan cuplikan skrip modern asyik yang cocok:

```
// 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>

### Tujuan INFUTILB
<a name="infutilb-purpose"></a>

INFUTILB/INZUTILB adalah program utilitas yang digunakan untuk mengekstrak data dari database - bongkar - (DB2 pada lingkungan lama) dan mengubahnya menjadi berbagai format output.

Kueri SQL lama secara otomatis disesuaikan on-the-fly agar sesuai dengan persyaratan basis data target modern (mesin yang didukung: PostgreSQL, Oracle dan). DB2

### Tanda Tangan INFUTILB/INZUTILB
<a name="infutilb-signature"></a>

Alias program berikut dapat digunakan (dan cocok dengan nama utilitas sortir warisan yang sesuai):
+ `INFUTILB`
+ `INZUTILB`

Utilitas tidak mengambil argumen apa pun tetapi membaca perintah untuk dijalankan dari `SYSIN` dataset (“kartu kontrol”). Catatan yang diekstraksi dari database ditulis ke `SYSREC` dataset dan `SYSPUNCH` dataset opsional digunakan untuk menyimpan kartu kontrol yang dapat digunakan untuk memuat ulang data (menggunakan utilitas lain, seperti [DSNUTILB](#dsnutilb) misalnya).

Secara alami, INFUTILB/INZUTILB sebagian besar dimaksudkan untuk dipanggil oleh skrip pekerjaan modern.

Untuk mendapatkan detail tentang perintah yang didukung, silakan merujuk ke dokumentasi warisan yang tepat. INFUTILB/INZUTILB Mereka menggunakan kumpulan data “kartu kontrol” lama “apa adanya”.

### Parameter konfigurasi terkait INFUTILB/INZUTILB
<a name="infutilb-configuration"></a>

Perilaku utilitas dipengaruhi oleh parameter konfigurasi berikut:
+ `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`

Silakan lihat [Properti yang tersedia untuk aplikasi web opsional](ba-runtime-key-value.md#ba-runtime-key-value-web) untuk detail tentang mengkonfigurasi parameter ini.

### INFUTILB/INZUTILB Cek/Penanganan kesalahan
<a name="infutilb-error-handling"></a>
+ Jika database target bukan bagian dari mesin database yang didukung (PostgreSQL, Oracle DB2 dan), kode pengembalian program akan diatur ke 8 dan akan dilemparkan. `UnsupportedOperationException`
+ Jika program gagal menghapus file sementara, kode pengembalian akan diatur ke 4, pesan kesalahan akan dicatat, tetapi program yang dijalankan tidak akan terganggu.
+ Untuk semua kasus berikut, kode pengembalian program akan diatur ke 4 atau 8, dan `AbendException` akan dilemparkan (menghentikan program yang dijalankan):
  + Jika `SYSREC` kumpulan data bukan salah satu jenis yang didukung (baik kumpulan data berbasis sistem GDG atau File); kembalikan kode 4;
  + Jika `SYSPUNCH` kumpulan data bukan salah satu jenis yang didukung (baik GDG atau kumpulan data berbasis sistem File atau`DUMMY`); kode kembalikan 4;
  + Jika program tidak dapat mengambil ukuran catatan `SYSREC` dataset (tidak ditetapkan atau tidak ditentukan dalam katalog dataset); kode kembalikan 8;
  + Jika program tidak dapat mengambil ukuran catatan `SYSPUNCH` dataset (tidak ditetapkan atau tidak ditentukan dalam katalog dataset); kode kembalikan 8;
  + Jika kueri yang digunakan untuk membuat konten `SYSREC` kumpulan data tidak valid (kueri yang salah akan dicatat); kode kembalikan 4;
  + Jika ada pengecualian yang terjadi saat mengambil data dari database; mengembalikan kode 8;
  + Jika `OUTDDN` perintah tidak ada dalam `SYSIN` dataset, untuk tugas pembongkaran; kembalikan kode 8;
  + Jika tidak ada perintah yang valid dapat ditemukan di `SYSIN` dataset; mengembalikan kode 8;

### INFUTILB/INZUTILB Contoh penggunaan
<a name="infutilb-sample-usages"></a>

Berikut adalah contoh cuplikan skrip jcl warisan:

```
//********************************************************************
//* 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
```

yang menggunakan kartu perintah berikut (inf12.card) untuk membongkar beberapa data dari database (di sini, catatan dipilih berdasarkan tanggalnya):

```
  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
```

dan cuplikan skrip groovy yang cocok, hasil modernisasi jcl otomatis:

```
// 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>

### Tujuan JXHDBCLR
<a name="jxhdbclr-purpose"></a>

JXHDBCLR adalah program utilitas pembersihan basis data, ditemukan pada GS21 platform, yang memotong tabel sesuai dengan pernyataan spesifik yang disediakan yang ditemukan dalam kartu perintah.

### Tanda Tangan JXHDBCLR
<a name="jxhdbclr-signature"></a>

Itu tidak mengambil argumen apa pun tetapi membaca pernyataan dari `SYSIN` dataset (kartu perintah).

Karena sifatnya, sebagian besar dimaksudkan untuk dipanggil oleh skrip pekerjaan modern.

### Parameter konfigurasi terkait JXHDBCLR
<a name="jxhdbclr-configuration"></a>

Perilaku utilitas dipengaruhi oleh parameter konfigurasi berikut:
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

Silakan lihat [Properti yang tersedia untuk aplikasi web opsional](ba-runtime-key-value.md#ba-runtime-key-value-web) untuk detail tentang mengkonfigurasi parameter ini.

### Cek JXHDBCLR/Penanganan kesalahan
<a name="jxhdbclr-error-handling"></a>

Jika tidak tabel untuk dipotong dapat ditemukan, pesan peringatan akan dicatat, tetapi program yang dijalankan tidak akan terganggu.

Jika beberapa kegagalan terjadi selama pemotongan tabel, kode pengembalian program akan diatur ke 4, pesan kesalahan akan dicatat, tetapi program yang dijalankan tidak akan terganggu.

Untuk salah satu kondisi berikut, kode pengembalian program akan diatur ke 8 dan `AbendException` akan dilemparkan (menghentikan program yang dijalankan):
+ Jika konten kartu perintah kosong;
+ jika ada pengecualian yang terjadi selama penguraian pemrosesan perintah;

### JXHDBCLR Penggunaan Sampel
<a name="jxhdbclr-sample-usages"></a>

Contoh penggunaan JXHDBCLR dengan kartu perintah sebaris:

```
//*******************************************************************
//**  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
```

dan cuplikan skrip groovy modern yang cocok:

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

Kartu sebaris dari warisan disimpan “apa adanya”, menggunakan aliran.