Consultor Eletrônico



Kbase P97562: Error 1422 trying to update a record using Progress 9.1C or later or OpenEdge 10.0x
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/9/2009
Status: Verified

SYMPTOM(s):

Error 1422 trying to update a record

SYSTEM ERROR: Index in for recid could not be deleted. (1422)

Using -lbimod set to 2

The record has been updated in a sub-sub-transaction (level 3 of transaction)

A sub-transaction (level 2) rollback tried to restore the original content of the record

The main transaction is committed

If the main transaction is rolled back the problem does not occur

If the UNDO level-2 from the level-3 the problem does not occur

Error 1422 happens in the next attempt to update the record

Happens to any 4GL client including DataServers

FACT(s) (Environment):

All Supported Operating Systems
Progress 9.1C
Progress 9.1D
Progress 9.1E
OpenEdge 10.0A
OpenEdge 10.0B

CAUSE:

Bug# 20041125-002

CAUSE:

There is an index corruption caused by the 4GL core client when handling specific logic with embedded transactions. When code that contains embedded transactions of at least 3 levels -- 1 for the database non-lbi, and at least 2 within the lbi level -- updated a record in a sub-sub-transaction (level 3 of transaction) and the sub-transaction (level 2) rollback tries to restore the original content of the record, causing an inconsistency in the records that have wanted old values in some fields and bad new values failed to be roll back in some other fields. When index keys that were are correctly rolled back gets out of synch with their related fields and the database record becomes corrupted. Note that On OpenEdge 10.0B the new default value for -lbimod was changed to 2.

FIX:

Use proutil <dbname> -C idxfix to fix the existing index corruption. To avoid getting a index corruption again, choose one of the following:
1) Upgrade to Progress 9.1E01 or later.
2) Upgrade to OpenEdge 10.0B02 or later.
3) As a workaround, use startup parameter -lbimod 0 for the client sessions. This parameter should be used for ALL types of clients (GUI Client, TTY clients, batch jobs, AppServer, WebSpeed...) if the same offending Logic procedures are used.