There's a few other things to be aware about when using checkpoint files that BOL does not tell you. Some of these may be obvious but its worth stating them anyway.:
- An OnPreExecute event on the package will not execute if the package is restarted using a checkpoint file (Proof is here: http://blogs.conchango.com/Admin/ImageGallery/blogs.conchango.com/jamie.thomson/20060104OnPreExecute_will_not_fire.zip).
- Specifying the name of a checkpoint file is not enough to make the package use it. You must set CheckpointUsage=IfExists as well. This is simple to do but also simple to forget to do.
- Variable values are persisted in the checkpoint file...
- ...all except for variables of type Object
- Properties set by a configuration are persisted in the checkpoint file
- Setting CheckpointUsage=Always has no practical use. (Not that I can envisage anyway - I stand to be corrected.)
- A ForEach loop will iterate over all items in a collection regardless of whether the package previously failed during iteration. In other words, the checkpoint file does not store information about how many iterations the ForEach loop has gone through
- The same is not true of the For Loop because this is dependant on variable values which are persisted in the checkpoint file
- If you want to test your checkpoints you'll need to make a task fail at some point. A useful but safe method of doing this is to drop a script task into your control-flow that references a non-existent variable in the ReadOnlyVariables property. This won't damage anything external to the package and, crucially, won't cause a validation error either
-Jamie