JCL Overview

JCL (Job Control Language) เป็น programming language ที่ใ้ช้ในการควบคุมการทำงานบน Mainfram JCL จะถูก interpret และำ execute โดย JES (Job Entry Subsystem) ฮับ ซึ่งเป็น subsystem ของ MVS อีกที ดังนั้นก่อนจะรู้จัก JCL เรามาทำความรู้จักกับ MVS กันคร่าวๆ กันก่อน

โครงสร้าง JCL จะประกอบไปด้วย
  1. // ทุกบรรทัีดของ JCL จะเริ่มต้นด้วย // ซึ่งบรรทัดไหนที่ไม่มี // ขึ้นต้น อาจจะเป็นส่วนของ data หรือว่าคำสั่งพิเศษ ที่ใช้กับ software อื่นๆ
  2. job name เริ่มต้นที่ column 3 JCL name สามารถยาวได้ 8 ตัวอักษร และสามารถประกอบด้วยตัวอักษร และตัวเลข และอักขระพิเศษอื่นๆ เช่น @, $, # แต่ไม่สามารถใช้ - หรือขึ้นต้นด้วยตัวเลขได้
  3. JCL operator เริ่มต้นได้ตั้งแต่ column 4 ซึ่งมีด้วยกัน 3 ตัว คือ JOB, EXEC และ DD
    • JOB จะถูกใช้เป็น statement แรก ที่ใช้ระบุข้อมูลของ job นั้นๆ
    • EXEC เป็น operator ที่ใช้ใันแต่ละ step ของแต่ละ job เป็นตัวบอกว่า ในแต่ละ step จะต้อง execute อะไร
    • DD (Data Definition) เป็น operator ที่ระบุที่อยู่ของข้อมูล และลักษณะของข้อมูล ที่จะใช้ในการ process ของ step นั้นๆ
  4. JCL parameter ซึ่งแล้วแต่ JCL Operator ที่ใช้ สำหรับในกรณีที่ parameter เยอะ สามารถขึ้นบรรทัดใหม่ได้ แต่ปิดบรรทัดด้วย , และจะต้องเริ่มต้นที่ column 4-16 เท่านั้น (โดยที่ column แรกยังคงต้องเป็น //) parameter ที่ใส่ใน JCL สามารถใช้แบบตามตำแหน่ง คือจะต้องใส่ให้เีรียงกันไปตามตำแหน่งให้ถูกต้อง หรือว่าจะใส่โดยใช้ parameter name เป็นตัวบอกและใส่ = ต่อท้ายก็ได้ ซึ่งโดยปกติก็จะนิยมแบบหลังมากกว่า เพราะว่า parameter ค่อยข้างเยอะ จำได้ยากว่าจะต้องตัวไหนมาก่อนมาหลัง
  5. อาจจะปิดท้ายด้วย sequence number 8 ตัว ซึ่งอาจจะมีหรือไม่มีก็ได้ เป็น optional ดังนั้น JCL name, operator และ parameter จะอยู่ใน column 3 - 71 เท่านั้น

สำหรับคนที่ีไม่ชินกับ Mainframe อาจจะไม่เข้าใจว่า column ที่ว่าคืออะไร มันก็คือ text ตัวที่เท่าไรในบรรทัดนั้นๆ นะเอง ใน editor บางตัวเราจะเห็นได้จาก status bar ที่โชว์ว่า ณ.ขณะนี้ cursor เราอยู่ที่ บรรทัดอะไร column อะไร ซึ่ง programming language ใน Mainframe ส่วนใหญ่จะต้องอิงตาม column และจะ้ต้องใช้ให้ถูกด้วย ม่ะงั้นมันจะ compile ไม่ผ่าน

ตัวอย่าง JCL ฮับ Job นี้ชื่อว่า IS198CPY มี step เดียวชื่อ COPY01 และก็มี parameter มากมายโดยใช้คู่กับ parameter name

//IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X
//COPY01 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=OLDFILE,DISP=SHR
//SYSUT2 DD DSN=NEWFILE,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(40,5),RLSE),
// DCB=(LRECL=115,BLKSIZE=1150)
//SYSIN DD DUMMY

Comment ใน JCL จะใช้ มี 2 แบบ
  1. all line comment จะใช้ //* ขึ้นต้น และ มันจะ ignore ข้อความหลังจากนั้นทั้งบรรทัด
  2. หรือ ถ้าเราเว้น space ด้านหลังของ parameter ก็จะถือเป็น comment เหมือนกัน ซึ่งนั้นก็หมายความว่า parameter ด้านหลังทั้งหมดจะต้องติดกัน ห้ามเว้น space เลยฮับ มิฉะนั้น parameter นั่นจะหายไปเลย... แง๊ว
แต่ถ้าเราใส่ // โดยไม่มี * จะหมายถึง หยุดการ process ทั้งหมดแค่นี้

JCL จะถูกอ่านโดย JES2 (subsystem หนึ่งของ MVS) เพื่อเช็ค syntax และเปลี่ยนให้เป็นงานที่อยู่ในคิว โดยงานแต่ละคิว จะถูกแบ่งตาม Class และ initiator จะเป็นตัวจัดการกับงานที่อยุ่ในคิวต่างๆ อีกที โดยเลือกงานตามลำดับความสำคัญ และ กำหนด I/O ตามที่งานนั้นต้องการ โดยใช้ MVS Service ช่วยอีกที

Reference:
Job Control Language - Wikipedia
JCL Study Material

No comments:

Post a Comment