Consultor Eletrônico



Kbase P90217: Database fails to start with Ixundo errors 5022 during roll back recovery
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   15/04/2011
Status: Verified

SYMPTOM(s):

Database fails to start after abnormal shutdown with Ixundo errors 5022 during roll back recovery

SYSTEM ERROR: Ixundo failed in ixdel because it was unable to find the key to delete in index number <index number>. This Index may have an incorrect key. (5022)

rmUndoLogicalChange: recid <number> area <number> txn <number> updctr <number> rmFetchRecord returns -1 expected <value>

A client session was killed during processing

Database was shutdown abnormally.

Crash recovery fails with error (5022)

Would prefer not to go to backup

FACT(s) (Environment):

All Supported Operating Systems
Progress 9.x
OpenEdge 10.x

CAUSE:

During roll-back recovery of the bi file, an attempt to back out an addition with a deletion failed. The key to be backed out could not be found in the index. This indicates index corruption.

FIX:

Since roll-back recovery cannot complete due to the index corruption, the database cannot be accessed without skipping bi recovery. Please refer to Progress Solution P24330, "Consequences of using the -F startup option" before proceeding.
STEPS:
0.) Make sure that you have an OS backup to fall back on should the idxbuild fail.
1.) Skip crash recovery with the -F option:
$ proutil dbname -C truncate bi -F -G 0
2a.) Rebuild all indexes:
$ proutil dbname -C idxbuild ALL -TB 24 -TM 32 -B 1024 -G 0
Or
2b.) Rebuild only the indexes for the table reported in the error message

i) Use the below 4GL code to determine the table name that corresponds to the index number reported in the 5022 error message.

DEFINE VARIABLE i AS INTEGER NO-UNDO.
SET i LABEL "ERROR:5022 INDEX #" WITH FRAME A.
FOR EACH _index WHERE _index._idx-num = i:
IF AVAILABLE _index THEN DO:
FOR EACH _file OF _index:
DISPLAY _index._index-name _file._file-name.
END.
END.
ELSE MESSAGE "no such index found" VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
ii.) Rebuild the index found in Step (i).
$ proutil dbname -C idxbuild -TB 24 -TM 32 -B 1024
iii.) As a final check, run idxcheck for ALL indexes, there may well be more index corruption than only that reported in the error message:
$ proutil dbname -C idxcheck ALL -TB 24 -TM 32 -B 1024