//________ JOB _____________ //*-------------------------------------------------------------------- //* fixup job to correct corrupt job detail records in omcs databases //* caused by the problem described by APAR ASZ3325. //* //* *** APPLY ASZ3325 BEFORE RUNNING THIS JOB *** //* //* tailor the JOB statement and the DD statements to use your //* dataset names. //* //* Run the job once for each OMCS Version 2 database //* *** dont run this against OMCS/RCX (Indexing) databases *** //* //* It wont matter if you accidentally run it multiple times against //* one database. //* //*-------------------------------------------------------------------- //FIX3325 EXEC PGM=ECPX,PARM='FIX3325' //STEPLIB DD DISP=SHR,DSN=your.OMCS.ASELIB <=== //ECPLIB DD DISP=SHR,DSN=your.OMCS.ASEECPS <=== //DBASECPX DD DISP=SHR,DSN=your.database <=== run once per d/b //SYSPRINT DD SYSOUT=* //ECLIN DD * /* instream ECL program follows FIX3325: PROC + +/*------------------------------------------------------------------- +/* fixup for corruption caused by problem described by APAR ASZ3325 +/*------------------------------------------------------------------- NEWPOOL EXPECTS(OPTION=) LOG FIX3325 Control Listing &ZDATE &ZTIME &ZSYSOSID &ZSYSSMID CONTROL ST0K SET OPTION=&CAPSON(&OPTION) IF &OPTION=SIMULATE LOG SIMULATE in effect, no record updates will occur LOAD PROGRAM ASESTDPR $OPEN .JOBDETL DATESPAN UPDATE ASPLEVL=0001 RETURNS(RC @JD MSG) IF# &RC>0 LOG &MSG LOG TERMINATING, COND CODE &MAP(Z4,&RC) RETURN RETC=&RC $OPEN .JOBDETL MASTER UPDATE ASPLEVL=0002 RETURNS(RC @JM MSG) IF# &RC>0 LOG &MSG LOG TERMINATING, COND CODE &MAP(Z4,&RC) RETURN RETC=&RC /*---------------------------------------------------------- /* fix corrupted older DATESPAN records /*---------------------------------------------------------- DBLOCATE &@JD (&X(00001C89)) COL(1) IF# &RETC=0 DBSKIP &@JD -1 SET PREVREC=&A4(0,0,0) /* DUMMY PRIOR REC NXTDATE: DBSKIP &@JD IF# &RETC=0 SET (PREV- DAY#(A4) LOW#(A4) HI#(A4))=&PREVREC SET (CURR- DAY#(A4) LOW#(A4) HI#(A4))=&DBRTXT IF# &CURRLOW#<&PREVHI# /* IF PREV REC HI# IS TOO HIGH.. IF# &PREVHI#>9999999 /* ..and it's not y2k testing.. SET PREVHI#=&CURRLOW#-1 IF &OPTION<>SIMULATE DBSKIP &@JD -1 DBREPR &@JD &MAP(A4,&PREVDAY# &PREVLOW# &PREVHI#) DBSKIP &@JD 1 IF &OPTION=SIMULATE DBSKIP &@JD -1 LOG replacing datespan rec &DBRNUM + day#=&PREVDAY# low#=&PREVLOW# hi#=&PREVHI# DBSKIP &@JD 1 IF# &CURRDAY#<8765 /* IF IT'S EARLIER THAN 31DEC2003.. SET PREVREC=&DBRTXT /* SAVE COPY OF PREV REC GOTO NXTDATE /* ..AND LOOP-> /*---------------------------------------------------------- /* fix jan12004 onward datespan and jobdetl recs /*---------------------------------------------------------- /*---------- get last abs# for 2003 DBLOCATE &@JD (&A4(00008766)) COL(1) /* TO 1JAN2004 DATESPAN IF# &RETC=0 /* IF DIRECT HIT.. DBSKIP &@JD -1 /* SKIP PRIOR SET (CURR- DAY#(A4) LOW#(A4) HI#(A4))=&DBRTXT SET 2003ABS#=&MAP(Z8,&CURRHI#) /*---------- process each .jobdetl rec added after this abs# DBLOCATE &@JM (&2003ABS#) COL(211) SET (2003- ABS#(C8) DAY#(C4))=&SS(&DBRTXT,211) NXTDETL: DBSKIP &@JM IF# &RETC=0 SET (CURR- ABS#(C8) DAY#(C4))=&SS(&DBRTXT,211) /*---------- update jobdetl master rec if reqd IF# &CURRDAY#<&2003DAY# /* IF DAY# BEFORE JAN 2004... SET CURRDAY#=&CURRDAY#+1461 /* ADJUST DAY# UP 4YEARS IF &OPTION<>SIMULATE DBREPR &@JM &SS(&DBRTXT,1,210)+ /* REPL JOB DETL REC &CURRABS#+ /* nnnnnnnn &CURRDAY#+ /* nnnn &SS(&DBRTXT,223) IF &OPTION=SIMULATE LOG correcting jobdetl mast keyfield + from: &SS(&DBRTXT,211,18) + to: &CURRABS#&CURRDAY#&SS(&DBRTXT,223) /*---------- update/create jobdetl datespan rec if reqd DBLOCATE &@JD (&A4(&CURRDAY#)) COL(1) /* POSITION TO/PRIOR SET LOCATERC=&RETC IF# &LOCATERC>0 /* IF NO REC FOR THIS DAY#.. IF &OPTION<>SIMULATE DBINSR &@JD &A4(&CURRDAY#,&CURRABS#,&CURRABS#) IF &OPTION=SIMULATE LOG datespan init &CURRDAY# &CURRABS# &CURRABS# IF# &LOCATERC=0 /* IF EXISTING REC FOR DAY#.. SET (CURR- LOW#(A4) HI#(A4))=&SS(&DBRTXT,5) IF# &CURRABS#>&CURRHI# SET CURRHI#=&CURRABS# IF# &CURRABS#<&CURRLOW# SET CURRLOW#=&CURRABS# SET NEWREC=&A4(&CURRDAY#,&CURRLOW#,&CURRHI#) IF &NEWREC<>&DBRTXT IF &OPTION<>SIMULATE DBREPR &@JD &NEWREC IF &OPTION=SIMULATE LOG datespan updt &CURRDAY# &CURRLOW# &CURRHI# GOTO NXTDETL /*---------- close files DBCLOSE &@JD DBCLOSE &@JM WTO TERMINATING WITH COND CODE 0000 LOG TERMINATING WITH COND CODE 0000 EXIT 0