Consultor Eletrônico



Kbase 19923: Errors 2358 and 137 in database log
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   8/21/2003
Status: Verified

SYMPTOM(s):

SYSTEM ERROR: Record continuation not found, fragment recid <recid>. (137)

SYSTEM ERROR: Invalid record with recid <recid>. (2358)

CAUSE:

When a record spans two database blocks, it has the following structure -


RECID(1)
+---------+
| |
|RECID(2) |-------+
+---------+ | RECID(2)
| +--------+
+------->| |
| |
+--------+


RECID(1) has a pointer to RECID(2):

When the link (RECID(2)) is lost, you encounter the following two error messages:


Record continuation not found, fragment recid RECID(2). (137)

This indicates the record at RECID(1) has a bad continuation pointer (RECID(2)), because it points to a record that does not exist.

The second message:


Invalid record with recid RECID(1). (2358)

means that the record at the record indicated by RECID(1) is missing the continuation record (in other words, it is just a fragment because the rest of the record is not found).

FIX:

Follow these steps:

1) Find out which table the record belongs to. Progress Solutions

P17191 Which application table does a given RECID reside in V7/V8 (proc. A)
P17197 Which application table does a given RECID reside in V7/V8 (proc. B)
P17198 Which application table does a given RECID reside in for v9

explain the process. Use the RECID from the (2358) error. Knowing which table the record was in allows you to rebuild only the indexes on that table.

2) Delete the record fragment. There are two ways to delete a bad record / record fragment. Option b will require an index rebuild of all tables that contained that record. You can rebuild the indexes via an idxbuild or an idxfix for Progress version 8.2+.


A) Progress version 8.2+ allows you to delete a record using the idxfix option to proutil.


Syntax:

proutil dbname -C idxfix

Select option 6 "Delete one record and it's index entries". You will receive a prompt: Type the recid to delete. Enter the recid. You will be asked to confirm your entry.  Press y. Record will be deleted and you'll receive notification.

note:  If delete was unsuccessful based on the notification you receive, proceed with step b.

B) Valid for all Progress versions.  You can use dbrpr option to proutil.


note:  This is a non-documented, unsupported utility. It should be used with extreme caution. Prior to using this utility we would recommend you take a backup of your database.

Syntax:  proutil dbname -C dbrpr

Select Option 3 "Remove Bad Record Fragment" from the Main Menu. Enter the RECID from the (2358) error and exit. You will then need to run an idxbuild or idxfix for all tables which contained this recid.