Correcting bad pointers
Ordinarily, bad pointers should not occur in your database. When they do, the likely causes are few.
The cause of bad pointers is typically:
- Failure to run database backout
- Failure to perform emergency restart
- Omitting a log during backout or recovery
The normal way to correct a bad pointer is to perform
recovery. However, some cases exist in which a bad pointer can be
corrected through reorganization. A description of the circumstances
in which this can or cannot be done is as follows:
- PC/PT pointers. The HD Unload utility issues unqualified GN calls to read a database. If the bad pointer is a PC or PT pointer, DL/I will follow the bad pointer and the GN call will fail. Therefore, reorganization cannot be used to correct PC or PT pointers.
- LP/LT pointers. LP and LT pointers are rebuilt during reorganization. However, DL/I can follow the LP pointer during unload. If the logical child segment contains a direct LP pointer and the logical parent's concatenated key is not physically stored in the logical child segment, DL/I follows the bad LP pointer to construct the logical parent's concatenated key. This causes an ABEND.
- LP pointer. When DBR= is specified for pre-reorganization and the database has direct LP pointers, the HD Unload utility saves the old LP pointer. Bad LP pointers produce an error message (DFS879) saying a logical child that has no logical parent exists.
- LP pointer. When DBIL= is specified for pre-reorganization of a logical child or parent database, the utilities that resolve LP pointers use concatenated keys to match logical parent and logical child segments. New LP pointers are created.