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 แบบไดนามิกสำหรับการดำเนินการ