We have converted DLI jobs as BMP and facing LOCKMAX (U3301) issue for them. If we increase the LOCKMAX, we are able to complete the jobs without any issues. But we should follow the standard LOCKMAX value across the application and it must be '5'. Also we could not change the checkpoint logic due to some restrictions in the existing functionality.
See the below example for one of the restriction.
Under the PART-A(input data from file) , If we have 10000 records and checkpoint issued after processing entire PART-A. We will face lockmax issue. To avoid this, If we issue checkpoint for every 1000 records under part A, when job abends at 3000+ record we should remove PART-A from the input ( Since PART-A is the input data from file and 10000 records under that are read from DB in the program ). But already 2000 records are committed due to two checkpoints issued for every 1000 records. At this point we need to rollback the data for those 2000 records and this is not possible. Even ROLB option will help till last checkpoint ( As per my understanding ).
So please suggest us any option which may help us to run the job with huge volume of data without changing LOCKMAX or Checkpoint logics.
Joined: 17 Dec 2007 Posts: 57 Location: Victoria, BC, Canada
To recap what you are asking.
1. You want to change the way this program behaves, so that it will take checkpoints frequently enough that it will not exceed LOCKMAX.
2. You want this program to be able to re-synchronize to the correct input record number and database positioning, in the event that it must be restarted after the jobs fails, and after it has taken at least one checkpoint or extended checkpoint.
3. You want these first two new functions to be implemented by making no changes to the application. As it WAS a DLI application, we should assume there was no checkpoint/restart logic in place prior to conversion to BMP and no method to track/re-establish database positioning and input file positioning.
In other words, you want extensive changes to program behavior, without making any program changes.
So your answer is right there...Pray for a Miracle.
As i mentioned earlier , we have some restrictions to change the existing checkpoint logic in our program. But we have a logic to issue checkpoint ( Main checkpoint ) after completing all the records under PARTA. But we could not add any intermediate checkpoint to avoid LOCKMAX issue.Could you please check the below scenario for more details !
record 1 - 1000 => Intermediate checkpoint 1
record 1001- 2000 => Intermediate checkpoint 2
record 2001- 3000 => Abends at 2512th record
record 3001 - 3600
Main checkpoint 1
record 1 - 1000
Main checkpoint 2
In the above example, Only PARTA,PARTB are taken from input file and all the records under them are retrieved from database through processing. LOCKMAX will occur when we process all the 3600 records under PARTA.
If we issue intermediate checkpoint at record level(per 1000 records ) to avoid LOCKMAX issue , when the record 2512 abends we can not rollback the data level changes which are committed from 1 to 2000 through previous intermediate checkpoints. Because when we face data issue, PARTA itself is removed from the input file and job is restarted.
So program level changes to avoid LOCKMAX is difficult due to this issue and we are looking some other solution to resolve this issue.