Utilitas Database - AWS Modernisasi Mainframe

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.

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

Utilitas Database

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

DSNTEP2/DSNTEP4 Tujuan

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

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

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 untuk detail tentang mengkonfigurasi parameter ini.

DSNTEP2/DSNTEP4 Cek/Penanganan kesalahan

  • 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

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

Tujuan DSNUTILB

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

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

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 untuk detail tentang mengkonfigurasi parameter ini.

DSNUTILB Cek/Penanganan kesalahan

  • 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

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

Tujuan INFUTILB

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

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

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 untuk detail tentang mengkonfigurasi parameter ini.

INFUTILB/INZUTILB Cek/Penanganan kesalahan

  • 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 atauDUMMY); 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

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

Tujuan JXHDBCLR

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

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

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 untuk detail tentang mengkonfigurasi parameter ini.

Cek JXHDBCLR/Penanganan kesalahan

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

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.