DB2 - Problem description
| Problem IC79479 | Status: Closed |
DECLARE GLOBAL TEMPORARY TABLE WITH REPLACE OPTION MIGHT CAUSE DOUBLE FREE IN XA ENVIRONMENT. | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 950 - DB2 | |
| Problem description: | |
Issue fixed with APAR IC79479, under certain conditions
(rollbacks of drops of DGTT is the main contributing factor)
lead to situations that result in -901 sqlcodes from
sqlrl_userTemp* logic. Secondarily, these bugs can result in
applications accessing the DGTTs of other connections via
incorrect package cache matches - which, aside from the -901s
can also result in incorrect TCB counts when an application is
attempting to drop a DGTT that it thinks it has exclusive access
to. Furthermore, in XA connection, declare global temporary
table WITH REPLACE option might cause double memory free.
The fix for IC79479 has two main aspects:
a) Fix to identified logical problems involving dropping of
DGTTs
b) Fix for DGTT design reducing the memory use of DGTTs which
could accumulate significantly during a transaction
To identify if you hit APAR IC79479, seek for following
db2diag.log entries:
1. In XA connection, declare global temporary table WITH REPLACE
option might cause double free as below:
2010-10-18-23.47.52.225880+120 I1182384A1848 LEVEL: Severe
PID : 1421654 TID : 25962 PROC : db2sysc
0
INSTANCE: db2inst1 NODE : 000 DB : DBNAME
APPHDL : 0-262 APPID:
192.168.1.1.4032.1010182147
AUTHID : INSTOWNER
EDUID : 25962 EDUNAME: db2agent (DBNAME) 0
FUNCTION: DB2 UDB, SQO Memory Management,
sqloDiagnoseFreeBlockFailure, probe:10
MESSAGE : Possible memory corruption detected.
DATA #1 : ZRC, PD_TYPE_ZRC, 4 bytes
0x820F0002
DATA #2 : Corrupt block address, PD_TYPE_CORRUPT_BLK_PTR, 8
bytes
0x07000000e0208020
DATA #3 : Block header, PD_TYPE_BLK_HEADER, 24 bytes
0x07000000E0208008 : FAB0 7000 000E 0200 0000 0000 0000 0000
..p.............
0x07000000E0208018 : 0700 0000 E020 80A8
..... ..
DATA #4 : Data header, PD_TYPE_BLK_DATA_HEAD, 48 bytes
0x07000000E0208020 : 0000 0000 0000 0040 0000 0000 0000 0000
.......@........
0x07000000E0208030 : 0000 0010 0000 0D00 0000 0000 0000 0000
................
0x07000000E0208040 : 0100 0000 0000 0000 DB2C AFE8 0000 0038
.........,.....8
CALLSTCK:
[0] 0x0900000012970948 pdLog + 0xD4
[1] 0x090000000F360D64
@79@sqloDiagnoseFreeBlockFailure__FP8SMemFBlk + 0x150
[2] 0x0900000012AC53FC sqlofmblkEx + 0x90
[3] 0x090000000EB15B78
sqlrl_userTempDrop__FP8sqlrr_cbP19sqlrl_userTempEntryPUciT3T4UsT
7T4
+ 0xC30
[4] 0x0900000010D7F0B0
sqlrl_userTempDropAll__FP8sqlrr_cbP16sqlr_usertemp_cb + 0x1C4
[5] 0x0900000010D7E8A8
sqlrl_userTempDropAll__FP8sqlrr_cbP16sqlr_usertemp_cb@glueB8A +
0x74
[6] 0x09000000105F9AF8
sqlrr_cleanup_tran_before_DPS__FP8sqlrr_cbiN62PiT9b + 0x200
[7] 0x090000001270EA94
sqlrxend__FP8sqlrr_cbP15SQLXA_CALL_INFOi + 0x638
[8] 0x0900000012727868 sqlrr_xend__FP14db2UCinterface + 0x1D0
[9] 0x0900000010AC5D54 sqljsSyncEnd__FP14db2UCinterface +
0x5F8
2010-10-18-23.47.52.234609+120 I1184233A461 LEVEL: Severe
PID : 1421654 TID : 25962 PROC : db2sysc
0
INSTANCE: db2inst1 NODE : 000 DB : DBNAME
APPHDL : 0-262 APPID:
192.168.1.1.4032.1010182147
AUTHID : INSTOWNER
EDUID : 25962 EDUNAME: db2agent (DBNAME) 0
FUNCTION: DB2 UDB, SQO Memory Management,
sqloDiagnoseFreeBlockFailure, probe:30
DATA #1 : String, 12 bytes
Double free.
2. In db2diag.log you can see following entries:
2011-10-26-10.38.43.975406+120 I25272923A530 LEVEL: Error
PID : 32702658 TID : 28432 PROC : db2sysc
0
INSTANCE: db2inst11 NODE : 000 DB : DBNAME
APPHDL : 0-60658 APPID: GA91083E.O12D.111026073339
AUTHID : INSTOWNER
EDUID : 28432 EDUNAME: db2agent (DBNAME) 0
FUNCTION: DB2 UDB, catalog services, sqlrl_userTempIUD, probe:40
MESSAGE : entry not found tid =
DATA #1 : Hexdump, 2 bytes
0x070000014AB35350 : 000F
..
==============> TID = 15
2011-10-26-10.38.43.975678+120 I25273454A530 LEVEL: Error
PID : 32702658 TID : 28432 PROC : db2sysc
0
INSTANCE: db2inst11 NODE : 000 DB : DBNAME
APPHDL : 0-60658 APPID: GA91083E.O12D.111026073339
AUTHID : INSTOWNER
EDUID : 28432 EDUNAME: db2agent (DBNAME) 0
FUNCTION: DB2 UDB, catalog services, sqlrl_userTempIUD, probe:40
MESSAGE : entry not found fid =
DATA #1 : Hexdump, 2 bytes
0x070000014AB35352 : 0008
..
==============> FID = 8
2011-10-26-10.38.44.106795+120 I25336469A510 LEVEL: Severe
PID : 32702658 TID : 28432 PROC : db2sysc
0
INSTANCE: db2inst11 NODE : 000 DB : DBNAME
APPHDL : 0-60658 APPID: GA91083E.O12D.111026073339
AUTHID : INSTOWNER
EDUID : 28432 EDUNAME: db2agent (DBNAME) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary
logging
fu, probe:0
MESSAGE : SQLD_TCB:
DATA #1 : String, 37 bytes
Temp Table(15:8)=SESSION .TMP_TABLENAME
NOTE: In your case: TID = 15 , FID = 8 , Temp
Table(15:8)=SESSION .TMP_TABLENAME will be different
3. Following db2diag.log entry might be noticed:
2012-08-27-14.24.23.965613+120 I56366175A1620 LEVEL: Severe
(Origin)
PID : 24772858 TID : 3432 PROC : db2sysc
0
INSTANCE: redacted NODE : 000 DB :
redacted
APPHDL : 0-56246 APPID:
140.104.235.209.51796.120827081
AUTHID : TLAPP
EDUID : 3432 EDUNAME: db2agent (redacted) 0
FUNCTION: DB2 UDB, data management, undoCreate, probe:2695
MESSAGE : ZRC=0x87040055=-2029780907=SQLD_PRGERR "Unknown
PROGRAM ERROR"
DIA8576C A data management services programming error
occurred.
DATA #1 : String, 51 bytes
TCB fix count != 1 when undoing create data object!
DATA #2 : Hexdump, 8 bytes
0x0700000066AF3C80 : 0000 0000 0000 0002
........
CALLSTCK:
[0] 0x0900000004D481D4 pdLog + 0xD4
[1] 0x0900000001E6D158
@102@undoCreate__FP8sqeAgentP8SQLD_TCBPiP16SQLB_OBJECT_DESCP20SQ
LD_TABLE_OBJECT_LRUlP9SQLP_LSN8 + 0x370
[2] 0x0900000001E66980
sqldomUndo__FP8sqeAgentP10SQLDOM_LRHP9SQLP_LSN8sP15SQLD_RECOV_IN
FO + 0x8DC
[3] 0x0900000002517170
sqldmund__FP8sqeAgentP9SQLP_LSN8PcUisT4P8SQLP_TIDP15SQLD_RECOV_I
NFO + 0x1F8
[4] 0x0900000004ECCE10
sqlptudo__FP8sqeAgentPUlP15SQLD_RECOV_INFOP11SQLP_TENTRY + 0x1EC
[5] 0x0900000004ECCAB4 sqlptud1__FP8sqeAgentUl + 0x40
[6] 0x0900000004ECF800
sqlpxrbk__FP8sqeAgentP15SQLXA_CALL_INFOPiP9SQLP_GXIDPP11sqlo_xla
tch + 0x380
[7] 0x0900000004ED01F0
sqlrrbck_dps__FP8sqlrr_cbiN22P15SQLXA_CALL_INFOP9SQLP_GXIDb +
0x1A0
[8] 0x0900000004ED1AC4
sqlrrbck__FP8sqlrr_cbiN32P15SQLXA_CALL_INFO + 0x9B4
[9] 0x0900000004EDB3E0
sqlrrbck__FP8sqlrr_cbiN32P15SQLXA_CALL_INFO@glueB4E + 0x90
NOTE: The processing code that reports the condition (FixCount
!=1) is not the process at the root of the issue. The reporting
process is only finding that something is not right and having
no choice but to quit. There is another process that has a fix
on this TCB, and it should not at this point.
This problem can be observed in v9.7 fp3/3a only. | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * Users who use DGTT WITH REPLACE on XA connections. * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description. * **************************************************************** * RECOMMENDATION: * * Please upgrade v9.5 FixPack 9 or later. * **************************************************************** | |
| Local Fix: | |
| available fix packs: | |
DB2 Version 9.5 Fix Pack 9 for Linux, UNIX, and Windows | |
| Solution | |
This problem is first fixed in DB2 V9.5 FixPack 9. | |
| Workaround | |
not known / see Local fix | |
| BUG-Tracking | |
forerunner : APAR is sysrouted TO one or more of the following: IC80013 follow-up : | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 26.10.2011 12.03.2012 19.10.2012 |
| Problem solved at the following versions (IBM BugInfos) | |
9.5.FP9 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.5.0.9 |
|