Consultor Eletrônico



Kbase P100296: BLOB/CLOB fields do not preserve the CRC in OpenEdge 10.0B
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   5/5/2008
Status: Verified

FACT(s) (Environment):

OpenEdge 10.0B
All Supported Operating Systems

SYMPTOM(s):

Error 1896 when you try to run a r-code

** CRC for <filn> does not match CRC in <procedure>. Try recompiling. (1896)

Table which contains at least one BLOB or CLOB field

CRC changed after dump/load

CRC values don't match after apply a delta df file


CAUSE:

Bug# OE00113034

CAUSE:

One of the fields involved in the CRC calculation is the _Field._Fld-stlen field. For BLOB and CLOB fields, OpenEdge internally stores the blob?s storage object number which is generated after the blob object is created. The object number of each BLOB/CLOB field is unique on any given database. However, this object number is most likely going to be different once you dump and load a table, since you would have to create the same exact fields in the same exact order to get the same object ids. When the object id's are different, a CRC mismatch will occur after you dump/load the table.

FIX:

Upgrade to 10.0B02 or later Service Pack and use -lobcrcfix startup parameter following the steps:
Start a session with -lobcrcfix, connect to the database and make a change to the table which contains a BLOB/CLOB field so we regenerate the CRC for that table using the correct algorithm.
After the CRC is updated, recompile any code that references that table, so the r-code contains the new CRC value.

Note that you will also need to use the -lobcrcfix startup parameter when you load the definitions into the target database as well so you get the same CRC value for the tables that contain BLOB/CLOB fields, and you should be able to run the r-code compiled against the original database.
Note that the -lobcrcfix startup parameter will only exist in 10.0B02 and later 10.0B Service Packs.

If you move to 10.1x or later there is no need to use -lobcrcfix parameter. The fix is the default behavior in the OpenEdge 10.1x releases, and the -lobcrcfix will not be valid.