Salesforce

TABanalys and DBanalys crash due to 32K record sizes ( _dbutil.exe exception c0000409)

« Go Back

Information

 
TitleTABanalys and DBanalys crash due to 32K record sizes ( _dbutil.exe exception c0000409)
URL NameTabanalys-and-dbanalys-are-crashing-dbutil-exe-exception-c0000409
Article Number000117639
EnvironmentProduct: OpenEdge
Version: 11.7.0 to 11.7.5 inclusive, 12.0, 12.1
OS: All supported platforms
Question/Problem Description
TABANALYS or DBANALYS crash with _dbutil.exe exception c0000409
DBTOOL Option 4. Record Version Validation, crashes against some tables
DBTOOL Option 4 confirms there are records with outdated schema: Number of fields mismatch. Expected (n), got (n-x) 
Steps to Reproduce
Clarifying Information
Dumping the data via the data dictionary (ASCII dump) the dump is successful but loading the data results in errors when reading record fields
Binary dump and load does not report any errors
Database integrity checks do not report any data or index corruption:
  • DBTOOL Options: 3 &5
  • DBRPR Options: 1&4 
  • IDXCHECK Validation Options: 1-6 
  • IDXFIX Options: 3&8 
Error Message_dbutil crash:

0xc0000409 (STATUS_STACK_BUFFER_OVERRUN).

ASCII load:

ERROR READING LINE # (Offset=#): ** Invalid character in numeric input n. (76)
ERROR READING LINE # (Offset=#): : ** Input value: save should be yes/no. (87)
ERROR! Trailer indicated ## records, but # records were loaded.
Defect NumberOCTA-15146
Enhancement Number
Cause
There are records in the database that are very close to the 32k record limit:
  • When the record version is being validated during the analysis process (due to a prior schema change) this crosses the 32k boundary when the record size metric is calculated for the report. 
  • When TABANALYS | DBANALYS tries to put the record fragments together, it crashes as it does not expect the record to ever be greater than the maxrecsize (32000)
A similar issue was identified that was fixed at the same time:  DBANALYS crashes with error 15892 after a new LOB field was added  
Resolution
Upgrade to OpenEdge 11.7.6 Service Pack, 12.2.0 or later.  
  1. DBANALYS | TABANALYS uses the correct record fragment size when it assembles a record with multiple fragments including the 2-bit lob locator
  2. DBTOOL Option 4 ( Record version validation) and DBANALYS will raise a warning message when they process records that exceed the max record size, which will need to be addressed:
WARNING - record 1/769/0 of size 32003 exceeds the maximum size after record upgrade.
  • DBANALYS will write this message to the database lg file
  • DBTOOL will write this message to the screen (STDOUT)

 
Workaround
Identify large records and reduce their size by removing field data that can be deleted or truncated:
 
DEFINE VARIABLE hBufferHandle AS HANDLE NO-UNDO.
hBufferHandle = BUFFER <table name>:HANDLE.
FOR EACH <table name> NO-LOCK:
IF hBufferHandle:RECORD-LENGTH GT 31000 THEN
DISPLAY string(rowid(<table name>)) format "x(25)" <primary identifying field> hBufferHandle:RECORD-LENGTH .
END.
Notes
Keyword Phrase
Last Modified Date2/15/2023 5:49 PM

Powered by