Showing posts with label COBOL JCL and Utilities. Show all posts
Showing posts with label COBOL JCL and Utilities. Show all posts

Friday, February 17, 2012

COBOL: Blocked and unblocked files

If the creating program lacks a file blocking statement the dataset is created with no record blocking (i.e. FIXED)!!


FD  CRBREDL                               
    BLOCK CONTAINS 0 RECORDS  ---> If omitted causes BLKSIZE=F            
    LABEL RECORD IS STANDARD              
    RECORDING MODE IS F.                  
01  CRBREDL-REC                 PIC X(43).


From the IBM manual, "Enterprise COBOL for Z/OS"


"In a COBOL program, you can establish the size of a physical record with the BLOCK CONTAINS clause. If you do not use this clause, the compiler assumes that the records are NOT blocked. Blocking QSAM files on disk can enhance processing speed and minimize storage requirements."  




SPACE (cyls)
EXCPS
(number of I/Os)
# Records
CLOCK TIME (minutes)
Unblocked (LRECL=43)
2588
4142000
1107944
149.2
Blocked at half-track (standard)
183
1061000
1250200
73.3
Savings
93% reduction
74% reduction
13% increase
51% reduction


Huge space and clock savings in spite of 13% increase in volume.

Thursday, December 8, 2011

List of commonly encountered abends....desc in few lines

Following is the list of mainframe abends.


'S000 U4000 PROBABLY BAD DB ACCESS IN A PLI PROGRAM.
' CHECK ELEMENT LENGTH, URT, DBURT, ETC.'
'S001 - I/O ERROR DURING CLOSING (EOV SPACE)'
'S002 - DCB ERROR (BLKSIZE NOT MULTIPLE OF LRECL)'
'S003 - FILE SEQUENCE ERROR'
'S004 - DCB ERROR'
'S008 - SYNAD ROUTINE ERROR'
'S013 - OPEN ERROR (IF RC=20, PROBABLE BLOCK SIZE)'
'S028 - SYSTEM PAGING ERROR'
'S02B - USER RETURN CODE IS TOO HIGH'
'S033 - ISAM OPEN ERROR'
'S03B - ISAM OPEN ERROR (BAD DCB INFO)'
'S05C - SYSTEM ADDRESS ALLOCATION ERROR'
'S08B - PROGRAM ERROR (PROBABLE PARAMETER)'
'S0B7 - SPACE'
'S0C1 - OPERATION EXCEPTION (CORRECT COMPILE PROCEDURE USED??)'
'S0C2 - PRIVILEGED OPERATION EXCEPTION'
'S0C3 - EXECUTION EXCEPTION'
'S0C4 - PROTECTION EXCEPTION'
'S0C5 - ADDRESS EXCEPTION'
'S0C6 - SPECIFICATION EXCEPTION'
'S0C7 - DATA EXCEPTION'
'S0C8 - OVERFLOW EXCEPTION'
'S0C9 - DIVIDE EXCEPTION'
'S0CA - DECIMAL OVERFLOW'
'S0CB - DECIMAL DIVIDE EXCEPTION'
'S0CC - EXPONENT OVERFLOW'
'S0CD - UNDERFLOW EXCEPTION'
'S0E0 - SQUARE ROOT ERROR'
'S0E6 - DATA SET SCRATCHED'
'S106 - PROBABLE GETMAIN SPACE ERROR'
'S137 - END-OF-TAPE ERROR'
'S214 - FILE CLOSE ERROR ON TAPE '
'S222 - CANCELED OR TIMED OUT'
'S313 - OPEN ERROR ON DASD'
'S314 - CLOSE ERROR ON DASD'
'S322 - TIMED OUT (CHECK JOB OR EXEC CARD)'
'S337 - END-OF-DATA SET'
'S413 - OPEN ERROR (TAPE OR DASD ONLY)'
'S414 - CLOSE ERROR (TAPE OR DASD ONLY)'
'S513 - OPEN ERROR (TAPE ONLY)'
'S522 - TIMED OUT (PROBABLY WAITED 30 MINUTES FOR ANSWER)'
'S613 - OPEN ERROR (TAPE ONLY)'
'S614 - CLOSE ERROR (DASD ONLY)'
'S706 - MODULE MARKED AS "NOT EXECUTABLE"'
'S70A - SYSTEM OR MACHINE ERROR'
'S713 - OPEN ERROR (TAPE OR DASD ONLY)'
'S714 - CLOSE ERROR (TAPE ONLY)'
'S722 - SYSOUT OUTPUT LIMIT (OUTLIM) EXCEEDED'
'S778 - SYSTEM OR MACHINE ERROR'
'S7F1 - EXPDT ERROR. CHECK 99000 OR 98000'
'S804 - VIRTUAL STORAGE SPACE ERROR'
'S806 - MODULE NAME MISSING OR MISSPELLED(BAD URT OR LINKLIB?)'
'S80A - INSUFFICIENT SPACE FOR WORKAREA'
'S878 - VIRTUAL SPACE ERROR.(POSSIBLY A LOOP OR BAD URT)'
'S813 - OPEN ERROR (TAPE ONLY)'
'S913 - OPEN ERROR (VIRTUAL ONLY)'
'SA03 - TASK TERMIN ERROR (SEE LAST FILES. CHECK EZTVFM OVERRIDE)'
'SA13 - OPEN ERROR (TAPE ONLY)'
'SA14 - CLOSE ERROR (DASD ONLY)'
'SB13 - OPEN ERROR (PRINTER)'
'SB14 - CLOSE ERROR (PDS)'
'SB23 - WTOR NOT ANSWERED'
'SB37 - INSUFFICIENT SPACE (FILE SIZE. ALLOCATE MORE CYL)'
'SB78 - GETMAIN OR FREEMAIN ERROR'
'SD37 - INSUFFICIENT SPACE (PACK FULL. CLEAN UP OR RE-ORG)'
'SE37 - INSUFFICIENT SPACE.(LIBR FULL. CLEAN,RE-ORG,RE-ALLOCATE)'

