Hello, here's a mystery for you. We recently put a new job (PROC and JCL) into production. The PROC and the JCL do contain several symbolic parameters, so that the SAME PROC can be used in production AND in all our test regions. But the symbolics aren't involved in the problem, it appears
The proc contains several steps coded like this
//ABND07 EXEC PGM=ABEND,COND=(0,EQ,STEP07)
"STEP07" is a DB2 program that might not abend if it has problems and puts out a "bad" condition code. So, we have these abend-checker steps. MANY jobs here have them, coded just like this, and they have never caused trouble.
Our job ran fine many times in test regions. That is, the ABND steps did NOT execute. However the 1st time we ran in production, the 1st abend step DID execute -- even though the condition code from the previous step was 0 -- and when job was restarted the other abnd steps also executed when prior step had condition code = 0
SO it seems something caused production to ignore the existence of the cond code check
I did notice this: We use a command JEM here to do JCL checking
When I check the test JCL in the test system I get messages like this one
STEP WAS NOT RUN DUE TO CONDITION CODE 0
"EQ" "SSSS.STEP07"
for all abend steps
In production I do not get such messages
So it seems in production the existence of a condition code check is ignored.
is the jem message an error message ?
if not, a message from jem in the test environment where everything works smells fishy
just forget about JEM then, it is known for issuing false positives !
Quote:
so it seems something caused production to ignore the existence of the cond code check
most probably a badly written jcl
Quote:
So it seems in production the existence of a condition code check is ignored.
why blame the system ?
wild guess
if JEM assumes a 0 RC for all steps then based on that assumption it will tell that the <abend> step will not execute
if this does not happen on the production system ( the JEM messages I mean )
something makes JEM assume a non 0 Rc causing the <abend> step to execute
I think I've figured it out; actually the JEM messages in test gave me a clue. (those are WARNING msgs by the way, not error)
APPARENTLY in our test system SOMETHING allows both JEM and run time software to figure out that
//ABND07 EXEC PGM=ABEND,COND=(0,EQ,STEP07)
really means COND=(0,EQ,SSSS.STEP07) - that is stepname.procstepname
When I made a play proc and play JCl with stepname.procstepname in PRODUCTION and JEMmed it I got the warning messages! And so I am 99.9% certain it'll work when it is run with the PROC change
I DON'T THINK this stepname.procstepname is needed if you have just one straight proc in a job. This PROC has another PROC inside it. I think that messes things up; and I never do this, unless there is some really good reason -- as there is in this case
I would like to see if anybody has any more ideas about this. I've tried to set up similar jobs to get them to abend (or not) and so has one of our architects, and we CANNOT get jobs to fail (FAIL MEANS:
//ABND07 EXEC PGM=ABEND,COND=(0,EQ,STEP07)
the abend executes and abends the job EVEN THOUGH STEP07 ran fine with contion code = 0)
Our "play" jobs have included procs-within-procs and also DB2 programs since the original bad proc had all those. We've tried coding COND as above and ALSO COND=(0,EQ,SSSS.STEP07) and these all seem to work. And also, they all give the bypass messages
CAY6141I STEP WAS NOT RUN DUE TO CONDITION 0 "EQ" "SSSS.STEP07"
NOTE
1) JEM Seems to be able to "fill in" the SSSS stepname whether it is int he proc or not
2) Yes it looks like JEM assumes condition code from STEP07 IS 0 - so it says the ABND step will NOT run. That's what we want
We don't really know whether the JEM is significant or not -- as to why the job failed in production. (When these abend steps executed, and abended the job, it caused LARGE production problems so everyone is interested in this)
Somebody came up with the theory that JES is looking at some "other" condition code when it makes the abend steps run, and not the 0 that is shown in register 15 and also for the job statistics. I think thisi s kind of far-fetched
If you need me to copy in the whole proc and JCL, I can --- but it is a bit long and so I didn't do it here, since this message is ALREADY pretty long
Joined: 03 Oct 2009 Posts: 1787 Location: Bloomington, IL
Linda C wrote:
If you need me to copy in the whole proc and JCL, I can --- but it is a bit long and so I didn't do it here, since this message is ALREADY pretty long
Please do so; as you know, it's damned difficult to debug anything "blind", and many people will not bother to try (I did far too much of that at Itty-Bitty Machines in the 1990s).
No one seems to have a JCLcheck/JEM manual and can't find one online - I thought of what Enrico says because messages don't always mean what they appear to mean
OK here is production PROC. Sorry to take up lots of room but no way of knowing WHAT in the proc or JCL caused our problems (Note we have a standard here about filling in symbolics in any proc with production values as defaults)
Code:
//CPBD081R PROC NODE1='PBS',
// OQMEMB='OQDFDLPB',
// BOX='PROD.DB2P',
// YDB2='YDB2PDSN',
// LOINSTLB='ENDEVOR.PROD.STAGE2.DATA',
// CONDX='(0,GT)',
// STLIB='ENDEVOR.PROD.STAGE2.LOADLIB',
// UNITX=PROD
//*-------------------------------------------------------------------
//* DELETE OLD FILES
//*-------------------------------------------------------------------
//DEL01 EXEC PGM=IEFBR14
//*
//DD1 DD DSN=&NODE1..CPB.SR008100.SORTFILE,
// DISP=(MOD,DELETE,DELETE),
// UNIT=SYSDA,SPACE=(TRK,(1,0),RLSE)
//*
//DD2 DD DSN=&NODE1..CPB.AR002505.MULSRGRD,
// DISP=(MOD,DELETE,DELETE),
// UNIT=SYSDA,SPACE=(TRK,(1,0),RLSE)
----bla bla bla for about 15 flatfiles used in the job
//******************************************************************
//*** STEP 01 - CREATE BACKUP OF THE INPUT FILE ****
//******************************************************************
//*
//STEP01X EXEC PGM=BSPSTOPS
//*
//STEPLIB DD DSN=CPUB.SCHD.TEMPLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
// DD DSN=CPUB.SCHD.LOADLIB,DISP=SHR
// DD DSN=CPUB.SCHD.VENDLOAD,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=Z,DEST=LOCAL
//***********
//* I - PROCEDURE REVIEW ADD MULTIPLE SURGICAL REDUCTION CODES
//***********
//SYSUT1 DD DSN=&NODE1..CPBD.AR008100(0),
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - BACKUP OF MULTIPLE SURGICAL REDUCTION CODES
//***********
//SYSUT2 DD DSN=&NODE1..CPBD.BKUPCPBX.CPBD081R(+1),
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,(150,50),RLSE),
// DCB=(PBS.MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//******************************************************************
//*** STEP 02 - SORT TO ELIMINATE DUPLICATE RECORDS ****
//******************************************************************
//*
//STEP02 EXEC PGM=SORT
//*
//***********
//* I - PROCEDURE REVIEW ADD MULTIPLE SURGICAL REDUCTION CODES
//***********
//SORTIN DD DSN=&NODE1..CPBD.AR008100(0),
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - SORTED BENEFIT MUL SURG REC CODE FILE TO STEP07
//***********
//SORTOUT DD DSN=&NODE1..CPB.SR008100.SORTFILE,
// UNIT=&UNITX,
// SPACE=(TRK,(350,250),RLSE),
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,250)
//SORTWK02 DD UNIT=SYSDA,SPACE=(TRK,250)
//SORTWK03 DD UNIT=SYSDA,SPACE=(TRK,250)
//*
//SYSOUT DD SYSOUT=X
//SYSPRINT DD SYSOUT=X
//SYSUDUMP DD SYSOUT=X
//*
//SYSIN DD DSN=&LOINSTLB(CPBC581R),DISP=SHR
//*
//*-------------------------------------------------------------------
//*** STEP 03 - EXTRACT ALL MUL SURG RED CODES ****
//*** DAILY PROC/MOD UNLOAD MULTIPLE TABLE FILE ****
//*-------------------------------------------------------------------
//*
//STEP03 EXEC PGM=SORT
//*
//SYSOUT DD SYSOUT=*
//***********
//* I - PROC/MOD DAILY UNLOAD MULTIPLE FILE FROM/CPBD025D
//***********
//SORTIN DD DSN=&NODE1..CPBD.AD002505(0),
// DISP=(SHR,KEEP,KEEP)
//***********
//* O - PROC/MOD SELECTED RECORDS TO/STEP04
//***********
//SORTOUT DD DSN=&NODE1..CPB.AR002505.MULSRGRD,
// DISP=(NEW,CATLG,CATLG),
// UNIT=&UNITX,
// SPACE=(TRK,(550,450),RLSE),
// DCB=(RECFM=FB,LRECL=442,BLKSIZE=0)
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//*****
//SYSIN DD DSN=&LOINSTLB(CPBC681R),DISP=SHR
//*
//*-------------------------------------------------------------------
//* STEP04 - SORT EXTRACTED PROC/MOD BENEFIT CATEGORY DATA *
//* PROC/MOD/MULTIPLE SURGICAL REDUCTION CODES *
//*-------------------------------------------------------------------
//STEP04 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//***********
//* I - PROC/MOD SELECTED RECORDS FROM/STEP03
//***********
//SORTIN DD DSN=&NODE1..CPB.AR002505.MULSRGRD,
// DISP=SHR
//***********
//* O - PROC/MOD MULTIPLE EXTRACT FILE T/STEP07
//***********
//SORTOUT DD DSN=&NODE1..CPB.SR002505.MULSRGRD,
// DISP=(NEW,KEEP,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,(10,5),RLSE),
// DCB=(RECFM=FB,LRECL=442,BLKSIZE=0)
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(15,3),RLSE)
//*
//SYSIN DD DSN=&LOINSTLB(CPBC781R),
// DISP=SHR
//*
//******************************************************************
//*** STEP 05 WILL UNLOAD PSCO TABLE TO GET PSCO_ID ***
//******************************************************************
//*
//STEP05 EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB DD DSN=DB2.&BOX..LOADLIB.MOD,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPUNCH DD DUMMY
//SYSTSIN DD DSN=CPUB.SCHD.CARDLIB(&YDB2),DISP=SHR
// DD DSN=CPUB.SCHD.CARDLIB(DSNTIAUS),DISP=SHR
//*
//* OUTPUT - SELECTED RECORDS TO/STEP06
//SYSREC00 DD DSN=&NODE1..CPB.PROCMOD.CPBD081R,
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,SPACE=(TRK,(100,50),RLSE)
//*
//* INPUT SQL SCRIPT
//SYSIN DD DISP=SHR,DSN=&LOINSTLB(CPBC881R)
//*
//******************************************************************
//*** STEP 06 WILL SORT THE PSCO UNLOAD FILE ***
//******************************************************************
//*
//STEP06 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//***********
//* I - PSCO PROCMOD UNLOAD FILE FROM/STEP05
//***********
//SORTIN DD DISP=SHR,DSN=&NODE1..CPB.PROCMOD.CPBD081R
//***********
//* O - SORTED PSCO PROCMOD UNLOAD FILE TO STEP07 & STEP08
//***********
//SORTOUT DD DSN=&NODE1..CPB.PROCMOD.CPBD081R.SORTED,
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(CYL,(10,5),RLSE),
// DCB=(RECFM=FB,LRECL=64,BLKSIZE=0)
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
//*
//SYSIN DD DISP=SHR,DSN=&LOINSTLB(CPBC981R)
//*
//*-------------------------------------------------------------------
//* STEP 07 - CPBP8105 - EXTRACT MATCHED PROC/MOD ****
//* MULTIPLE SURGERY REDUCTION CODES ****
//*-------------------------------------------------------------------
//*
//STEP07 EXEC PGM=IKJEFT01,DYNAMNBR=20
//*
//STEPLIB DD DSN=&STLIB,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB.MOD,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPUNCH DD DUMMY
//*
//SYSTSIN DD DSN=ENDEVOR.PROD.STAGE2.DATA(&YDB2),DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.DATA(CPBP8105),DISP=SHR
//***********
//* INPUT DB2 SET COLLECTION
//***********
//OQDFDL00 DD DSN=ENDEVOR.PROD.STAGE2.DATA(&OQMEMB),DISP=SHR
//*
//***********
//* I - PROC/MOD SORTED INPUT FILE FROM/STEP02
//***********
//PMODFILE DD DSN=&NODE1..CPB.SR008100.SORTFILE,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* I - SORTED PSCO PROCMOD FILE FROM/STEP06
//***********
//DDPSCOIN DD DSN=&NODE1..CPB.PROCMOD.CPBD081R.SORTED,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* I - PROC/MOD SORTED MUL SURG RED CODES FROM/STEP04
//***********
//PSCOFILE DD DSN=&NODE1..CPB.SR002505.MULSRGRD,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - PROC/MOD MULSURG RED CODES TO/STEP09
//***********
//EXTRPMOD DD DSN=&NODE1..CPB.CPBP8100.EXTRFILE,
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,450,RLSE),
// DCB=(RECFM=FB,LRECL=442,BLKSIZE=0)
//*
//***********
//* O - PSCO HIST FILE TO/STEP11
//***********
//PSCOHIST DD DSN=&NODE1..CPBD.AR008106(+1),
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,450,RLSE),
// DCB=(PBS.MODEL,RECFM=FB,LRECL=116,BLKSIZE=0)
//*
//************************************************
//* FROM AND TO DATES AND TIMESTAMP TO BE USED BY ALL PROGRAMS
//* IN THIS JOB
//************************************************
//DATEOUTP DD DSN=&NODE1..CPB.CPBD081R.SYSDATES, TO STEP08 & STEP10
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,(5,5),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//*------------------------------------------------------------------
//* ABEND IF THE PREVIOUS DB2 PROGRAM HAD CONDITION CODE > 4 BUT
//* FAILED TO BLOW ITSELF UP.
//*
//*------------------------------------------------------------------
//ABND07 EXEC PGM=ABEND,COND=(0,EQ,STEP07)
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* ----------------------
//*
//*------------------------------------------------------------------
//*** STEP 08 - EXTRACT NEW PROC/MOD MULTIPLE SURGICAL REDUCTION CODES
//*-------------------------------------------------------------------
//STEP08 EXEC PGM=CPBP8115
//*
//STEPLIB DD DSN=&STLIB,DISP=SHR
// DD DSN=CPUB.SCHD.TEMPLIB,DISP=SHR
// DD DSN=CPUB.SCHD.LOADLIB,DISP=SHR
// DD DSN=CPUB.SCHD.VENDLOAD,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CPXMRPTS DD SYSOUT=*
//SYSABEND DD SYSOUT=Y,DEST=LOCAL
//*
//***********
//* I - PROC/MOD SORTED INPUT FILE FROM/STEP02
//***********
//PSCOFILE DD DSN=&NODE1..CPB.SR008100.SORTFILE,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* I - SORTED PSCO PROCMOD FILE FROM/STEP06
//***********
//DDPSCOIN DD DSN=&NODE1..CPB.PROCMOD.CPBD081R.SORTED,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - PROC/MOD NEW MUL SURG REC CODES TO/STEP09
//***********
//EXTRPMOD DD DSN=&NODE1..CPB.CPBP8110.EXTRFILE,
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,(750,200),RLSE),
// DCB=(RECFM=FB,LRECL=442,BLKSIZE=0)
//*
//************************************************
//* FROM AND TO DATES AND TIMESTAMP TO BE USED BY ALL PROGRAMS
//* IN THIS JOB
//************************************************
//DATEINPT DD DSN=&NODE1..CPB.CPBD081R.SYSDATES, FROM STEP07
// DISP=(OLD,KEEP,KEEP)
//*-------------------------------------------------------------------
//*** STEP 09 - SORT MULTIPLE SURGERY CODES FILES FROM ****
//*** PROGRAM 8105 AND 8110
//*-------------------------------------------------------------------
//*
//STEP09 EXEC PGM=SORT
//*
//***********
//* I - PROC/MOD MULT SURG RED CODES FROM/STEP07
//* I - PROC/MOD MULT SURG RED CODES FROM/STEP08
//***********
//SORTIN DD DSN=&NODE1..CPB.CPBP8100.EXTRFILE,
// DISP=(SHR,KEEP,KEEP)
// DD DSN=&NODE1..CPB.CPBP8110.EXTRFILE,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - SORTED PROC/MOD MUL SURG RED CODES FILE TO STEP10
//***********
//SORTOUT DD DSN=&NODE1..CPB.MULSRGRD.COMBFILE,
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,(550,450),RLSE),
// DCB=(RECFM=FB,LRECL=442,BLKSIZE=0)
//*
//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,250)
//SORTWK02 DD UNIT=SYSDA,SPACE=(TRK,250)
//SORTWK03 DD UNIT=SYSDA,SPACE=(TRK,250)
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//*
//SYSIN DD DSN=&LOINSTLB(CPBC781R),DISP=SHR
//*
//*-------------------------------------------------------------------
//*** STEP 10 - CPBP8125 - RENUMBER THE SRT-ODR-NO *
//*** IN SEQUENTIAL ORDER *
//*-------------------------------------------------------------------
//*
//STEP10 EXEC PGM=IKJEFT01,DYNAMNBR=20
//*
//STEPLIB DD DSN=&STLIB,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB.MOD,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPUNCH DD DUMMY
//*
//SYSTSIN DD DSN=ENDEVOR.PROD.STAGE2.DATA(&YDB2),DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.DATA(CPBP8125),DISP=SHR
//***********
//* INPUT DB2 SET COLLECTION
//***********
//OQDFDL00 DD DSN=ENDEVOR.PROD.STAGE2.DATA(&OQMEMB),DISP=SHR
//*
//***********
//* I - SORTED PROC/MOD MUL SURG REDUCTION CODES FROM/STEP09
//***********
//PMODFILE DD DSN=&NODE1..CPB.MULSRGRD.COMBFILE,
// DISP=(SHR,KEEP,KEEP)
//*
//***********
//* O - PROC/MOD MUL SURG RED FILE TO/STEP12
//***********
//EXTRPMOD DD DSN=&NODE1..CPBD.AR008105(+1),
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(TRK,(1,0),RLSE)
//*
//*
//*---------------------------------------------------------------------
//* STEP13 LOAD THE PSCO MASTER DATA *
//* LOAD TABLE: DB2PROD.PMT_PSCO_HIST *
//* NOW USES OMSPDB2L TO DO THE LOAD *
//*---------------------------------------------------------------------
//STEP13 EXEC OMSPDB2L,
// DB2LIB=&BOX
//*
//*
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//ABNLIGNR DD DUMMY SUPPRESS ABENDAID DUMPS
//*
//*
//SYSREC00 DD DSN=&NODE1..CPBD.AR008106(+1), FROM STEP07
// DISP=(SHR,KEEP,KEEP)
//*
//DUPSFILE DD DSN=&NODE1..CPBD081R.LOADDUPE,
// DISP=(,CATLG,DELETE),
// SPACE=(TRK,(25,10),RLSE),
// DCB=(RECFM=FB,LRECL=116,BLKSIZE=0,BUFNO=20)
//*
//SYSIN DD DSN=&LOINSTLB(LODHIST1),DISP=SHR
//*
//SYSPRINT DD SYSOUT=*
//*
//*
//*------------------------------------------------------------------
//* ABEND IF THE PREVIOUS DB2 PROGRAM HAD CONDITION CODE > 4 BUT
//* FAILED TO BLOW ITSELF UP. (4 IS THE COND CODE IF ANY DUPES ARE
//* FOUND - THEY REALLY SHOULD NOT BE, BUT WE ALLOW FOR IT
//*------------------------------------------------------------------
//AB13 EXEC PGM=ABEND,COND=((0,EQ,STEP13.STEP01),(4,EQ,STEP13.STEP01))
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* ----------------------
//*
//*-------------------------------------------------------------------
//* STEP 14 - LOAD DATA TO THE TABLE
//* LOAD TABLE: DB2PROD.PMT_PSCO_PROC_MOD_RD_M
//*-------------------------------------------------------------------
//STEP14 EXEC OMSPDB2L,
// DB2LIB=&BOX <== RUN AGAINST DB2P
//*
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//SYSOUT DD SYSOUT=*
//*
//* I - STANDARD IBM LOAD STATEMENT
//SYSIN DD DSN=&LOINSTLB(PMTLPMRM),DISP=SHR
//*
//* I - UNLOAD FILE CREATED IN STEP 10
//SYSREC00 DD DSN=&NODE1..CPBD.AR008105(+1),
// DISP=(SHR,KEEP,KEEP)
//*
//* O - OUTPUT FILE FOR DUPLICATE RECORDS
//DUPSFILE DD DSN=&NODE1..CPB.UPDTPMRM.DB2PROD.DUPS,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(25,10),RLSE),
// DCB= RECFM=FB,LRECL=442,BLKSIZE=0,BUFNO=20)
//AB14 EXEC PGM=ABEND,COND=((0,EQ,STEP14.STEP01),(4,EQ,STEP14.STEP0
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* -------------------
//*
//*----------------------------------------------------------------
//* STEP 15 NEW PROGRAM FOR THIS JOB, CPBPPSCO TO UPDATE
//* PMT_PSCO ("MOTHER" TABLE) IN ACCORDANCE WITH AUDIT TRAIL
//* REQUIREMENTS
//*----------------------------------------------------------------
//STEP15 EXEC PGM=IKJEFT01,DYNAMNBR=20
//*
//STEPLIB DD DSN=&STLIB,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB.MOD,DISP=SHR
// DD DSN=DB2.&BOX..LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//OQDFDL00 DD DSN=ENDEVOR.PROD.STAGE2.DATA(&OQMEMB),DISP=SHR
//*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPUNCH DD DUMMY
//*
//SYSTSIN DD DSN=ENDEVOR.PROD.STAGE2.DATA(&YDB2),DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.DATA(CPBPPSCO),DISP=SHR
//**************************************************** //* I - RECORDS TO BE INSERTED TO HISTORY FROM STEP 07
//****************************************************
//HISTEXTR DD DSN=&NODE1..CPBD.AR008106(+1),
// DISP=SHR
//*------------------------------------------------------------------
//* ABEND IF THE PREVIOUS DB2 PROGRAM HAD CONDITION CODE > 0 BUT
//* FAILED TO BLOW ITSELF UP.
//*
//*------------------------------------------------------------------
//ABND15 EXEC PGM=ABEND,COND=(0,EQ,STEP15)
//STEPLIB DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* ----------------------
//*
//*-------------------------------------------------------------------
//* STEP 16 - CPBP8150 - WILL INITIALIZE PROC REVIEW ****
//* MULTIPLE SURGERY REDUCTION CODES INPUT FILE ****
//*-------------------------------------------------------------------
//*
//STEP16 EXEC PGM=CPBP8150
//*
//STEPLIB DD DSN=&STLIB,DISP=SHR
// DD DSN=CPUB.SCHD.TEMPLIB,DISP=SHR
// DD DSN=CPUB.SCHD.LOADLIB,DISP=SHR
// DD DSN=CPUB.SCHD.VENDLOAD,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIB,DISP=SHR
// DD DSN=ENDEVOR.PROD.STAGE2.LOADLIBA,DISP=SHR
//*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CPXMRPTS DD SYSOUT=*
//SYSABEND DD SYSOUT=Y,DEST=LOCAL
//*
//***********
//* O - MULTIPLE SURGERY REDUCTION CODES FOR NEXT UPDATE RUN
//***********
//NEWFILE DD DSN=&NODE1..CPBD.AR008100(+1),
// DISP=(NEW,CATLG,DELETE),
// UNIT=&UNITX,
// SPACE=(TRK,450,RLSE),
// DCB=(PBS.MODEL,RECFM=FB,LRECL=80,BLKSIZE=0)
//*
//******************************************************************
//*** STEP 17 WILL INSERT JOB CPBD025D INTO ESP SCHEDULER ****
//******************************************************************
//*
//STEP17 EXEC PGM=IKJEFT01,COND=&CONDX
//*
//SYSEXEC DD DISP=SHR,DSN='CPUB.ESP.REXX'
//RCOUT DD DSN=&&TEMPRC,
// DISP=(NEW,DELETE,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=8000),
// SPACE=(CYL,(1,1),RLSE)
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DSN=ENDEVOR.PROD.STAGE2.DATA(CPBDE76R),DISP=SHR
//*
//*==================================================================*
//* END OF PROCEDURE CPBD081R
That's it ==== ABND07 executed the 1st time this got run, and as it was restarted on subseq steps all the other conditional abends also ran
OMSPDB2L is the PROC within a PROC. It MAY just be that if we took away the conditional abends after the OMSPDB2L steps that others would be OK. It has been said that you cannot check condition codes from a proc-within-a-proc just as you can't submit overrides for data sets in the nested proc. OMSPDB2L has ONLY one step, STEP01
NOTE I tried changing JCL step name from PROC to SSSS thinking maybe the name PROC - which, for some reason, gets used here a lot --- caused trouble. But that didn't make any difference.
Thanks in advance for even taking time to look at this monster
No one seems to have a JCLcheck/JEM manual and can't find one online - I thought of what Enrico says because messages don't always mean what they appear to mean
OK here is production PROC. Sorry to take up lots of room but no way of knowing WHAT in the proc or JCL caused our problems (Note we have a standard here about filling in symbolics in any proc with production values as defaults)
That's it ==== ABND07 executed the 1st time this got run, and as it was restarted on subseq steps all the other conditional abends also ran
OMSPDB2L is the PROC within a PROC. It MAY just be that if we took away the conditional abends after the OMSPDB2L steps that others would be OK. It has been said that you cannot check condition codes from a proc-within-a-proc just as you can't submit overrides for data sets in the nested proc. OMSPDB2L has ONLY one step, STEP01
NOTE I tried changing JCL step name from PROC to SSSS thinking maybe the name PROC - which, for some reason, gets used here a lot --- caused trouble. But that didn't make any difference.
Thanks in advance for even taking time to look at this monster
The 'problem' is obvious. On the PROC statement of CPBD081R there is a parameter override - CONDX='(0,GT)', and that matches up with the &COND parameter on STEP17 - which is the ONLY reference to &CONDX.
On the EXEC PROC statement that invokes the PROC CPBD081R, there is a parameter override - COND='(0,GT)'. Note that the override is NOT for CONDX (with a trailing 'X') but for COND (withOUT a trailing 'X'). Hence the override is NOT doing what you probably intend it to do. Instead, you are effectively overriding the COND parameter for EVERY SINGLE STEP IN THE PROC.
From the JCL REFERENCE MANUAL:
If you omit stepname, the code you specify is compared to the return codes from all previous steps. If the return code issued by any of those previous steps causes the test condition to be satisfied, the system evaluates the COND parameter as true and bypasses the job step.
Ergo, the COND test in step ABND07 is overriden to (0,GT), which negates the original, intended test of (0,EQ).
If you fix the COND override parm on the EXEC CPBD081R statement to specify CONDX instead, all should go as I believe you intend.
Thanks to Ronald Burr and I am glad the problem was quickly obvious to him - sometimes one can have 3 sets of eyes (at least) looking at something (which we did - including 2 VERY experience programmers and one architect) and not seeing it, and a 4th person will see it.
Very clear now, and everybody here will be happy to know
Just so you know - the CONDX parm is intended to STOP STEP17 from running in TEST - and should apply ONLY to STEP17, the idea is to make STEP17 always run in production Follwing is one of the test JCL decks and you can see how the CONDX works. (Here, we are supposed to use sym parms so same PROC can be used for both test and production, and you often have this issue of steps not supposed to run in test) THIS ALSO EXPLAINS WHY the thing worked in test, not in production
Enrico, almost everybody hear uses IKJEFT01 - the architect who looked at this problem did suggest we use IKJEFT1B saying IT would cause an abend where IKJEFT01 would not ---- so w/ 1B we dont need the conditional abends. But, thanks for reinforcing this
I am SURELY glad I took time to put this problem in here