Occasionally, data is damaged and the index rebuild utility does not work. When this happens, you can use the p-dump.p procedure to dump the data in a table called item. The p-dump.p procedure runs slowly on large databases. Use it only when you cannot use the Index Rebuild utility.

Table 1. p-dump.p
DEFINE VARIABLE ix AS INTEGER NO-UNDO.
FIND _file "item".
OUTPUT TO item.d.
DO ix = 1 TO 10000:
  FIND item WHERE RECID(item) = ix NO-ERROR.
  IF AVAILABLE item AND ix <> INTEGER(_file._template) THEN
    EXPORT item.
END.

In this procedure, data from the item table is dumped into the item.d file. Use the item.d file with the reload procedure. For more information on loading, see Dumping and Loading

In the p-dump.p procedure, you must set the end value for the DO block high enough (10,000 in the previous example procedure) so that every record in the database is examined. Calculate a safe value using the following formula:

100 + 32*(database-size-in-bytes / database-block-size)

The database block size varies among systems. Use the PROSTRCT STATISTICS utility to determine the database block size for your system.