Suppose you have a COBOL DB2 program, in which you are reading data from input file which has thousands of records and updating a DB2 table one record at a time.
Now you are planning to have restart logic. That is, say you have updated 10000 records from the input file and the job abended. Here you do not want to start from the first and again update the already updated records.
So the restart logic can be as below so as to restart from a record near to the abended record and not from the TOP.
Define a VSAM file and store the last updated KEY value in it whenever you issue a COMMIT for the DB2. Example: Say you are committing your data after every 1000 records from input file, and then update your VSAM file with the key of 1000 record.
Now say your program has abended at 5020 record, now in the VSAM file you will have the key of the 5000 record. And all the initial 5000 records are committed in DB2.
So when you correct the issue and restart the program. The first thing you need to do in the program is to read the VSAM file and get the key from it.
If the key is zeroes, it means we are running the job for the first time
If the key is greater than zeroes, then read just the input file(without doing any other processing in the program, as we have already updated the data in DB2) till the key is reached and start processing the record from the next record of the key.
In our example, VSAM file will have 5000 record. So, till 5000 record, you will browse through the input file and from 5001 record, you will start the processing.
Note: This may be achieved by other methods as well.