JCL - Panduan Cepat
Kapan menggunakan JCL
JCL digunakan dalam lingkungan mainframe untuk bertindak sebagai komunikasi antara program (Contoh: COBOL, Assembler atau PL / I) dan sistem operasi. Dalam lingkungan mainframe, program dapat dijalankan dalam mode batch dan online. Contoh sistem batch dapat memproses transaksi bank melalui file VSAM (Metode Akses Penyimpanan Virtual) dan menerapkannya ke akun yang sesuai. Contoh sistem online dapat berupa layar back office yang digunakan oleh staf di bank untuk membuka rekening. Dalam mode batch, program dikirimkan ke sistem operasi sebagai pekerjaan melalui JCL.
Pemrosesan batch dan Online berbeda dalam aspek input, output, dan permintaan eksekusi program. Dalam pemrosesan batch, aspek-aspek ini dimasukkan ke dalam JCL yang kemudian diterima oleh Sistem Operasi.
Pemrosesan Pekerjaan
Pekerjaan adalah unit kerja yang dapat terdiri dari banyak langkah pekerjaan. Setiap langkah pekerjaan ditentukan dalam Bahasa Kontrol Pekerjaan (JCL) melalui serangkaian Pernyataan Kontrol Pekerjaan.
Sistem Operasi menggunakan Job Entry System (JES) untuk menerima pekerjaan ke dalam Sistem Operasi, untuk menjadwalkannya untuk diproses dan untuk mengontrol keluaran.
Pemrosesan pekerjaan melalui serangkaian langkah seperti berikut:
Job Submission - Mengirimkan JCL ke JES.
Job Conversion - JCL bersama dengan PROC diubah menjadi teks yang ditafsirkan untuk dipahami oleh JES dan disimpan ke dalam kumpulan data, yang kami sebut sebagai SPOOL.
Job Queuing -JES memutuskan prioritas pekerjaan berdasarkan parameter CLASS dan PRTY dalam pernyataan JOB (dijelaskan di bab Pernyataan JCL - JOB ). Kesalahan JCL diperiksa dan pekerjaan dijadwalkan ke dalam antrian pekerjaan jika tidak ada kesalahan.
Job Execution -Saat pekerjaan mencapai prioritas tertingginya, itu diambil untuk eksekusi dari antrian pekerjaan. JCL dibaca dari SPOOL, program dijalankan dan output diarahkan ke tujuan output yang sesuai seperti yang ditentukan dalam JCL.
Purging -Ketika pekerjaan selesai, sumber daya yang dialokasikan dan ruang JES SPOOL dilepaskan. Untuk menyimpan log pekerjaan, kita perlu menyalin log pekerjaan ke kumpulan data lain sebelum dirilis dari SPOOL.
Menginstal JCL di Windows / Linux
Ada banyak Emulator Mainframe Gratis yang tersedia untuk Windows yang dapat digunakan untuk menulis dan mempelajari JCL sampel.
Salah satu emulator tersebut adalah Hercules, yang dapat dengan mudah diinstal di Windows dengan mengikuti beberapa langkah sederhana berikut ini:
Unduh dan instal emulator Hercules, yang tersedia dari situs beranda Hercules -: www.hercules-390.eu
Setelah Anda menginstal paket pada mesin Windows, itu akan membuat folder seperti C:\Mainframes.
Jalankan Command Prompt (CMD) dan buka direktori C: \ Mainframes di CMD.
Panduan lengkap tentang berbagai perintah untuk menulis dan menjalankan JCL dapat ditemukan di URL www.jaymoseley.com/hercules/installmvs/instmvs2.htm
Hercules adalah implementasi perangkat lunak sumber terbuka dari arsitektur Sistem mainframe / 370 dan ESA / 390, selain dari 64-bit z / Arsitektur terbaru. Hercules berjalan di Linux, Windows, Solaris, FreeBSD, dan Mac OS X.
Menjalankan JCL di Mainframes
Seorang pengguna dapat terhubung ke server mainframe dengan beberapa cara seperti thin client, dummy terminal, Virtual Client System (VCS) atau Virtual Desktop System (VDS).
Setiap pengguna yang valid diberikan ID login untuk masuk ke antarmuka Z / OS (TSO / E atau ISPF). Di antarmuka Z / OS, JCL dapat dikodekan dan disimpan sebagai anggota dalam Partitioned Dataset (PDS). Ketika JCL diajukan, itu dijalankan dan output diterima seperti yang dijelaskan di bagian pemrosesan pekerjaan pada bab sebelumnya.
Struktur JCL
Struktur dasar JCL dengan pernyataan umum diberikan di bawah ini:
//SAMPJCL JOB 1,CLASS=6,MSGCLASS=0,NOTIFY=&SYSUID (1)
//* (2)
//STEP010 EXEC PGM=SORT (3)
//SORTIN DD DSN=JCL.SAMPLE.INPUT,DISP=SHR (4)
//SORTOUT DD DSN=JCL.SAMPLE.OUTPUT, (5)
// DISP=(NEW,CATLG,CATLG),DATACLAS=DSIZE50
//SYSOUT DD SYSOUT=* (6)
//SYSUDUMP DD SYSOUT=C (6)
//SYSPRINT DD SYSOUT=* (6)
//SYSIN DD * (6)
SORT FIELDS=COPY
INCLUDE COND=(28,3,CH,EQ,C'XXX')
/* (7)
Deskripsi Program
Pernyataan JCL bernomor telah dijelaskan di bawah ini:
(1) JOB statement - Menentukan informasi yang diperlukan untuk SPOOLing pekerjaan seperti id pekerjaan, prioritas eksekusi, id pengguna untuk diberitahu setelah menyelesaikan pekerjaan.
(2) //* statement - Ini adalah pernyataan komentar.
(3) EXEC statement- Menentukan PROC / Program yang akan dijalankan. Dalam contoh di atas, program SORT sedang dijalankan (yaitu, menyortir data input dalam urutan tertentu)
(4) Input DD statement- Menentukan jenis input yang akan diteruskan ke program yang disebutkan di (3). Dalam contoh di atas, file Physical Sequential (PS) dikirimkan sebagai input dalam mode bersama (DISP = SHR).
(5) Output DD statement- Menentukan jenis keluaran yang akan diproduksi oleh program pada saat eksekusi. Dalam contoh di atas, file PS dibuat. Jika pernyataan melampaui posisi ke-70 dalam satu baris, maka pernyataan itu dilanjutkan di baris berikutnya, yang harus dimulai dengan "//" diikuti dengan satu atau beberapa spasi.
(6)Ada jenis pernyataan DD lainnya untuk menentukan informasi tambahan untuk program (Dalam contoh di atas: Kondisi SORT ditentukan dalam pernyataan SYSIN DD) dan untuk menentukan tujuan untuk log kesalahan / eksekusi (Contoh: SYSUDUMP / SYSPRINT). Pernyataan DD dapat dimuat dalam kumpulan data (file mainframe) atau seperti data aliran (informasi yang di-hardcode dalam JCL) seperti yang diberikan dalam contoh di atas.
(7) /* menandai akhir dari data aliran.
Semua pernyataan JCL kecuali data dalam aliran dimulai dengan //. Harus ada setidaknya satu spasi sebelum dan sesudah kata kunci JOB, EXEC dan DD dan tidak boleh ada spasi di sisa pernyataan.
Jenis Parameter JOB
Setiap pernyataan JCL disertai dengan seperangkat parameter untuk membantu Sistem Operasi dalam menyelesaikan eksekusi program. Parameternya bisa dari dua jenis:
Parameter Posisi
Muncul pada posisi dan urutan yang telah ditentukan dalam pernyataan. Contoh: Parameter informasi akuntansi hanya dapat muncul setelahJOBkata kunci dan sebelum parameter nama programmer dan Parameter Kata Kunci. Jika parameter posisi dihilangkan, itu harus diganti dengan koma.
Parameter Posisi ada dalam pernyataan JOB dan EXEC. Dalam contoh di atas, PGM adalah parameter posisi yang dikodekan setelahEXEC kata kunci.
Parameter Kata Kunci
Mereka diberi kode setelah parameter posisi, tetapi dapat muncul dalam urutan apa pun. Parameter kata kunci dapat dihilangkan jika tidak diperlukan. Sintaks umum adalah KEYWORD = nilai . Contoh: MSGCLASS = X, yaitu log pekerjaan diarahkan ke output SPOOL setelah pekerjaan selesai.
Dalam contoh di atas, CLASS, MSGCLASS dan NOTIFY adalah parameter kata kunci dari pernyataan JOB. Ada juga parameter kata kunci dalam pernyataan EXEC.
Parameter ini telah dirinci pada bab-bab selanjutnya bersama dengan contoh yang sesuai.
Pernyataan JOB adalah pernyataan kontrol pertama dalam JCL. Ini memberikan identitas pekerjaan ke Sistem Operasi (OS), di spool dan di penjadwal. Parameter dalam pernyataan JOB membantu Sistem Operasi dalam mengalokasikan penjadwal yang tepat, waktu CPU yang dibutuhkan dan mengeluarkan pemberitahuan kepada pengguna.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan JCL JOB:
//Job-name JOB Positional-param, Keyword-param
Deskripsi
Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan JOB di atas.
Nama Pekerjaan
Ini memberikan id untuk pekerjaan saat mengirimkannya ke OS. Panjangnya bisa 1 sampai 8 dengan karakter alfanumerik dan dimulai tepat setelah //.
PEKERJAAN
Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan JOB.
Posisi-param
Ada parameter posisi, yang bisa dari dua jenis:
Parameter Posisi | Deskripsi |
---|---|
Account information | Ini mengacu pada orang atau grup yang menerima waktu CPU. Ini diatur sesuai aturan perusahaan yang memiliki mainframe. Jika ditentukan sebagai (*), maka ini mengambil id pengguna, yang saat ini masuk ke Terminal Mainframe. |
Programmer name | Ini mengidentifikasi orang atau grup, yang bertanggung jawab atas JCL. Ini bukan parameter wajib dan dapat diganti dengan koma. |
Kata kunci-param
Berikut adalah berbagai parameter kata kunci, yang dapat digunakan dalam pernyataan JOB. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:
Parameter Kata Kunci | Deskripsi |
---|---|
CLASS | Berdasarkan durasi waktu dan jumlah sumber daya yang dibutuhkan oleh pekerjaan, perusahaan menetapkan kelas pekerjaan yang berbeda. Ini dapat divisualisasikan sebagai penjadwal individu yang digunakan oleh OS untuk menerima pekerjaan. Menempatkan pekerjaan di penjadwal yang tepat akan membantu pelaksanaan pekerjaan dengan mudah. Beberapa perusahaan memiliki kelas yang berbeda untuk pekerjaan di lingkungan pengujian dan produksi. Nilai yang valid untuk parameter CLASS adalah karakter A hingga Z dan 0 hingga 9 numerik (dengan panjang 1). Berikut sintaksnya: CLASS=0 to 9 | A to Z |
PRTY | Untuk menentukan prioritas pekerjaan dalam kelas pekerjaan. Jika parameter ini tidak ditentukan, maka pekerjaan akan ditambahkan ke akhir antrian di CLASS yang ditentukan. Berikut sintaksnya: PRTY=N Dimana N adalah angka di antara 0 sampai 15 dan lebih tinggi angkanya, lebih tinggi adalah prioritas. |
NOTIFY | Sistem mengirimkan pesan berhasil atau gagal (Kode Kondisi Maksimum) ke pengguna yang ditentukan dalam parameter ini. Berikut sintaksnya: NOTIFY="userid | &SYSUID" Di sini sistem mengirimkan pesan ke pengguna "userid" tetapi jika kita menggunakan NOTIFY = & SYSUID, maka pesan tersebut dikirim ke pengguna yang mengirimkan JCL. |
MSGCLASS | Untuk menentukan tujuan keluaran untuk sistem dan pesan Pekerjaan saat pekerjaan selesai. Berikut sintaksnya: MSGCLASS=CLASS Nilai yang valid dari CLASS bisa dari "A" hingga "Z" dan "0" hingga "9". MSGCLASS = Y dapat diatur sebagai kelas untuk mengirim log pekerjaan ke JMR (JOBLOG Management and Retrieval: repositori dalam mainframe untuk menyimpan statistik pekerjaan). |
MSGLEVEL | Menentukan jenis pesan yang akan ditulis ke tujuan keluaran yang ditentukan dalam MSGCLASS. Berikut sintaksnya: MSGLEVEL=(ST, MSG) ST = Jenis pernyataan yang ditulis ke log keluaran
MSG = Jenis pesan yang ditulis ke log keluaran.
|
TYPRUN | Menentukan pemrosesan khusus untuk pekerjaan itu. Berikut sintaksnya: TYPRUN = SCAN | HOLD Dimana SCAN dan HOLD memiliki deskripsi sebagai berikut
|
TIME | Menentukan rentang waktu yang akan digunakan oleh prosesor untuk menjalankan pekerjaan. Berikut sintaksnya: TIME=(mm, ss) or TIME=ss Dimana mm = menit dan ss = detik Parameter ini dapat berguna saat menguji program yang baru dikodekan. Untuk memastikan bahwa program tidak berjalan lama karena kesalahan perulangan, parameter waktu dapat dikodekan sehingga program berhenti ketika waktu CPU yang ditentukan tercapai. |
REGION | Menentukan ruang alamat yang diperlukan untuk menjalankan langkah pekerjaan dalam pekerjaan. Berikut sintaksnya: REGION=nK | nM Di sini, wilayah dapat ditentukan sebagai nK atau nM di mana n adalah angka, K adalah kilobyte dan M adalah Megabyte. Jika REGION = 0K atau 0M, address space terbesar disediakan untuk eksekusi.Dalam aplikasi kritis, coding 0K atau 0M dilarang untuk menghindari pemborosan ruang alamat. |
Contoh
//URMISAMP JOB (*),"tutpoint",CLASS=6,PRTY=10,NOTIFY=&SYSUID,
// MSGCLASS=X,MSGLEVEL=(1,1),TYPRUN=SCAN,
// TIME=(3,0),REGION=10K
Di sini, pernyataan JOB semakin melampaui posisi ke-70 dalam satu baris, jadi kami melanjutkan ke baris berikutnya yang harus dimulai dengan "//" diikuti dengan satu atau lebih spasi.
Parameter Miscellaneous
Ada beberapa parameter lain, yang dapat digunakan dengan Pernyataan JOB tetapi tidak sering digunakan:
ADDRSPC | Jenis penyimpanan yang digunakan: Virtual atau Nyata |
BYTES | Ukuran data yang akan ditulis ke log keluaran dan tindakan yang harus diambil jika ukurannya terlampaui. |
LINES | Jumlah baris maksimum yang akan dicetak ke log keluaran. |
PAGES | Jumlah halaman maksimum yang akan dicetak ke log keluaran. |
USER | ID pengguna digunakan untuk mengirimkan pekerjaan |
PASSWORD | Kata sandi dari id-pengguna yang ditentukan dalam parameter USER. |
COND and RESTART | Ini digunakan dalam pemrosesan langkah pekerjaan bersyarat dan dijelaskan secara rinci saat membahas Pemrosesan bersyarat. |
Setiap JCL dapat terdiri dari banyak langkah pekerjaan. Setiap langkah pekerjaan dapat menjalankan program secara langsung atau dapat memanggil prosedur, yang pada gilirannya menjalankan satu atau lebih program (langkah-langkah pekerjaan). Pernyataan, yang menyimpan informasi program / prosedur langkah kerja adalahEXEC statement.
Tujuan dari pernyataan EXEC adalah untuk memberikan informasi yang diperlukan untuk program / prosedur yang dijalankan pada langkah pekerjaan. Parameter yang dikodekan dalam pernyataan ini dapat mengirimkan data ke program yang sedang dieksekusi, dapat menimpa parameter tertentu dari pernyataan JOB dan dapat mengirimkan parameter ke prosedur jika pernyataan EXEC memanggil prosedur alih-alih langsung menjalankan program.
Sintaksis
Berikut adalah sintaks dasar dari pernyataan JCL EXEC:
//Step-name EXEC Positional-param, Keyword-param
Deskripsi
Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan EXEC di atas.
NAMA LANGKAH
Ini mengidentifikasi langkah pekerjaan dalam JCL. Panjangnya bisa 1 sampai 8 dengan karakter alfanumerik.
LAKUKAN
Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan EXEC.
POSISI-PARAM
Ini adalah parameter posisi, yang terdiri dari dua jenis:
Parameter Posisi | Deskripsi |
---|---|
PGM | Ini mengacu pada nama program yang akan dijalankan pada langkah pekerjaan. |
PROC | Ini mengacu pada nama prosedur yang akan dijalankan pada langkah pekerjaan. Kami akan membahasnya dalam bab terpisah. |
KEYWORD-PARAM
Berikut adalah berbagai parameter kata kunci untuk pernyataan EXEC. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:
Parameter Kata Kunci | Deskripsi |
---|---|
PARM | Digunakan untuk memberikan data parametrized ke program yang sedang dieksekusi pada langkah pekerjaan. Ini adalah bidang bergantung program dan tidak memiliki aturan pasti, kecuali bahwa nilai PARM harus disertakan dalam kutipan jika memiliki karakter khusus. Sebagai contoh diberikan di bawah ini, nilai "CUST1000" dikirimkan sebagai nilai alfanumerik ke program. Jika program di COBOL, nilai yang melewati parameter PARM di JCL diterima di LINKAGE SECTION dari program. |
ADDRSPC | Ini digunakan untuk menentukan apakah langkah pekerjaan memerlukan penyimpanan virtual atau nyata untuk eksekusi. Penyimpanan virtual dapat di-halaman sedangkan penyimpanan sebenarnya tidak dan ditempatkan di memori utama untuk eksekusi. Langkah-langkah pekerjaan, yang membutuhkan eksekusi lebih cepat dapat ditempatkan di penyimpanan nyata. Berikut sintaksnya: ADDRSPC=VIRT | REAL Ketika ADDRSPC tidak dikodekan, VIRT adalah yang default. |
ACCT | Ini menentukan informasi akuntansi dari langkah pekerjaan. Berikut sintaksnya: ACCT=(userid) Ini mirip dengan parameter posisi accounting informationdalam pernyataan JOB. Jika dikodekan baik dalam pernyataan JOB dan EXEC, maka informasi akuntansi dalam pernyataan JOB berlaku untuk semua langkah pekerjaan di mana parameter ACCT tidak dikodekan. Parameter ACCT dalam pernyataan EXEC akan menimpa yang ada dalam pernyataan JOB hanya untuk langkah pekerjaan itu. |
Parameter Kata Kunci Umum dari Pernyataan EXEC dan JOB
Parameter Kata Kunci | Deskripsi |
---|---|
ADDRSPC | Kode ADDRSPC dalam pernyataan JOB menimpa kode ADDRSPC dalam pernyataan EXEC dari setiap langkah pekerjaan. |
TIME | Jika TIME dikodekan dalam pernyataan EXEC, maka itu berlaku untuk langkah pekerjaan itu saja. Jika ditentukan dalam pernyataan JOB dan EXEC, keduanya akan berlaku dan dapat menyebabkan kesalahan batas waktu karena salah satunya. Tidak disarankan untuk menggunakan parameter TIME dalam pernyataan JOB dan EXEC secara bersamaan. |
REGION | Jika REGION dikodekan dalam pernyataan EXEC, maka itu berlaku untuk langkah pekerjaan itu saja. REGION yang dikodekan dalam pernyataan JOB menggantikan REGION yang dikodekan dalam pernyataan EXEC dari setiap langkah pekerjaan. |
COND | Digunakan untuk mengontrol eksekusi langkah pekerjaan berdasarkan kode-kembali dari langkah sebelumnya. Jika parameter COND dikodekan dalam pernyataan EXEC dari langkah pekerjaan, maka parameter COND dari pernyataan JOB (jika ada) diabaikan. Berbagai pengujian yang dapat dilakukan menggunakan parameter COND dijelaskan dalam Pemrosesan bersyarat. |
Contoh
Berikut adalah contoh sederhana dari skrip JCL bersama dengan pernyataan JOB dan EXEC:
//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
// NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=MYCOBOL,PARAM=CUST1000,
// ACCT=(XXXX),REGION=8K,ADDRSPC=REAL,TIME=1440
Set data adalah file mainframe dengan catatan yang diatur dalam format tertentu. Set data disimpan di Direct Access Storage Device (DASD) atau Tapes dari mainframe dan merupakan area penyimpanan data dasar. Jika data ini diperlukan untuk digunakan / dibuat dalam program batch, maka nama fisik file (yaitu, dataset) bersama dengan format file dan organisasi dikodekan dalam JCL.
Definisi dari setiap kumpulan data yang digunakan di JCL diberikan menggunakan DD statement. Sumber daya input dan output yang diperlukan oleh langkah pekerjaan perlu dijelaskan dalam pernyataan DD dengan informasi seperti organisasi set data, persyaratan penyimpanan, dan panjang rekaman.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan DD JCL:
//DD-name DD Parameters
Deskripsi
Mari kita lihat deskripsi istilah yang digunakan dalam sintaks pernyataan DD di atas.
DD-NAME
DD-NAME mengidentifikasi kumpulan data atau sumber daya masukan / keluaran. Jika ini adalah file input / output yang digunakan oleh program COBOL / Assembler, maka file tersebut direferensikan dengan nama ini di dalam program.
DD
Ini adalah kata kunci untuk mengidentifikasinya sebagai pernyataan DD.
PARAMETER
Berikut adalah berbagai parameter untuk pernyataan DD. Anda dapat menggunakan satu atau lebih parameter berdasarkan persyaratan dan dipisahkan dengan koma:
Parameter | Deskripsi |
---|---|
DSN | Parameter DSN mengacu pada nama dataset fisik dari dataset yang baru dibuat atau yang sudah ada. Nilai DSN dapat terdiri dari sub-nama yang masing-masing terdiri dari 1 hingga 8 karakter, dipisahkan oleh titik dan total panjang 44 karakter (alfanumerik). Berikut sintaksnya: DSN=Physical Dataset Name Temporary datasetsperlu penyimpanan hanya selama durasi pekerjaan dan dihapus saat pekerjaan selesai. Kumpulan data tersebut direpresentasikan sebagaiDSN=&name atau hanya tanpa DSN yang ditentukan. Jika kumpulan data sementara yang dibuat oleh langkah pekerjaan akan digunakan di langkah pekerjaan berikutnya, maka itu direferensikan sebagai DSN=*.stepname.ddname. Ini disebut Backward Referencing. |
DISP | Parameter DISP digunakan untuk mendeskripsikan status dataset, disposisi pada akhir langkah pekerjaan pada penyelesaian normal dan abnormal. DISP tidak diperlukan dalam pernyataan DD hanya jika kumpulan data dibuat dan dihapus dalam langkah pekerjaan yang sama (seperti kumpulan data sementara). Berikut sintaksnya: DISP=(status, normal-disposition, abnormal-disposition) Berikut ini adalah nilai yang valid untuk status:
SEBUAH normal-disposition parameter dapat mengambil salah satu nilai berikut
SEBUAH abnormal-disposition parameter dapat mengambil salah satu nilai berikut
Berikut adalah deskripsi parameter CATLG, UNCATLG, DELETE, PASS dan KEEP:
Ketika salah satu sub-parameter DISP tidak ditentukan, nilai defaultnya adalah sebagai berikut:
|
DCB | Parameter Data Control Block (DCB) merinci karakteristik fisik dari sebuah dataset. Parameter ini diperlukan untuk set data yang baru dibuat di langkah pekerjaan. LRECL adalah panjang setiap record yang disimpan dalam dataset. RECFM adalah format record dari dataset. RECFM dapat menampung nilai FB, V atau VB. FB adalah organisasi blok tetap di mana satu atau lebih catatan logis dikelompokkan dalam satu blok. V adalah organisasi variabel di mana satu catatan logis dengan panjang variabel ditempatkan dalam satu blok fisik. VB adalah organisasi Blok Variabel di mana satu atau lebih catatan logis dengan panjang variabel ditempatkan dalam satu blok fisik. BLKSIZE adalah ukuran blok fisik. Semakin besar bloknya, semakin besar jumlah record untuk file FB atau VB. DSORG adalah jenis organisasi set data. DSORG dapat menyimpan nilai PS (Physical Sequential), PO (Partitioned Organization) dan DA (Direct Organization). Jika ada kebutuhan untuk mereplikasi nilai DCB dari satu set data ke set data lain dalam jobstep yang sama atau JCL, maka itu ditetapkan sebagai DCB = *. Stepname.ddname di mana nama langkah adalah nama langkah pekerjaan dan ddname adalah set data dari mana DCB disalin. Periksa contoh di bawah ini di mana RECFM = FB, LRECL = 80 membentuk DCB dari dataset OUTPUT1. |
SPACE | Parameter SPACE menentukan ruang yang diperlukan untuk dataset di DASD (Direct Access Storage Disk). Berikut sintaksnya: SPACE=(spcunits, (pri, sec, dir), RLSE) Berikut adalah deskripsi dari semua parameter yang digunakan:
|
UNIT | Parameter UNIT dan VOL terdaftar dalam katalog sistem untuk kumpulan data yang dikatalogkan dan karenanya dapat diakses hanya dengan nama DSN fisik. Tetapi untuk set data yang tidak dikatalogkan, pernyataan DD harus menyertakan parameter ini. Untuk kumpulan data baru yang akan dibuat, parameter UNIT / VOL dapat ditentukan atau Z / OS mengalokasikan perangkat dan volume yang sesuai. Parameter UNIT menentukan jenis perangkat tempat dataset disimpan. Jenis perangkat dapat diidentifikasi menggunakan Alamat Perangkat Keras atau grup Jenis perangkat. Berikut sintaksnya: UNIT=DASD | SYSDA Dimana DASD adalah singkatan dari Direct Access Storage Device dan SYSDA adalah singkatan dari System Direct Access dan mengacu pada perangkat penyimpanan disk yang tersedia berikutnya. |
VOL | Parameter VOL menentukan nomor volume pada perangkat yang diidentifikasi oleh parameter UNIT. Berikut sintaksnya: VOL=SER=(v1,v2) Di mana v1, v2 adalah nomor seri volume. Anda juga dapat menggunakan sintaks berikut: VOL=REF=*.DDNAME Di mana REF adalah referensi mundur ke nomor seri volume set data di salah satu langkah pekerjaan sebelumnya di JCL. |
SYSOUT | Parameter pernyataan DD yang dibahas sejauh ini sesuai dengan data yang disimpan dalam kumpulan data. Parameter SYSOUT mengarahkan data ke perangkat keluaran berdasarkan kelas yang ditentukan. Berikut adalah sintaksnya SYSOUT=class Dimana jika kelasnya A maka itu mengarahkan output ke printer, dan jika kelasnya adalah * kemudian mengarahkan output ke tujuan yang sama seperti parameter MSGCLASS dalam pernyataan JOB. |
Contoh
Berikut adalah contoh, yang menggunakan pernyataan DD bersama dengan berbagai parameter yang dijelaskan di atas:
//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
// NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1 DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2 DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
// VOL=SER=(1243,1244)
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
// RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2 DD SYSOUT=*
Base Libraryadalah Partitioned Dataset (PDS), yang menampung modul beban program untuk dieksekusi di JCL atau prosedur katalog, yang disebut dalam program. Pustaka dasar dapat ditentukan untuk seluruh JCL di aJOBLIB perpustakaan atau untuk langkah pekerjaan tertentu di a STEPLIB pernyataan.
Pernyataan JOBLIB
SEBUAH JOBLIBpernyataan digunakan untuk mengidentifikasi lokasi program yang akan dijalankan di JCL. Pernyataan JOBLIB ditentukan setelah pernyataan JOB dan sebelum pernyataan EXEC. Ini hanya dapat digunakan untuk prosedur dan program dalam aliran.
Sintaksis
Berikut adalah sintaks dasar dari pernyataan JCL JOBLIB:
//JOBLIB DD DSN=dsnname,DISP=SHR
Pernyataan JOBLIB berlaku untuk semua pernyataan EXEC dalam JCL. Program yang ditentukan dalam pernyataan EXEC akan dicari di perpustakaan JOBLIB diikuti oleh perpustakaan sistem.
Misalnya, jika pernyataan EXEC menjalankan program COBOL, modul beban program COBOL harus ditempatkan di dalam perpustakaan JOBLIB.
Pernyataan STEPLIB
SEBUAH STEPLIBpernyataan digunakan untuk mengidentifikasi lokasi program yang akan dijalankan dalam Langkah Pekerjaan. Pernyataan STEPLIB ditentukan setelah pernyataan EXEC dan sebelum pernyataan DD dari langkah pekerjaan.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan JCL STEPLIB:
//STEPLIB DD DSN=dsnname,DISP=SHR
Program yang ditentukan dalam pernyataan EXEC akan dicari di perpustakaan STEPLIB diikuti oleh perpustakaan sistem. Kode STEPLIB dalam langkah pekerjaan menggantikan pernyataan JOBLIB.
Contoh
Contoh berikut menunjukkan penggunaan pernyataan JOBLIB dan STEPLIB:
//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID
//*
//JOBLIB DD DSN=MYPROC.BASE.LIB1,DISP=SHR
//*
//STEP1 EXEC PGM=MYPROG1
//INPUT1 DD DSN=MYFILE.SAMPLE.INPUT1,DISP=SHR
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
// RECFM=FB,LRECL=80
//*
//STEP2 EXEC PGM=MYPROG2
//STEPLIB DD DSN=MYPROC.BASE.LIB2,DISP=SHR
//INPUT2 DD DSN=MYFILE.SAMPLE.INPUT2,DISP=SHR
//OUTPUT2 DD DSN=MYFILES.SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE),
// RECFM=FB,LRECL=80
Di sini, modul beban program MYPROG1 (di LANGKAH1) dicari di MYPROC.SAMPLE.LIB1. Jika tidak ditemukan, itu akan dicari di perpustakaan sistem. Di LANGKAH2, STEPLIB menggantikan JOBLIB dan memuat modul program MYPROG2 dicari di MYPROC.SAMPLE.LIB2 dan kemudian di perpustakaan sistem.
Pernyataan INCLUDE
Satu set pernyataan JCL yang dikodekan dalam anggota PDS dapat dimasukkan ke JCL menggunakan file INCLUDEpernyataan. Ketika JES menafsirkan JCL, kumpulan pernyataan JCL dalam anggota TERMASUK menggantikan pernyataan TERMASUK.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan JCL INCLUDE:
//name INCLUDE MEMBER=member-name
Tujuan utama pernyataan INCLUDE adalah dapat digunakan kembali. Misalnya, file umum yang akan digunakan di banyak JCL dapat dikodekan sebagai pernyataan DD dalam anggota TERMASUK dan digunakan dalam JCL.
Pernyataan Dummy DD, spesifikasi kartu data, PROC, JOB, pernyataan PROC tidak dapat dikodekan dalam anggota TERMASUK. Pernyataan INLCUDE dapat dikodekan dalam anggota INCLUDE dan penumpukan selanjutnya dapat dilakukan hingga 15 level.
Pernyataan JCLLIB
SEBUAH JCLLIBpernyataan digunakan untuk mengidentifikasi perpustakaan pribadi yang digunakan dalam pekerjaan. Ini dapat digunakan baik dengan prosedur instream dan katalog.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan JCL JCLLIB:
//name JCLLIB ORDER=(library1, library2....)
Perpustakaan yang ditentukan dalam pernyataan JCLLIB akan dicari dalam urutan tertentu untuk menemukan program, prosedur, dan anggota TERMASUK yang digunakan dalam pekerjaan. Hanya ada satu pernyataan JCLLIB di JCL; ditentukan setelah pernyataan JOB dan sebelum pernyataan EXEC dan INCLUDE tetapi tidak dapat dikodekan dalam anggota INCLUDE.
Contoh
Dalam contoh berikut, program MYPROG3 dan INCLUDE anggota MYINCL dicari dalam urutan MYPROC.BASE.LIB1, MYPROC.BASE.LIB2, pustaka sistem.
//MYJCL JOB ,,CLASS=6,NOTIFY=&SYSUID
//*
//MYLIB JCLLIB ORDER=(MYPROC.BASE.LIB1,MYPROC.BASE.LIB2)
//*
//STEP1 EXEC PGM=MYPROG3
//INC INCLUDE MEMBER=MYINCL
//OUTPUT1 DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
// RECFM=FB,LRECL=80
//*
Itu JCL Proceduresadalah kumpulan pernyataan di dalam JCL yang dikelompokkan bersama untuk menjalankan fungsi tertentu. Biasanya, bagian tetap dari JCL dikodekan dalam sebuah prosedur. Bagian yang berbeda dari Pekerjaan dikodekan di dalam JCL.
Anda dapat menggunakan prosedur untuk mencapai eksekusi paralel dari sebuah program menggunakan beberapa file input. JCL dapat dibuat untuk setiap file masukan, dan satu prosedur dapat dipanggil secara bersamaan dengan meneruskan nama file masukan sebagai parameter simbolik.
Sintaksis
Berikut adalah sintaks dasar dari definisi prosedur JCL:
//*
//Step-name EXEC procedure name
Isi prosedur disimpan dalam JCL untuk prosedur instream. Isi disimpan dalam anggota perpustakaan dasar yang berbeda untuk prosedur katalog. Bab ini akan menjelaskan dua jenis prosedur yang tersedia di JCL dan akhirnya kita akan melihat bagaimana kita dapat menyusun berbagai prosedur.
Prosedur Sela
Ketika prosedur dikodekan dalam anggota JCL yang sama, itu disebut Prosedur Sela. Ini harus dimulai dengan pernyataan PROC dan diakhiri dengan pernyataan PEND.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//INSTPROC PROC //*START OF PROCEDURE
//PROC1 EXEC PGM=SORT
//SORTIN DD DSN=&DSNAME,DISP=SHR
//SORTOUT DD SYSOUT=*MYINCL
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC LRECL=80
// PEND //*END OF PROCEDURE
//*
//STEP1 EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT1,
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
//STEP2 EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT2
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
Dalam contoh di atas, prosedur INSTPROC dipanggil di LANGKAH1 dan LANGKAH2 menggunakan file input yang berbeda. Parameter DSNAME dan DATAC dapat dikodekan dengan nilai yang berbeda saat memanggil prosedur dan ini disebut sebagaisymbolic parameters. Input yang bervariasi ke JCL seperti nama file, kartu data, nilai PARM, dll., Diteruskan sebagai parameter simbolik ke prosedur.
Saat mengkode parameter simbolik, jangan gunakan KATA KUNCI, PARAMETER atau SUB-PARAMETER sebagai nama simbolik. Contoh: Jangan gunakan TIME = & TIME tetapi ya Anda bisa menggunakan TIME = & TM dan ini dianggap sebagai cara yang benar untuk mengkodekan simbolik.
Parameter simbolik yang ditentukan pengguna dipanggil JCL Symbols. Ada simbol tertentu yang disebutsystem symbols, yang digunakan untuk eksekusi tugas logon. Satu-satunya simbol sistem yang digunakan dalam pekerjaan batch oleh pengguna normal adalah&SYSUID dan ini digunakan dalam parameter NOTIFY di pernyataan JOB.
Prosedur Katalog
Ketika prosedur dipisahkan dari JCL dan dikodekan di penyimpanan data yang berbeda, itu disebut a Cataloged Procedure. Pernyataan PROC tidak wajib dikodekan dalam prosedur katalog. Berikut adalah contoh JCL yang memanggil prosedur CATLPROC:
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
Di sini, prosedur CATLPROC dikatalogkan di MYCOBOL.BASE.LIB1. PROG, DATAC dan DSNAME diteruskan sebagai parameter simbolik ke prosedur CATLPROC.
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//PROC1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=&DSNAME,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
//*
Di dalam prosedur, parameter simbolik PROG dan BASELB dikodekan. Harap dicatat bahwa parameter PROG di dalam prosedur diganti dengan nilai di JCL dan karenanya PGM mengambil nilai CATPRC1 selama eksekusi.
Prosedur Bersarang
Memanggil prosedur dari dalam suatu prosedur disebut a nested procedure. Prosedur dapat ditumpuk hingga 15 level. Penumpukan dapat sepenuhnya dalam aliran atau dikatalogkan. Kami tidak dapat membuat kode prosedur instream dalam prosedur katalog.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//SETNM SET DSNM1=INPUT1,DSNM2=OUTPUT1
//INSTPRC1 PROC //* START OF PROCEDURE 1
//STEP1 EXEC PGM=SORT,DISP=SHR
//SORTIN DD DSN=&DSNM1,DISP=SHR
//SORTOUT DD DSN=&DSNM2,DISP=(,PASS)
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
//*
//STEP2 EXEC PROC=INSTPRC2,DSNM2=MYDATA.URMI.OUTPUT2
// PEND //* END OF PROCEDURE 1
//*
//INSTPRC2 PROC //* START OF PROCEDURE 2
//STEP1 EXEC PGM=SORT
//SORTIN DD DSN=*.INSTPRC1.STEP1.SORTOUT
//SORTOUT DD DSN=&DSNM2,DISP=OLD
//SYSOUT DD SYSOUT=*
//SYSIN DD DSN=&DATAC
// PEND //* END OF PROCEDURE 2
//*
//JSTEP1 EXEC INSTPRC1,DSNM1=MYDATA.URMI.INPUT1,
// DATAC=MYDATA.BASE.LIB1(DATA1)
//*
Dalam contoh di atas, JCL memanggil prosedur INSTPRC1 di JSTEP1 dan prosedur INSTPRC2 dipanggil dalam prosedur INSTPRC1. Di sini, output INSTPRC1 (SORTOUT) diteruskan sebagai input (SORTIN) ke INSTPRC2.
SEBUAH SET statementdigunakan untuk mendefinisikan simbolik yang umum digunakan di seluruh langkah atau prosedur pekerjaan. Ini menginisialisasi nilai sebelumnya dalam nama simbolik. Ini harus didefinisikan sebelum penggunaan pertama dari nama simbolis di JCL.
Mari kita lihat uraian di bawah ini untuk memahami sedikit lebih banyak tentang program di atas:
Parameter SET menginisialisasi DSNM1 = INPUT1 dan DSNM2 = OUTPUT1.
Ketika INSTPRC1 dipanggil dalam JSTEP1 dari JCL, DSNM1 = MYDATA.URMI.INPUT1 dan DSNM2 = OUTPUT1., Yaitu, nilai yang diinisialisasi dalam pernyataan SET disetel ulang dengan nilai yang ditetapkan di salah satu langkah / prosedur pekerjaan.
Ketika INSTPRC2 dipanggil di LANGKAH2 dari INSTPRC1, DSNM1 = MYDATA.URMI.INPUT1 dan DSNM2 = MYDATA.URMI.OUTPUT2.
Sistem Entri Pekerjaan menggunakan dua pendekatan untuk melakukan pemrosesan bersyarat di JCL. Saat pekerjaan selesai, kode yang dikembalikan ditetapkan berdasarkan status eksekusi. Kode yang dikembalikan dapat berupa angka antara 0 (eksekusi berhasil) hingga 4095 (bukan nol menunjukkan kondisi kesalahan). Nilai konvensional yang paling umum adalah:
0 = Normal - semua OK
4 = Peringatan - kesalahan kecil atau masalah.
8 = Error - kesalahan atau masalah yang signifikan.
12 = Kesalahan parah - kesalahan besar atau masalah, hasil tidak dapat dipercaya.
16 = Kesalahan terminal - masalah yang sangat serius, jangan gunakan hasilnya.
Eksekusi langkah pekerjaan dapat dikontrol berdasarkan kode kembalian dari langkah sebelumnya menggunakan COND parameter dan IF-THEN-ELSE konstruksi, yang telah dijelaskan dalam tutorial ini.
Parameter COND
SEBUAH CONDparameter dapat dikodekan dalam pernyataan JOB atau EXEC JCL. Ini adalah tes pada kode pengembalian dari langkah-langkah pekerjaan sebelumnya. Jika pengujian dievaluasi sebagai true, eksekusi langkah tugas saat ini akan dilewati. Bypassing hanyalah kelalaian langkah pekerjaan dan bukan penghentian abnormal. Ada paling banyak delapan kondisi yang digabungkan dalam satu pengujian.
Sintaksis
Berikut ini adalah sintaks dasar dari Parameter COND JCL:
COND=(rc,logical-operator)
or
COND=(rc,logical-operator,stepname)
or
COND=EVEN
or
COND=ONLY
Berikut adalah deskripsi parameter yang digunakan:
rc : Ini adalah kode pengembalian
logical-operator : Ini bisa berupa GT (Greater Than), GE (Greater than atau Equal to), EQ (Equal to), LT (Lesser Than), LE (Lesser than atau Equal to) atau NE (Not Equal to).
stepname : Ini adalah langkah pekerjaan yang kode kembaliannya digunakan dalam pengujian.
Dua kondisi terakhir (a) COND = EVEN dan (b) COND = ONLY, telah dijelaskan di bawah dalam tutorial ini.
COND dapat dikodekan baik di dalam pernyataan JOB atau pernyataan EXEC, dan dalam kedua kasus, ini berperilaku berbeda seperti yang dijelaskan di bawah ini:
COND di dalam pernyataan JOB
Ketika COND dikodekan dalam pernyataan JOB, kondisi tersebut diuji untuk setiap langkah pekerjaan. Jika kondisi benar pada setiap langkah pekerjaan tertentu, itu dilewati bersama dengan langkah pekerjaan yang mengikutinya. Berikut ini contohnya:
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID,COND=(5,LE)
//*
//STEP10 EXEC PGM=FIRSTP
//* STEP10 executes without any test being performed.
//STEP20 EXEC PGM=SECONDP
//* STEP20 is bypassed, if RC of STEP10 is 5 or above. //* Say STEP10 ends with RC4 and hence test is false. //* So STEP20 executes and lets say it ends with RC16.
//STEP30 EXEC PGM=SORT
//* STEP30 is bypassed since 5 <= 16.
COND di dalam pernyataan EXEC
Ketika COND dikodekan dalam pernyataan EXEC dari sebuah langkah pekerjaan dan terbukti benar, hanya langkah pekerjaan itu yang dilewati, dan eksekusi dilanjutkan dari langkah pekerjaan berikutnya.
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.
//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* In STP02, condition evaluates to TRUE and step bypassed.
//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),(10,GT,STP02))
//* In STP03, first condition fails and hence STP03 executes. //* Since STP02 is bypassed, the condition (10,GT,STP02) in //* STP03 is not tested.
COND = BAHKAN
Ketika COND = EVEN dikodekan, langkah pekerjaan saat ini dijalankan, bahkan jika langkah sebelumnya berhenti secara tidak normal. Jika ada kondisi RC lain yang dikodekan bersama dengan COND = EVEN, maka langkah pekerjaan akan dijalankan jika tidak ada kondisi RC yang benar.
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.
//STP02 EXEC PGM=MYCOBB,COND=(0,EQ,STP01)
//* In STP02, condition evaluates to TRUE and step bypassed.
//STP03 EXEC PGM=IEBGENER,COND=((10,LT,STP01),EVEN)
//* In STP03, condition (10,LT,STP01) evaluates to true, //* hence the step is bypassed.
COND = HANYA
Ketika COND = ONLY dikodekan, langkah pekerjaan saat ini dijalankan, hanya jika salah satu langkah sebelumnya berhenti secara tidak normal. Jika kondisi RC lainnya dikodekan bersama dengan COND = ONLY, maka langkah pekerjaan dijalankan jika tidak ada kondisi RC yang benar dan salah satu langkah pekerjaan sebelumnya gagal secara tidak normal.
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=SORT
//* Assuming STP01 ends with RC0.
//STP02 EXEC PGM=MYCOBB,COND=(4,EQ,STP01)
//* In STP02, condition evaluates to FALSE, step is executed //* and assume the step abends.
//STP03 EXEC PGM=IEBGENER,COND=((0,EQ,STP01),ONLY)
//* In STP03, though the STP02 abends, the condition //* (0,EQ,STP01) is met. Hence STP03 is bypassed.
Konstruksi IF-THEN-ELSE
Pendekatan lain untuk mengontrol pemrosesan pekerjaan adalah dengan menggunakan konstruksi IF-THEN-ELSE. Ini memberikan lebih banyak fleksibilitas dan cara pemrosesan bersyarat yang ramah pengguna.
Sintaksis
Berikut ini adalah sintaks dasar dari JCL IF-THEN-ELSE Construct:
//name IF condition THEN
list of statements //* action to be taken when condition is true
//name ELSE
list of statements //* action to be taken when condition is false
//name ENDIF
Berikut ini adalah deskripsi dari istilah yang digunakan dalam Konstruksi IF-THEN-ELSE di atas:
name : Ini opsional dan sebuah nama dapat memiliki 1 hingga 8 karakter alfanumerik yang dimulai dengan alfabet, #, $ atau @.
Condition : Kondisi akan memiliki format: KEYWORD OPERATOR VALUE, dimana KEYWORDSdapat berupa RC (Kode Pengembalian), ABENDCC (Sistem atau kode penyelesaian pengguna), ABEND, RUN (langkah mulai eksekusi). SebuahOPERATOR dapat menjadi operator logika (AND (&), OR (|)) atau operator relasional (<, <=,>,> =, <>).
Contoh
Berikut adalah contoh sederhana yang menunjukkan penggunaan IF-THEN-ELSE:
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//PRC1 PROC
//PST1 EXEC PGM=SORT
//PST2 EXEC PGM=IEBGENER
// PEND
//STP01 EXEC PGM=SORT
//IF1 IF STP01.RC = 0 THEN
//STP02 EXEC PGM=MYCOBB1,PARM=123
// ENDIF
//IF2 IF STP01.RUN THEN
//STP03a EXEC PGM=IEBGENER
//STP03b EXEC PGM=SORT
// ENDIF
//IF3 IF STP03b.!ABEND THEN
//STP04 EXEC PGM=MYCOBB1,PARM=456
// ELSE
// ENDIF
//IF4 IF (STP01.RC = 0 & STP02.RC <= 4) THEN
//STP05 EXEC PROC=PRC1
// ENDIF
//IF5 IF STP05.PRC1.PST1.ABEND THEN
//STP06 EXEC PGM=MYABD
// ELSE
//STP07 EXEC PGM=SORT
// ENDIF
Mari kita coba melihat program di atas untuk memahaminya secara lebih rinci:
Kode kembali STP01 diuji dalam IF1. Jika nilainya 0, maka STP02 dijalankan. Jika tidak, pemrosesan pergi ke pernyataan IF berikutnya (IF2).
Di IF2, Jika STP01 sudah mulai dijalankan, maka STP03a dan STP03b akan dijalankan.
Di IF3, Jika STP03b tidak ABEND, maka STP04 dijalankan. Di ELSE, tidak ada pernyataan. Ini disebut pernyataan NULL ELSE.
Dalam IF4, jika STP01.RC = 0 dan STP02.RC <= 4 BENAR, maka STP05 dijalankan.
Di IF5, jika proc-step PST1 di PROC PRC1 di jobstep STP05 ABEND, maka STP06 akan dijalankan. Lain STP07 dijalankan.
Jika IF4 bernilai false, maka STP05 tidak dijalankan. Dalam hal ini, IF5 tidak diuji dan langkah-langkah STP06, STP07 tidak dijalankan.
IF-THEN-ELSE tidak akan dijalankan dalam kasus penghentian pekerjaan yang tidak normal seperti pengguna membatalkan pekerjaan, waktu kerja berakhir atau kumpulan data direferensikan ke belakang ke langkah yang dilewati.
Mengatur Pos Pemeriksaan
Anda dapat mengatur set data pos pemeriksaan di dalam program JCL Anda menggunakan SYSCKEOV, yang merupakan pernyataan DD.
SEBUAH CHKPTadalah parameter yang dikodekan untuk set data QSAM multi-volume dalam pernyataan DD. Ketika CHKPT dikodekan sebagai CHKPT = EOV, sebuah checkpoint ditulis ke dataset yang ditentukan dalam pernyataan SYSCKEOV di akhir setiap volume dari dataset multi-volume input / output.
//CHKSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=MYCOBB
//SYSCKEOV DD DSNAME=SAMPLE.CHK,DISP=MOD
//IN1 DD DSN=SAMPLE.IN,DISP=SHR
//OUT1 DD DSN=SAMPLE.OUT,DISP=(,CATLG,CATLG)
// CHKPT=EOV,LRECL=80,RECFM=FB
Pada contoh di atas, checkpoint ditulis dalam kumpulan data SAMPLE.CHK di akhir setiap volume kumpulan data keluaran SAMPLE.OUT.
Mulai Ulang Pemrosesan
Anda dapat memulai kembali pemrosesan eter menggunakan cara otomatis menggunakan RD parameter atau manual menggunakan RESTART parameter.
RD parameter dikodekan dalam pernyataan JOB atau EXEC dan ini membantu dalam memulai ulang JOB / LANGKAH otomatis dan dapat menampung salah satu dari empat nilai: R, RNC, NR atau NC.
RD=R memungkinkan restart otomatis dan mempertimbangkan checkpoint yang dikodekan dalam parameter CHKPT dari pernyataan DD.
RD=RNC memungkinkan restart otomatis, tetapi menimpa (mengabaikan) parameter CHKPT.
RD=NRmenetapkan bahwa pekerjaan / langkah tidak dapat dimulai ulang secara otomatis. Tetapi ketika di-restart secara manual menggunakan parameter RESTART, parameter CHKPT (jika ada) akan dipertimbangkan.
RD=NC melarang restart otomatis dan pemrosesan pos pemeriksaan.
Jika ada persyaratan untuk melakukan restart otomatis hanya untuk kode abend tertentu, maka itu dapat ditentukan di SCHEDxx anggota perpustakaan parmlib sistem IBM.
RESTART parameterdikodekan dalam pernyataan JOB atau EXEC dan ini membantu dalam restart manual JOB / STEP setelah kegagalan pekerjaan. RESTART dapat disertai dengan checkid, yaitu checkpoint yang tertulis di dataset yang dikodekan dalam pernyataan SYSCKEOV DD. Ketika sebuah checkid dikodekan, pernyataan SYSCHK DD harus dikodekan untuk mereferensikan dataset checkpoint setelah pernyataan JOBLIB (jika ada), selain itu setelah pernyataan JOB.
//CHKSAMP JOB CLASS=6,NOTIFY=&SYSUID,RESTART=(STP01,chk5)
//*
//SYSCHK DD DSN=SAMPLE.CHK,DISP=OLD
//STP01 EXEC PGM=MYCOBB
//*SYSCKEOV DD DSNAME=SAMPLE.CHK,DISP=MOD
//IN1 DD DSN=SAMPLE.IN,DISP=SHR
//OUT1 DD DSN=SAMPLE.OUT,DISP=(,CATLG,CATLG)
// CHKPT=EOV,LRECL=80,RECFM=FB
Dalam contoh di atas, chk5 adalah checkid, yaitu STP01 di-restart di checkpoint5. Harap dicatat bahwa pernyataan SYSCHK ditambahkan dan pernyataan SYSCKEOV dikomentari di program sebelumnya yang dijelaskan di bagian Setting Checkpoint.
Nama kumpulan data menentukan nama file dan dilambangkan dengan DSN di JCL. Parameter DSN mengacu pada nama dataset fisik dari dataset yang baru dibuat atau yang sudah ada. Nilai DSN dapat terdiri dari sub-nama yang masing-masing terdiri dari 1 hingga 8 karakter, dipisahkan oleh titik dan total panjang 44 karakter (alfanumerik). Berikut sintaksnya:
DSN=&name | *.stepname.ddname
Temporary datasetsperlu penyimpanan hanya selama durasi pekerjaan dan dihapus saat pekerjaan selesai. Kumpulan data tersebut direpresentasikan sebagaiDSN=&name atau hanya tanpa DSN yang ditentukan.
Jika kumpulan data sementara yang dibuat oleh langkah pekerjaan akan digunakan di langkah pekerjaan berikutnya, maka itu direferensikan sebagai DSN=*.stepname.ddname. Ini disebutBackward Referencing.
Kumpulan Data Gabungan
Jika ada lebih dari satu dataset dengan format yang sama, mereka dapat digabungkan dan diteruskan sebagai input ke program dalam satu nama DD.
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10 EXEC PGM=SORT
//SORTIN DD DSN=SAMPLE.INPUT1,DISP=SHR
// DD DSN=SAMPLE.INPUT2,DISP=SHR
// DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
Dalam contoh di atas, tiga dataset digabungkan dan diteruskan sebagai input ke program SORT dalam nama SORTIN DD. File tersebut digabungkan, diurutkan pada bidang kunci yang ditentukan dan kemudian ditulis ke file output tunggal SAMPLE.OUTPUT dalam nama SORTOUT DD.
Mengganti Set Data
Dalam JCL standar, program yang akan dijalankan dan kumpulan data terkait ditempatkan dalam prosedur katalog, yang disebut dalam JCL. Biasanya, untuk tujuan pengujian atau untuk perbaikan insiden, mungkin ada kebutuhan untuk menggunakan kumpulan data yang berbeda selain yang ditentukan dalam prosedur katalog. Dalam hal ini, set data dalam prosedur dapat diganti di JCL.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1 EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2 EXEC PGM=SORT
Pada contoh di atas, dataset IN1 menggunakan file MYDATA.URMI.INPUT di PROC, yang diganti di JCL. Oleh karena itu, file input yang digunakan dalam eksekusi adalah MYDATA.OVER.INPUT. Harap dicatat bahwa kumpulan data disebut sebagai STEP1.IN1. Jika hanya ada satu langkah di JCL / PROC, maka kumpulan data dapat dirujuk hanya dengan nama DD. Demikian pula, jika ada lebih dari satu langkah di JCL, maka kumpulan data harus diganti sebagai JSTEP1.STEP1.IN1.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
// DD DUMMY
// DD DUMMY
//*
Dalam contoh di atas, dari tiga kumpulan data yang digabungkan di IN1, yang pertama diganti di JCL dan sisanya disimpan seperti yang ada di PROC.
Mendefinisikan GDG di JCL
Generation Data Groups (GDGs) adalah kumpulan kumpulan data yang terkait satu sama lain dengan nama umum. Nama umum disebut sebagai basis GDG dan setiap kumpulan data yang terkait dengan basis disebut versi GDG.
Misalnya, MYDATA.URMI.SAMPLE.GDG adalah nama dasar GDG. Dataset tersebut diberi nama MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 dan seterusnya. Versi terbaru GDG disebut sebagai MYDATA.URMI.SAMPLE.GDG (0), versi sebelumnya disebut (-1), (-2) dan seterusnya. Versi selanjutnya yang akan dibuat dalam program disebut sebagai MYDATA.URMI.SAMPLE.GDG (+1) di JCL.
Buat / Ubah GDG di JCL
Versi GDG dapat memiliki parameter DCB yang sama atau berbeda. Model awal DCB dapat ditentukan untuk digunakan oleh semua versi, tetapi dapat diganti saat membuat versi baru.
//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG) -
LIMIT(7) -
NOEMPTY -
SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD DSN=MYDATA.URMI.SAMPLE.GDG,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,10,20),
// DCB=(LRECL=50,RECFM=FB)
//
Dalam contoh di atas, utilitas IDCAMS menentukan basis GDG di GDGSTEP1 dengan parameter di bawah ini diteruskan dalam pernyataan SYSIN DD:
NAME menentukan nama set data fisik dari basis GDG.
LIMIT menentukan jumlah maksimum versi yang dapat dimiliki basis GDG.
EMPTY membatalkan pencatatan semua generasi saat LIMIT tercapai.
NOEMPTY membuka katalog generasi terbaru.
SCRATCH menghapus secara fisik generasi saat tidak dikatalogkan.
NOSCRATCH jangan hapus set data, yaitu dapat dirujuk menggunakan parameter UNIT dan VOL.
Dalam GDGSTEP2, utilitas IEFBR14 menentukan parameter model DD yang akan digunakan oleh semua versi.
IDCAMS dapat digunakan untuk mengubah parameter definisi GDG seperti meningkatkan LIMIT, mengubah KOSONG menjadi NOEMPTY, dll., Dan versi terkaitnya menggunakan perintah SYSIN adalah ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.
Hapus GDG di JCL
Dengan menggunakan utilitas IEFBR14, kita dapat menghapus satu versi GDG.
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
Pada contoh di atas, versi terbaru MYDATA.URMI.SAMPLE.GDG dihapus. Harap dicatat bahwa parameter DISP pada penyelesaian pekerjaan normal dikodekan sebagai HAPUS. Karenanya, set data dihapus saat pekerjaan menyelesaikan eksekusi.
IDCAMS dapat digunakan untuk menghapus GDG dan versi terkaitnya menggunakan perintah SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.
FORCEmenghapus versi GDG dan basis GDG. Jika salah satu versi GDG disetel dengan tanggal kedaluwarsa yang belum kedaluwarsa, maka versi tersebut tidak dihapus dan karenanya basis GDG dipertahankan.
PURGE menghapus versi GDG dan basis GDG terlepas dari tanggal kedaluwarsa.
Menggunakan GDG di JCL
Dalam contoh berikut, versi terbaru MYDATA.URMI.SAMPLE.GDG digunakan sebagai masukan ke program dan versi baru MYDATA.URMI.SAMPLE.GDG dibuat sebagai keluaran.
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=MYCOBB
//IN1 DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1 DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
// LRECL=100,RECFM=FB
Di sini, jika GDG telah dirujuk dengan nama sebenarnya seperti MYDATA.URMI.SAMPLE.GDG.G0001V00, maka itu mengarah pada perubahan JCL setiap kali sebelum eksekusi. Menggunakan (0) dan (+1) membuatnya secara dinamis menggantikan versi GDG untuk eksekusi.
Setiap program batch yang dijalankan melalui JCL membutuhkan input data, yang diproses dan output dibuat. Ada berbagai metode untuk memasukkan masukan ke program dan menulis keluaran yang diterima dari JCL. Dalam mode batch, tidak ada interaksi pengguna yang diperlukan, tetapi perangkat input dan output dan organisasi yang diperlukan ditentukan dalam JCL dan dikirimkan.
Input Data di JCL
Ada berbagai cara untuk memasukkan data ke program menggunakan JCL dan metode ini telah dijelaskan di bawah ini:
DATA INSTREAM
Data sela ke program dapat ditentukan menggunakan pernyataan SYSIN DD.
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//* Example 1:
//STEP10 EXEC PGM=MYPROG
//IN1 DD DSN=SAMPLE.INPUT1,DISP=SHR
//OUT1 DD DSN=SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
//SYSIN DD *
//CUST1 1000
//CUST2 1001
/*
//*
//* Example 2:
//STEP20 EXEC PGM=MYPROG
//OUT1 DD DSN=SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
//SYSIN DD DSN=SAMPLE.SYSIN.DATA,DISP=SHR
//*
Dalam Contoh 1, input ke MYPROG dilewatkan melalui SYSIN. Data disediakan dalam JCL. Dua catatan data diteruskan ke program. Harap dicatat bahwa / * menandai akhir dari data SYSIN instream.
"CUST1 1000" adalah record1 dan "CUST2 1001" adalah record2. Kondisi akhir data terpenuhi ketika simbol / * ditemukan saat membaca data.
Dalam Contoh 2, data SYSIN disimpan dalam kumpulan data, di mana SAMPLE.SYSIN.DATA adalah file PS, yang dapat menyimpan satu atau lebih catatan data.
Input Data melalui file
Seperti yang disebutkan di sebagian besar contoh di bab sebelumnya, input data ke program dapat disediakan melalui file PS, VSAM atau GDG, dengan nama DSN dan parameter DISP yang relevan bersama dengan pernyataan DD.
Dalam Contoh 1, SAMPLE.INPUT1 adalah file input tempat data diteruskan ke MYPROG. Ini disebut sebagai IN1 dalam program.
Output Data dalam JCL
Output dalam JCL dapat dikatalogkan ke dalam dataset atau diteruskan ke SYSOUT. Seperti yang disebutkan dalam bab pernyataan DD,SYSOUT=* mengarahkan output ke kelas yang sama seperti yang disebutkan dalam parameter MSGCLASS dari pernyataan JOB.
Menyimpan Log Pekerjaan
Menentukan MSGCLASS=Ymenyimpan log pekerjaan di JMR (Joblog Management and Retrieval). Seluruh log PEKERJAAN dapat dialihkan ke SPOOL dan dapat disimpan ke kumpulan data dengan memberikan perintah XDC terhadap nama pekerjaan di SPOOL. Ketika perintah XDC diberikan di SPOOL, layar pembuatan dataset terbuka. Log pekerjaan kemudian dapat disimpan dengan memberikan definisi PS atau PDS yang sesuai.
Log pekerjaan juga dapat disimpan ke dalam kumpulan data dengan menyebutkan kumpulan data yang sudah dibuat untuk SYSOUT dan SYSPRINT. Tetapi seluruh log pekerjaan tidak dapat ditangkap melalui cara ini (yaitu, JESMSG tidak akan dikatalogkan) seperti yang dilakukan di JMR atau XDC.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP1 EXEC PGM=MYPROG
//IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD DSN=MYDATA.URMI.SYSOUT,DISP=SHR
//SYSPRINT DD DSN=MYDATA.URMI.SYSPRINT,DISP=SHR
//SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2 EXEC PGM=SORT
Dalam contoh di atas, SYSOUT dikatalogkan di MYDATA.URMI.SYSOUT dan SYSPRINT di MYDATA.URMI.SYSPRINT.
Mengompilasi Program COBOL
Untuk menjalankan program COBOL dalam mode batch menggunakan JCL, program perlu dikompilasi dan modul beban dibuat dengan semua sub-program. JCL menggunakan modul beban dan bukan program sebenarnya pada saat eksekusi. Pustaka beban digabungkan dan diberikan ke JCL pada saat eksekusi menggunakanJCLLIB atau STEPLIB.
Ada banyak utilitas kompilator mainframe yang tersedia untuk mengkompilasi program COBOL. Beberapa perusahaan korporat menggunakan alat Manajemen Perubahan sepertiEndevor, yang mengumpulkan dan menyimpan setiap versi program. Ini berguna untuk melacak perubahan yang dibuat pada program.
//COMPILE JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID
//*
//STEP1 EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT DD SYSOUT=*
//*
IGYCRCTL adalah utilitas kompiler COBOL IBM. Opsi kompilator diteruskan menggunakan parameter PARM. Dalam contoh di atas, RMODE menginstruksikan kompilator untuk menggunakan mode pengalamatan relatif dalam program. Program COBOL diteruskan menggunakan parameter SYSIN dan copybook adalah pustaka yang digunakan oleh program di SYSLIB.
JCL ini menghasilkan modul beban program sebagai output yang digunakan sebagai input untuk pelaksanaan JCL.
Menjalankan Program COBOL
Di bawah contoh JCL di mana program MYPROG dijalankan menggunakan file input MYDATA.URMI.INPUT dan menghasilkan dua file output yang ditulis ke spool.
//COBBSTEP JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10 EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//SYSIN DD *
//CUST1 1000
//CUST2 1001
/*
Modul beban MYPROG terletak di MYDATA.URMI.LOADLIB. Ini penting untuk dicatat bahwa JCL di atas hanya dapat digunakan untuk modul COBOL non-DB2.
Meneruskan Data ke Program COBOL
Input data ke program batch COBOL dapat melalui file, parameter PARAM dan pernyataan SYSIN DD. Dalam contoh di atas:
Catatan data diteruskan ke MYPROG melalui file MYDATA.URMI.INPUT. File ini akan dirujuk dalam program menggunakan nama DD INPUT1. File dapat dibuka, dibaca dan ditutup dalam program.
Data parameter PARM ACCT5000 diterima di bagian LINKAGE dari program MYPROG dalam variabel yang ditentukan dalam bagian itu.
Data dalam pernyataan SYSIN diterima melalui pernyataan ACCEPT di bagian PROSEDUR program. Setiap pernyataan ACCEPT membaca satu catatan utuh (mis., CUST1 1000) ke dalam variabel penyimpanan yang berfungsi yang ditentukan dalam program.
Menjalankan program COBOL-DB2
Untuk menjalankan program COBOL DB2, utilitas IBM khusus digunakan dalam JCL dan program; Wilayah DB2 dan parameter yang diperlukan diteruskan sebagai masukan ke utilitas.
Langkah-langkah di bawah ini diikuti dalam menjalankan program COBOL-DB2:
Ketika program COBOL-DB2 dikompilasi, DBRM (Database Request Module) dibuat bersama dengan modul beban. DBRM berisi pernyataan SQL dari program COBOL dengan sintaksnya diperiksa agar benar.
DBRM terikat ke wilayah DB2 (lingkungan) di mana COBOL akan berjalan. Ini dapat dilakukan dengan menggunakan utilitas IKJEFT01 di JCL.
Setelah langkah pengikatan, program COBOL-DB2 dijalankan menggunakan IKJEFT01 (lagi) dengan pustaka beban dan pustaka DBRM sebagai input ke JCL.
//STEP001 EXEC PGM=IKJEFT01
//*
//STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(SSID)
RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
LIB('MYDATA.URMI.LOADLIB')
END
/*
Pada contoh di atas, MYCOBB adalah program COBOL-DB2 yang dijalankan menggunakan IKJEFT01. Harap dicatat bahwa nama program, DB2 Sub-Sistem Id (SSID), nama Rencana DB2 diteruskan dalam pernyataan SYSTSIN DD. Perpustakaan DBRM ditentukan di STEPLIB.
Utilitas Kumpulan Data IBM
Program utilitas adalah program yang telah ditulis sebelumnya, banyak digunakan dalam mainframe oleh pemrogram sistem dan pengembang aplikasi untuk memenuhi kebutuhan sehari-hari, mengatur dan memelihara data. Beberapa di antaranya tercantum di bawah dengan fungsinya:
Nama Utilitas | Kegunaan |
---|---|
IEHMOVE | Memindahkan atau menyalin set data berurutan. |
IEHPROGM | Menghapus dan mengganti nama set data; katalog atau set data tidak katalog selain VSAM. < |
IEHCOMPR | Membandingkan data dalam set data berurutan. |
IEBCOPY | Salin, Gabungkan, kompres, cadangkan, atau pulihkan PDS. |
IEFBR14 | Tidak ada utilitas operasi. Digunakan untuk mengembalikan kontrol ke pengguna dan mengakhiri. Biasanya digunakan untuk membuat dataset kosong atau menghapus dataset yang sudah ada. Misalnya, jika kumpulan data dikirimkan sebagai input ke program IEFBR14 dengan DISP = (OLD, DELETE, DELETE), kumpulan data tersebut akan dihapus saat pekerjaan selesai. |
IEBEDIT | Digunakan untuk menyalin bagian JCL yang dipilih. Sebagai Contoh, jika JCL memiliki 5 langkah dan kita hanya perlu menjalankan langkah 1 dan 3 saja, maka JCL IEBEDIT dapat dikodekan dengan kumpulan data yang berisi JCL sebenarnya untuk dieksekusi. Di SYSIN IEBEDIT, kita dapat menentukan LANGKAH1 dan LANGKAH3 sebagai parameter. Ketika JCL ini dijalankan, itu mengeksekusi LANGKAH 1 dan LANGKAH 3 dari JCL sebenarnya. |
IDCAMS | Membuat, menghapus, mengganti nama, katalog, set data uncatalog (selain PDS). Biasanya digunakan untuk mengelola dataset VSAM. |
Program utilitas ini perlu digunakan dengan pernyataan DD yang sesuai di JCL untuk mencapai fungsionalitas yang ditentukan.
Ikhtisar DFSORT
DFSORT adalah utilitas IBM yang kuat yang digunakan untuk menyalin, mengurutkan, atau menggabungkan kumpulan data. Pernyataan SORTIN dan SORTINnn DD digunakan untuk menentukan set data masukan. Pernyataan SORTOUT dan OUTFIL digunakan untuk menentukan data keluaran.
Pernyataan SYSIN DD digunakan untuk menentukan kondisi urutkan dan penggabungan. DFSORT umumnya digunakan untuk mencapai fungsi di bawah ini:
SORT file input dalam urutan posisi kolom yang ditentukan dalam file.
INCLUDE atau OMIT record dari file input berdasarkan kondisi yang ditentukan.
File input SORT MERGE dalam urutan posisi kolom yang ditentukan dalam file.
SORT JOIN dua atau lebih file input berdasarkan JOIN KEY yang ditentukan (bidang di setiap file input).
Jika ada pemrosesan tambahan yang harus dilakukan pada file masukan, program USER EXIT dapat dipanggil dari program SORT. Misalnya, jika ada header / trailer yang akan ditambahkan ke file output, maka program COBOL tertulis USER dapat dipanggil dari program SORT untuk melakukan fungsi ini. Dengan menggunakan kartu kontrol, data dapat diteruskan ke program COBOL.
Sebaliknya, SORT dapat dipanggil secara internal dari program COBOL untuk mengatur file input dalam urutan tertentu sebelum diproses. Biasanya, ini tidak disarankan mengingat performa untuk file besar.
Ikhtisar ICETOOL
ICETOOL adalah utilitas DFSORT multiguna yang digunakan untuk melakukan berbagai operasi pada kumpulan data. Set data input dan output dapat ditentukan menggunakan nama DD yang ditentukan pengguna. Operasi file ditentukan dalam pernyataan TOOLIN DD. Kondisi tambahan dapat ditentukan dalam pernyataan DD 'CTL' yang ditentukan pengguna.
Beberapa utilitas ICETOOL diberikan di bawah ini:
ICETOOL dapat mencapai semua fungsi DFSORT dalam satu atau lebih kondisi.
SPLICE adalah operasi kuat dari ICETOOL yang mirip dengan SORT JOIN, tetapi dengan fitur tambahan. Itu dapat membandingkan dua atau lebih file pada bidang yang ditentukan dan membuat satu atau lebih file keluaran seperti file dengan catatan yang cocok, file dengan catatan yang tidak cocok, dll.
Data dalam satu file di posisi tertentu dapat DIPERLUKAN ke posisi lain dalam file yang sama atau berbeda.
Sebuah File dapat dipecah menjadi n file berdasarkan kondisi tertentu. Sebagai contoh, sebuah file yang berisi nama-nama karyawan dapat dibagi menjadi 26 file yang masing-masing berisi nama yang dimulai dengan A, B, C, dan seterusnya.
Kombinasi manipulasi file yang berbeda dimungkinkan menggunakan ICETOOL dengan sedikit eksplorasi alat.
Ikhtisar SYNCSORT
SYNCSORT digunakan untuk menyalin, menggabungkan, atau mengurutkan dataset dengan performa tinggi. Ini memberikan pemanfaatan terbaik dari sumber daya sistem dan operasi yang efisien dalam ruang alamat 31-bit dan 64-bit.
Ini dapat digunakan di baris DFSORT yang sama dan dapat mencapai fitur yang sama. Itu dapat dipanggil oleh JCL atau dari dalam program yang dikodekan dalam bahasa COBOL, PL / 1 atau Assembler. Ini juga mendukung program User Exit untuk dipanggil dari program SYNCSORT.
Trik pengurutan yang sering digunakan dengan menggunakan utilitas ini dijelaskan di bab berikutnya. Persyaratan kompleks, yang membutuhkan pemrograman besar dalam COBOL / ASSEMBLER dapat dicapai dengan menggunakan utilitas di atas dalam langkah sederhana.
Persyaratan aplikasi sehari-hari di dunia korporat yang dapat dicapai dengan menggunakan Program Utilitas diilustrasikan di bawah ini:
1. A file has 100 records. The first 10 records need to be written to output file.
//JSTEP020 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=MYDATA.URMI.STOPAFT,DISP=SHR
//OUT1 DD SYSOUT=*
//TOOLIN DD *
COPY FROM(IN1) TO(OUT1) USING(CTL1)
/*
//CTL1CNTL DD *
OPTION STOPAFT=10
/*
Opsi STOPAFT akan berhenti membaca file input setelah record ke-10 dan menghentikan program. Oleh karena itu, 10 catatan ditulis ke keluaran.
2. Input file has one or more records for same employee number. Write unique records to output.
//STEP010 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=MYDATA.URMI.DUPIN,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,15,ZD,A)
SUM FIELDS=NONE
/*
SUM FIELDS = NONE menghapus duplikat pada field yang ditentukan di SORT FIELDS. Pada contoh di atas, nomor karyawan pada posisi lapangan 1,15. File keluaran akan berisi nomor karyawan unik yang diurutkan dalam urutan menaik.
3. Overwrite input record content.
//JSTEP010 EXEC PGM=SORT
//SORTIN DD DSN= MYDATA.URMI.SAMPLE.MAIN,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC OVERLAY=(47:1,6)
/*
Di file input, konten di posisi 1,6 ditimpa ke posisi 47,6 lalu disalin ke file output. Operasi INREC OVERLAY digunakan untuk menulis ulang data dalam file input sebelum menyalin ke output.
4. Adding a sequence number to the output file.
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1
data2
data3
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
BUILD=(1:1,5,10:SEQNUM,4,ZD,START=1000,INCR=2)
/*
Outputnya adalah:
data1 1000
data2 1002
data3 1004
Nomor urut 4 digit ditambahkan dalam keluaran pada posisi 10, mulai dari 1000 dan bertambah 2 untuk setiap catatan.
5. Adding Header/Trailer to output file.
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1
data2
data3
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL REMOVECC,
HEADER1=(1:C'HDR',10:X'020110131C'),
TRAILER1=(1:C'TRL',TOT=(10,9,PD,TO=PD,LENGTH=9))
/*
Outputnya adalah:
HDR 20110131
data1
data2
data3
TRL 000000003
TOT menghitung jumlah record dalam file input. HDR dan TRL ditambahkan sebagai pengenal ke header / trailer, yang ditentukan oleh pengguna dan dapat disesuaikan sesuai kebutuhan pengguna.
6. Conditional Processing
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1select
data2
data3select
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=(6,1,CH,NE,C' '),BUILD=(1:1,15),
IFTHEN=(WHEN=(6,1,CH,EQ,C' '),BUILD=(1:1,5,7:C'EMPTY ')
OPTION COPY
/*
Outputnya adalah:
data1select
data2 EMPTY
data3select
Berdasarkan posisi ke-6 file, BUILD file output bervariasi. Jika posisi ke-6 adalah SPASI, maka teks "KOSONG" ditambahkan ke record input. Jika tidak, catatan masukan ditulis ke keluaran, sebagaimana adanya.
7. Backing up a file
//JSTEP001 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
//SYSOUT DD SYSOUT=*
//SORTOUT DD DUMMY
//SYSUT1 DD DSN=MYDATA.URMI.ORIG,DISP=SHR
//SYSUT2 DD DSN=MYDATA.URMI.BACKUP,DISP=(NEW,CATLG,DELETE),
// DCB=*.SYSUT1,SPACE=(CYL,(50,1),RLSE)
IEBGENER menyalin file di SYSUT1 ke file di SYSUT2. Harap dicatat bahwa file di SYSUT2 mengambil DCB yang sama dengan SYSUT1 pada contoh di atas.
8. File Comparison
//STEP010 EXEC PGM=SORT
//MAIN DD *
1000
1001
1003
1005
//LOOKUP DD *
1000
1002
1003
//MATCH DD DSN=MYDATA.URMI.SAMPLE.MATCH,DISP=OLD
//NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,DISP=OLD
//NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,DISP=OLD
//SYSOUT DD SYSOUT=*
//SYSIN DD *
JOINKEYS F1=MAIN,FIELDS=(1,4,A)
JOINKEYS F2=LOOKUP,FIELDS=(1,4,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(?,F1:1,4,F2:1,4)
OPTION COPY
OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,4)
OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,4)
OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,4)
/*
JOINKEYS menentukan bidang tempat kedua file dibandingkan.
REFORMAT FIELDS =? menempatkan 'B' (catatan yang cocok), '1' (ada di file1, tapi tidak di file2), atau '2' (ada di file2 tapi tidak di file1) di posisi pertama dari BUILD keluaran.
JOIN UNPAIRED melakukan gabungan luar penuh pada dua file.
Outputnya adalah:
MATCH File
1000
1003
NOMATCH1 File
1001
1005
NOMATCH2 File
1002
Fungsionalitas yang sama dapat dicapai dengan menggunakan ICETOOL juga.