JCL: How buffer processing works for sequential files


In the normal course of events, a program will:

  1. Issue a GET request. 

  2. Go into a wait until the first I/O completes. This I/O will bring in to storage a number of blocks equivalent to the BUFNO specified for that data set. If no BUFNO is specified, a default of five blocks will be retrieved on this first I/O.

  3. Be returned the first record of the first buffer.

  4. Process that record.

  5. Issue a GET for the next record. This record will be returned from the in-storage buffer with no I/O required.

  6. Continue issuing GETs until the last record of the last buffer is returned.

  7. Issue a GET for the next record. At this point, another I/O must be issued to retrieve the next BUFNO number of blocks. Again, the program is put into a wait until the I/O completes.

  8. Carry on in this manner until the program completes.As with BSAM, there is a limit of 240 KB per I/O. If more than 240 KB worth of buffers are specified, QSAM will do double buffering. That is, QSAM will schedule a second I/O while the program is processing the results of the previous I/O. This is transparent to the application program, which simply continues to be returned records for every GET request.

COBOL: Continuing JCL PARM



If you have a very lenghthy PARM parameter, code the data till 71st column and code the remaining data in the following line starting exactly from 16th column.

In the below example, the program will receive PARM data of "SKIP=102-120,241-259,279-297,308-326,353-371,442-470,590-608,635-653"

//DROPFLC EXEC PGM=TEST,
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
// PARM='SKIP=102-120,241-259,279-297,308-326,353-371,442-470,590-608,6
//             35-653'
//SYSPRINT DD SYSOUT=*
//*

In the below example, the program will receive PARM data of "SKIP=102-120,241-259,279-297,308-326,353-371,442-470,590-608,6  35-653" as 16t and 17th positions are blank in the continuation line.

//DROPFLC EXEC PGM=TEST,
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
// PARM='SKIP=102-120,241-259,279-297,308-326,353-371,442-470,590-608,6
//               35-653'
//SYSPRINT DD SYSOUT=*
//*

Monday, September 26, 2011

Sample COBOL compile job

Below is a sample compile job for a COBOL program.


