JCL - การกำหนดชุดข้อมูล
ชื่อชุดข้อมูลระบุชื่อของไฟล์และแสดงโดย DSN ใน JCL พารามิเตอร์ DSN อ้างถึงชื่อชุดข้อมูลจริงของชุดข้อมูลที่สร้างขึ้นใหม่หรือที่มีอยู่ ค่า DSN สามารถประกอบด้วยชื่อย่อยแต่ละชื่อที่มีความยาว 1 ถึง 8 อักขระคั่นด้วยจุดและความยาวรวม 44 อักขระ (ตัวเลขและตัวอักษร) ต่อไปนี้เป็นไวยากรณ์:
DSN=&name | *.stepname.ddname
Temporary datasetsต้องการพื้นที่จัดเก็บสำหรับระยะเวลางานเท่านั้นและจะถูกลบเมื่องานเสร็จสิ้น ชุดข้อมูลดังกล่าวแสดงเป็นDSN=&name หรือเพียงไม่ระบุ DSN
หากจะใช้ชุดข้อมูลชั่วคราวที่สร้างขึ้นโดยขั้นตอนงานในขั้นตอนงานถัดไปชุดข้อมูลดังกล่าวจะอ้างอิงเป็น DSN=*.stepname.ddname. นี้เรียกว่าBackward Referencing.
การเชื่อมต่อชุดข้อมูล
หากมีชุดข้อมูลที่มีรูปแบบเดียวกันมากกว่าหนึ่งชุดข้อมูลเหล่านี้สามารถเชื่อมต่อกันและส่งผ่านเป็นอินพุตไปยังโปรแกรมในชื่อ 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
ในตัวอย่างข้างต้นชุดข้อมูลสามชุดจะเชื่อมต่อกันและส่งผ่านเป็นอินพุตไปยังโปรแกรม SORT ในชื่อ SORTIN DD ไฟล์จะถูกรวมเรียงลำดับบนฟิลด์คีย์ที่ระบุแล้วเขียนลงในไฟล์เอาต์พุตเดียว SAMPLE.OUTPUT ในชื่อ SORTOUT DD
การลบล้างชุดข้อมูล
ใน JCL ที่เป็นมาตรฐานโปรแกรมที่จะดำเนินการและชุดข้อมูลที่เกี่ยวข้องจะถูกวางไว้ในโพรซีเดอร์ที่ทำแค็ตตาล็อกซึ่งเรียกว่าใน JCL โดยปกติแล้วสำหรับวัตถุประสงค์ในการทดสอบหรือเพื่อการแก้ไขเหตุการณ์อาจจำเป็นต้องใช้ชุดข้อมูลอื่นนอกเหนือจากที่ระบุไว้ในขั้นตอนการจัดทำแค็ตตาล็อก ในกรณีนั้นชุดข้อมูลในโพรซีเดอร์สามารถแทนที่ได้ใน 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
ในตัวอย่างข้างต้นชุดข้อมูล IN1 ใช้ไฟล์ MYDATA.URMI.INPUT ใน PROC ซึ่งถูกแทนที่ใน JCL ดังนั้นไฟล์อินพุตที่ใช้ในการดำเนินการคือ MYDATA.OVER.INPUT โปรดทราบว่าชุดข้อมูลเรียกว่า STEP1.IN1 หากมีเพียงขั้นตอนเดียวใน JCL / PROC ชุดข้อมูลสามารถอ้างอิงได้ด้วยชื่อ DD ในทำนองเดียวกันหากมีมากกว่าหนึ่งขั้นตอนใน JCL ชุดข้อมูลจะถูกแทนที่เป็น 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
//*
ในตัวอย่างข้างต้นจากชุดข้อมูลสามชุดที่ต่อกันใน IN1 ชุดข้อมูลแรกจะถูกแทนที่ใน JCL และส่วนที่เหลือจะถูกเก็บไว้ตามที่มีอยู่ใน PROC
การกำหนด GDG ใน JCL
Generation Data Groups (GDG) คือกลุ่มของชุดข้อมูลที่เกี่ยวข้องกันโดยใช้ชื่อสามัญ ชื่อสามัญเรียกว่าฐาน GDG และชุดข้อมูลแต่ละชุดที่เกี่ยวข้องกับฐานเรียกว่าเวอร์ชัน GDG
ตัวอย่างเช่น MYDATA.URMI.SAMPLE.GDG คือชื่อฐาน GDG ชุดข้อมูลมีชื่อเป็น MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 เป็นต้น GDG เวอร์ชันล่าสุดเรียกว่า MYDATA.URMI.SAMPLE.GDG (0) เวอร์ชันก่อนหน้านี้เรียกว่า (-1), (-2) เป็นต้น เวอร์ชันถัดไปที่จะสร้างในโปรแกรมจะอ้างอิงเป็น MYDATA.URMI.SAMPLE.GDG (+1) ใน JCL
สร้าง / แก้ไข GDG ใน JCL
เวอร์ชัน GDG สามารถมีพารามิเตอร์ DCB เหมือนกันหรือต่างกันได้ DCB รุ่นเริ่มต้นสามารถกำหนดให้ใช้ได้กับทุกเวอร์ชัน แต่สามารถแทนที่ได้เมื่อสร้างเวอร์ชันใหม่
//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)
//
ในตัวอย่างข้างต้นยูทิลิตี้ IDCAMS กำหนดฐาน GDG ใน GDGSTEP1 ด้วยพารามิเตอร์ด้านล่างที่ส่งผ่านในคำสั่ง SYSIN DD:
NAME ระบุชื่อชุดข้อมูลจริงของฐาน GDG
LIMIT ระบุจำนวนเวอร์ชันสูงสุดที่ฐาน GDG สามารถรองรับได้
EMPTY ไม่ได้รับการบันทึกทุกรุ่นเมื่อถึง LIMIT
NOEMPTY Uncataloges รุ่นล่าสุดน้อยที่สุด
SCRATCH ลบการสร้างทางกายภาพเมื่อไม่มีการบันทึกข้อมูล
NOSCRATCH อย่าลบชุดข้อมูลกล่าวคือสามารถอ้างถึงได้โดยใช้พารามิเตอร์ UNIT และ VOL
ใน GDGSTEP2 ยูทิลิตี้ IEFBR14 ระบุพารามิเตอร์ DD รุ่นที่จะใช้กับทุกเวอร์ชัน
IDCAMS สามารถใช้เพื่อเปลี่ยนพารามิเตอร์นิยามของ GDG เช่นการเพิ่ม LIMIT การเปลี่ยน EMPTY เป็น NOEMPTY เป็นต้นและเวอร์ชันที่เกี่ยวข้องโดยใช้คำสั่ง SYSIN คือ ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.
ลบ GDG ใน JCL
เมื่อใช้ยูทิลิตี้ IEFBR14 เราสามารถลบ GDG เวอร์ชันเดียวได้
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
ในตัวอย่างข้างต้นเวอร์ชันล่าสุดของ MYDATA.URMI.SAMPLE.GDG จะถูกลบ โปรดทราบว่าพารามิเตอร์ DISP เมื่อเสร็จสิ้นงานปกติถูกเข้ารหัสเป็น DELETE ดังนั้นชุดข้อมูลจะถูกลบเมื่องานเสร็จสิ้นการดำเนินการ
IDCAMS สามารถใช้เพื่อลบ GDG และเวอร์ชันที่เกี่ยวข้องโดยใช้คำสั่ง SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.
FORCEลบเวอร์ชัน GDG และฐาน GDG หาก GDG เวอร์ชันใด ๆ ถูกตั้งค่าด้วยวันที่หมดอายุซึ่งยังไม่หมดอายุจะไม่มีการลบออกดังนั้นจึงยังคงฐาน GDG ไว้
PURGE ลบเวอร์ชัน GDG และฐาน GDG โดยไม่คำนึงถึงวันที่หมดอายุ
ใช้ GDG ใน JCL
ในตัวอย่างต่อไปนี้เวอร์ชันล่าสุดของ MYDATA.URMI.SAMPLE.GDG ถูกใช้เป็นอินพุตของโปรแกรมและ MYDATA.URMI.SAMPLE.GDG เวอร์ชันใหม่ถูกสร้างขึ้นเป็นเอาต์พุต
//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
ที่นี่หาก GDG ถูกอ้างถึงด้วยชื่อจริงเช่น MYDATA.URMI.SAMPLE.GDG.G0001V00 ก็จะนำไปสู่การเปลี่ยน JCL ทุกครั้งก่อนดำเนินการ การใช้ (0) และ (+1) ทำให้แทนที่เวอร์ชัน GDG แบบไดนามิกสำหรับการดำเนินการ