Consultor Eletrônico



Kbase P157066: Updates and Deletes fail with error 129 11353 in OpenEdge 10.1B+
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   14/04/2010
Status: Verified

SYMPTOM(s):

Updates fail with The total length of the fields in an index exceeds max key size (129) (11353)

Deletes fail with The total length of the fields in an index exceeds max key size (129) (11353)

Loading an incremental .df fails with The total length of the fields in an index exceeds max key size (129) (11353)

The total length of the fields in an index exceeds max key size. Index <index-name> of table <table-name> (129) (11353)

Database was migrated with conv910 utilities

Database was previously a pre-101B database

proutil -C enablelargekeys has been run online

FACT(s) (Environment):

OpenEdge 10.1B
OpenEdge 10.1C
OpenEdge 10.2x

CAUSE:

In versions preceeding OpenEdge 10.1B, this is expected behaviour, a the index limit has been reached.

The sum of the lengths of all fields in an index cannot be more than 188 for an individual record. In this case, records were padded with a significant number of spaces that exceeded 188 bytes. For example when updating/deleting or loading an incremental.df action tries to build an index for a large field (which exceeds the 188 byte size limitation), it terminates with error message (129).

An enhancement was implemented in the OpenEdge 10.1B in the form of the "proutil -C enablelargekeys" utility only for databases with 4KB or 8KB database blocksize. Once enabled, the new index key is limited to approximately 1970 characters. So these errors may still arise with largekeys enabled, but only when the new limit is reached. Databases created in OpenEdge 10.1B+ have largekeys enabled by default. Databases that were converted with conv910 utilities or were pre-101B databases (eg: 10.1A or earlier) will need this feature explicitly enabled.

If the database is online when enabling large keys, only newly connected clients will be able to perform operations with large keys. Since largekeys were enabled online and the client sessions were still connected, they were still hitting: "The total length of the fields in an index exceeds max key size. Index <index-name> of table <table-name> (129) (11353)"

FIX:

Re-connected 10.1B+ clients will no longer hit this error once largekeys have been enabled. Note that once enabled, it cannot necessarily be disabled with the proutil -C revert utility. Please refer to the Database Administration Guide for further information.

Once Large key support is enabled, it can cause run time problems for older clients ie: a client from pre-10.1B (eg: 10.1A or earlier) which will not be able to update or delete any row or field that is referenced by a large index key. So if this is your situation and largekeys are needed by the application then upgrading the clients should become a priority.
A simple method of determining the current size would be to run something along the lines of the following ABL code:
FOR EACH <tablename> NO-LOCK:
IF LENGTH(<tablename>.<fieldname>,"RAW") > 188 THEN DISPLAY RECID(table).
END.

Then taking appropriate actions if necessary, for example: removing the padding (modify) or removing the record(s)