Professional Documents
Culture Documents
2/19/2021 Restart logic to commit after reading every 1000 records -IBM Mainframes
2/19/2021 Restart logic to commit after reading every 1000 records -IBM Mainframes 2/19/2021 Restart logic to commit after reading every 1000 records -IBM Mainframes
FILE_POSITION_GTT repeatedly fetch a cursor and write the record information into the output file until end of WHEN 0
cursor close a cursor end If input for the program is from cursor then skip the rows until COMMIT-KEY. If input for IF RESTART-IND = 'Y'
the program is from file then skip the records until COMMIT-KEY. End. Note: For more than one output files, delete DISPLAY '* * * * * * * * * * * * * * * * * * * * * * * * * *'
GTT after repositioning each output file. DISPLAY '***PROGRAM - ' PROGRAM-NAME ' RESTARTED***'
STEP3: Make a count for each Insert?s/Update?s/Deletes in RECORDS-PROCESSED-UOR variable. DISPLAY '* * * * * * * * * * * * * * * * * * * * * * * * * *'
STEP4: Go thro? the logic and find out the appropriate place where COMMIT WORK can be hosted. There check the DISPLAY ' '
frequency of COMMITS: IF RECORDS-PROCESSED-UOR > COMMIT-FREQ KEY (input) value of the programTO END-IF
COMMIT-KEY MOVE checkpoint-commit record lengthTO SAVE-AREA-LEN MOVE checkpoint-commit recordTO WHEN 100
SAVE-AREA-TEXT Update the CHECKPOINT_RESTART table with this information END-COMMIT PERFORM RESTART-INSERT
STEP5: Before STOP RUN statement; reset the RESTART flag of the CHECKPOINT_RESTART table. i.e. MOVE ?N? WHEN OTHER
TO RESTART-IND Update the CHECKPOINT_RESTART table with the above information. MOVE 'RESTART-SELECT'TOWS-PARA-NAME
Sample COBOL code for CHECKPOINT/RESTART Logic: MOVE 'CHECKPOINT_RESTART SELECT ERR'TOWS-PARA-MSG
CHECKPOINT-COMMIT RECORD DEFINITION: PERFORM EXCEPTION-ROUTINE
************************************************************************ END-EVALUATE.
*****GLOBAL TEMPORARY TABLE CURSOR DECLARATION & OPEN***** /
************************************************************************* **************************************************************
EXEC SQL *****INSERT THE NEW RESTART STATUS RECORD*****
DECLARE FPG-FPOS CURSOR FOR **************************************************************
SELECT RECORD_NUMBER RESTART-INSERT.
,RECORD_DETAIL MOVE SPACESTO CALL-TYPE.
FROM FILE_POSITION_GTT MOVE SPACESTO CHECKPOINT-ID.
ORDER BY RECORD_NUMBER MOVE 'N'TO RESTART-IND.
END-EXEC. MOVE 'B'TO RUN-TYPE.
******************************************************************************** MOVE +500TO COMMIT-FREQ.
*****CHECK-POINT RESTART DATA DEFINITIONS***** MOVE ZEROESTO COMMIT-SECONDS.
******************************************************************************** MOVE +4006TO SAVE-AREA-LEN.
01 COMMIT-REC. MOVE SPACESTO SAVE-AREA-TEXT.
02 FILLERPIC X(16) VALUE 'REC. PROCESSED: '. EXEC SQL
02 COMMIT-KEYPIC 9(06) VALUE 0. INSERT INTO CHECKPOINT_RESTART
02 FILLERPIC X(14) VALUE 'TOTAL COUNTS: '. ( PROGRAM_NAME
02 COMMIT-COUNTS. ,CALL_TYPE
03 WS-REC-READPIC 9(06) VALUE 0. ,CHECKPOINT_ID
03 WS-REC-REJTPIC 9(06) VALUE 0. ,RESTART_IND
03 WS-REC-WRITPIC 9(06) VALUE 0. ,RUN_TYPE
03 WS-RECP-READPIC 9(06) VALUE 0. ,COMMIT_FREQ
03 WS-RECP-UPDTPIC 9(06) VALUE 0. ,COMMIT_SECONDS
01 CHKPRSL-VARS. ,COMMIT_TIME
02 RECORDS-PROCESSED-UORPIC S9(09) COMP VALUE +0. ,SAVE_AREA
************************************************************** )
********** VALUES
*****CHECK POINT RESTART LOGIC SECTION***** ( :PROGRAM-NAME
********** ,:CALL-TYPE
************************************************************** ,:CHECKPOINT-ID
RESTART-CHECK. ,:RESTART-IND
MOVE 'XXXXXX' TO PROGRAM-NAME. ,:RUN-TYPE
PERFORM RESTART-SELECT. ,:COMMIT-FREQ
IF RESTART-IND = 'Y' ,:COMMIT-SECONDS
MOVE SAVE-AREA-TEXT TO COMMIT-REC , CURRENT TIMESTAMP
If input is from cursor the skip until the commit-key ,:SAVE-AREA
If input is from file then skip the records until the commit-key )
END-IF. END-EXEC.
************************************************** EVALUATE SQLCODE
*****CHECK RESTART STATUS***** WHEN 0
************************************************** CONTINUE
RESTART-SELECT. WHEN OTHER
MOVE 0 TO RECORD-PROCESSED-UOR. MOVE 'RESTART-INSERT'TOWS-PARA-NAME
EXEC SQL MOVE 'CHECKPOINT_RESTART INSERT'TOWS-PARA-MSG
SELECT RESTART_IND PERFORM EXCEPTION-ROUTINE
,COMMIT_FREQ END-EVALUATE.
,RUN_TYPE /
,SAVE_AREA **********************************************************
INTO :RESTART-IND *****UPDATE THE CHECKPOINT RECORD*****
,:COMMIT-FREQ **********************************************************
,:RUN-TYPE RESTART-COMMIT.
,:SAVE-AREA MOVE 'Y'TO RESTART-IND.
FROM CHECKPOINT_RESTART EXEC SQL
WHERE PROGRAM_NAME = :PROGRAM-NAME UPDATE CHECKPOINT_RESTART
END-EXEC. SET RESTART_IND= :RESTART-IND
EVALUATE SQLCODE ,SAVE_AREA= :SAVE-AREA
2/19/2021 Restart logic to commit after reading every 1000 records -IBM Mainframes
https://ibmmainframes.com/about6571.html 7/7