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.