//RXS55MP3 JOB (8820,TEST),CLASS=X,MSGCLASS=8,NOTIFY=&SYSUID
//*------------------------------------------------------------------
//COMPILE EXEC PGM=CWPCMAIN,REGION=4M,COND=(8,LT),
// PARM=('NOADV,APOST,DYNAM,LIB,OPT,RENT,RES,NOSEQ,OFF')
//STEPLIB DD DISP=SHR,DSN=SYS1.SIGYCOMP
//SYSTERM DD SYSOUT=(*)
//SYSPRINT DD SYSOUT=(8)
//CWPERRM DD SYSOUT=(8)
//SYSPUNCH DD DUMMY
//SYSUT1 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT2 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT3 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT4 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT5 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT6 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSUT7 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//*-----------------------------------------------------------------
//* IF YOU ARE USING DFSMS 1.1 OR GREATER YOU MAY CHANGE THE
//* THE BLKSIZE=400 TO A BLKSIZE=4000 BELOW
//*-----------------------------------------------------------------
//SYSLIN DD DISP=(NEW,PASS),DCB=(LRECL=80,BLKSIZE=400),
// SPACE=(CYL,(1,1)),STORCLAS=STANDARD,UNIT=SYSDA
//SYSLIB DD DISP=SHR,DSN= copy lib goes here
//*------------------------------------------------------------------
//* INPUT DATATSET
//*------------------------------------------------------------------
//SYSIN DD DISP=(SHR,PASS),
// DSN=RXS5549.TSTS.ISS1142(SVCMBXXX) cobol source code
//*
//*------------------------------------------------------------------
//* COMPUWARE DD'S
//*------------------------------------------------------------------
//XOPTIONS DD DISP=SHR,DSN=COMPWARE.PRDS.TSO.XPED.XOPTIONS
//CWPDDIO DD DISP=SHR,
// DSN=RXS5549.TSTS.DDIO
//CWPPRMO DD *
COBOL(OUTPUT(PRINT,DDIO))
PROCESSOR(OUTPUT(NOPRINT,NODDIO),TEXT(NONE))
LANGUAGE(VSCOBOLII)
DDIO(OUTPUT(NOLIST,NOXREF,FIND,NODMAP,NOOFFSET,COMPRESS))
/*
//*
//*------------------------------------------------------------------
//* LINKEDIT STEP
//*------------------------------------------------------------------
//LINK EXEC PGM=IEWL,REGION=4M,COND=(8,LE),
// PARM=('LIST,LET,XREF,NAME=ALIAS')
//SYSPRINT DD SYSOUT=(8)
//SYSLIN DD DISP=(SHR,PASS),
// DSN=*.COMPILE.SYSLIN
//SYSLIB DD DSN=RXS5549.TSTS.LOADLIB,
// DISP=SHR,DCB=BLKSIZE=32760
// DD DISP=SHR,DSN=SYS1.LINKLIB
// DD DISP=SHR,DSN=SYS1.SCEELKED
//*------------------------------------------------------------------
//* LINKEDIT OUTPUT DATASET
//*------------------------------------------------------------------
//SYSLMOD DD DISP=SHR,
// DSN=RXS5549.TSTS.LOADLIB(SVCMBXXX)
//SYSUT1 DD SPACE=(CYL,(2,2)),STORCLAS=STANDARD,UNIT=SYSDA
//*
//*--------------------------------------------------------------------
//* ABEND; POSSIBLE E37, CHECK OUTPUT LISTING FOR DETAILS
//* EXECUTE THIS STEP ONLY IF A PREVIOUS STEP ABENDS
//*--------------------------------------------------------------------
//ABEND EXEC PGM=IKJEFT01,
// COND=ONLY
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY : JOB ABENDED; SEE LISTING FOR DETAILS.' USER(*) LOGON
//*
//*--------------------------------------------------------------------
//* COMPILE RETURN CODE MESSAGE
//*--------------------------------------------------------------------
//COMP00 EXEC PGM=IKJEFT01,
// COND=((00,NE,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC=00: COMPILE ' USER(*) LOGON
//*
//COMP04 EXEC PGM=IKJEFT01,
// COND=((04,NE,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC=04: COMPILE ' USER(*) LOGON
//*
//COMP08 EXEC PGM=IKJEFT01,
// COND=((08,GT,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC>=08: COMPILE ' USER(*) LOGON
//*
//*--------------------------------------------------------------------
//* LINKEDIT RETURN CODE MESSAGE
//*--------------------------------------------------------------------
//LINK00 EXEC PGM=IKJEFT01,
// COND=((00,NE,LINK),(8,LE,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC=00: LINKEDIT ' USER(*) LOGON
//*
//LINK04 EXEC PGM=IKJEFT01,
// COND=((04,NE,LINK),(8,LE,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC=04: LINKEDIT ' USER(*) LOGON
//*
//LINK08 EXEC PGM=IKJEFT01,
// COND=((08,GT,LINK),(8,LE,COMPILE))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
SE 'COPY RC>=08: LINKEDIT ' USER(*) LOGON
//*