DB2 - Problem description
| Problem IC93791 | Status: Closed |
DB2 CRASH CAUSED BY PACKED DESCRIPTOR INCONSISTENCY AFTER ALTER TABLE SET TYPE BLOB/CLOB | |
| product: | |
DB2 FOR LUW / DB2FORLUW / A10 - DB2 | |
| Problem description: | |
Altering column type to the same type as it currently e.g.:
$ db2 "CREATE TABLE T1 (ONE INT, TWO BLOB(1000000) INLINE LENGTH
1000)"
$ db2 "ALTER TABLE T1 ALTER TWO SET DATA TYPE BLOB(1000000)"
may results in column length not being re-calculated properly if
given column has INLINE LENGTH specified. That may lead to
runtime crash because of detected memory corruption while
executing a query containing that column.
Possible stack (may differ)
FUNCTION: DB2 UDB, SQO Memory Management,
sqloDiagnoseFreeBlockFailure, probe:10
MESSAGE : Possible memory corruption detected.
[...]
pdLog + 0xE4
@78@sqloDiagnoseFreeBlockFailure__FP8SMemFBlkCb + 0x158
sqlofmblkEx + 0xC
sqlra_sqlC_mem_free_block__FP8sqlrr_cbUlPv + 0x4C
sqlra_sqlC_mem_free_block__FP8sqlrr_cbUlPv@glue887 + 0x74
sqlra_fp_dealloc__FP15sqlra_func_path + 0x184
sqlra_fp_dealloc__FP15sqlra_func_path@glue886 + 0x74
sqlra_free_section__FP8sqlrr_cbP25sqlra_sql_context_siblingiN23
+ 0x324
sqlra_sqlC_free_section__FP8sqlrr_cbP25sqlra_sql_context_sibling
i + 0xA0
sqlra_sqlC_get_stmt__FP8sqlrr_cbPUcUiUciP17sqlra_cached_stmtPi +
0x8C
Query, that was being executed should also be dumped to the
db2diag.log:
FUNCTION: DB2 UDB, relation data serv, sqlrr_dump_sibling,
probe:140
MESSAGE : section stmt
DATA #1 : Hexdump, 180 bytes
0x0A000200B1F3F300 : 0A20 2020 2020 2020 2020 2020 2020 2020
.
0x0A000200B1F3F310 : 2053 454C 4543 5420 5457 4F20 4652 4F4D
SELECT TWO FROM
0x0A000200B1F3F320 : 2054 3120 4541 5243 485F 4E41 4D45 2C20
T1
To confirm the problem, you can examine packed descriptor the
specific table by executing:
$ db2cat -d <db_name> -s <schema> -n <table_name>
and check if column length is lower than inline length for the
affected column, which is the symptom of corruption, e.g:
$ db2cat -d sample -s db2inst1 -n t1:
[...]
COLUMN NAME : TWO
Length of column name : 3
Column id : 1
Col type {hex, type} : 0x0108 , BLOB
Col dist. type {hex, type}: 0x007c , BLOB
Column length : 216
Blob length : 100000
Statistic offset : -1
Flags : 0x00000090
- SQLRG_MIXED
- SQLRG_NULLIND
Codepage : 0
Collation name : BINARY
Collation ID in hex : B'00 00 00 05 FF 01 FF FF
Length of user default : 0
Logged : 1
Compact : 0
Inline Length : 1000 | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * All platforms * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 Version 10.1 and Fix Pack 3 * **************************************************************** | |
| Local Fix: | |
Force column length to be re-calculated by altering the table by increasing either size or inline length. Example: $ db2 "ALTER TABLE T1 ALTER TWO SET DATA TYPE BLOB(1000001)" or: $ db2 "ALTER TABLE T1 ALTER TWO SET INLINE LENGTH 1001" | |
| available fix packs: | |
DB2 Version 10.1 Fix Pack 3 for Linux, UNIX, and Windows | |
| Solution | |
Problem was first fixed in DB2 Version 10.1 and Fix Pack 3 | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 28.06.2013 23.10.2013 23.10.2013 |
| Problem solved at the following versions (IBM BugInfos) | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 10.1.0.3 |
|
| 10.1.0.3 |
|