why would idms unload utility not unload all records in an area

Document ID : KB000111566
Last Modified Date : 06/09/2018
Show Technical Document Details
Question:
After running the IDMS Unload utility, it may appear that the Unload did not unload all records in the requested area. Running the Unload utility and comparing the record count from the PRINT SPACE utility that was ran prior to the Unload, may seem to indicate missing records. Using the Reload to load the data back, the utility loaded back all the unloaded data, without errors. Running PRINT SPACE again to get a breakdown of the actual record counts which were reloaded may seem to show many missing records when compared to the original PRINT SPACE. Running IDMSDBAN shows many broken chain messages.

Why would the IDMS Unload utility not unload all records in an area, yet not produce any errors, when IDMSDBAn does show errors?
 
Answer:
First, in the situation where this error occurred, the area being Unloaded had no cross-area pointers. 

There was one CALC record in the area that owns a via set.

The UNLOAD utility will sweep the area unloading the CALC records when they are encountered; for each one it will WALK any sets owned by the CALC owner and any sets those members own. This means that no VIA records in the area will be unloaded by area sweep; all will be unloaded by walking sets from the CALC owner records. 

When this situation occurred, no application pgms got broken chain errors like 0361 AND the UNLOAD also received no errors. These facts mean that if you chase any of the DBAN errors, you will find that every set is totally intact, when walked from the owner. That approach shows no bad pointers at all. 

Research showed that the area contained many VIA records whose pointers indicate that they were at some point valid connected members in the mentioned VIA set, BUT they were not currently connected to any valid set owner. 

PRINT SPACE does not walk sets as it doesn't use a Subschema. It simply reads each page in an area and counts the records it finds on the pages. This would include all of the invalid "unconnected" VIA member records. This is why it showed different record counts than the UNLOAD - it uses a different mechanism to access the records. 

Those "unconnected" VIA records were probably meant to be erased but something left them in a partially erased state. 
This is most likely the result of Local Mode Update job(s) that were erasing records, but the job(s) did not complete successfully AND the affected areas were not properly recovered  (For local updates CV must be down OR the areas varied Offline, backup should be taken prior to the Local batch update jobs and if the jobs do not complete normally the areas should be restored from the backup)

So, if you encounter a situation like this, research may show that the UNLOAD and RELOAD did indeed unload all of the CALCalc records and all VALIDLY connected members. The reloaded database should contain all valid records and DBA should investigate the reason for the database corruption. If a backup of the area exists from before the UNLOAD/RELOAD, an IDMSDBAN can be run against that backup and it will most likely show the same broken chains as the DBAN run after.