DB2 - Problem description
| Problem IC73653 | Status: Closed |
Unintended Internal commit in CLI stored procedure in federated 2 phase commit environment | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
| Problem description: | |
When a stored procedure uses DB2 CLI interface to make
connection to the database in a federated 2
phase commit environment, the DB2 CLI driver may incorrectly
issue an implicit COMMIT. (A federated 2 phase commit
environment involves a federated server with option
"DB2_TWO_PHASE_COMMIT 'Y'"). This results in a premature ending
of the transaction.
Also this can impact the execution of an Oracle PL/SQL statement
in a database with Oracle compatibility enabled even without the
explicit call to a procedure that uses DB2 CLI connections.
This is due to the fact
that internally DB2 uses an internal CLI stored procedure to
process the Oracle PL/SQL statement.
In the case of the Oracle PL/SQL statement in a federated two
phase commit environment, this can result in a number of
symptoms:
- a transaction that is not complete will be committed
- internal package cache locks (internal V) will be released
resulting in possible -901 sqlcodes and possible traps.
When it results in traps, the stack traces at run time might be
different each time. For example, the stack traces can have but
not limited to the following two types:
sqlribno
sqlriSectInvoke
sqlrr_process_execute_request
sqlrr_execute.fdpr.clone
sqljs_ddm_excsqlstt
sqljsParseRdbAccessed
sqljsParse.fdpr.clone
sqljsSqlam
sqljsDriveRequests
sqljsDrdaAsInnerDriver
sqljsDrdaAsDriver
RunEDU
EDUDriver
sqloEDUEntry
and
run
pvm_entry
sqloInvokeFnArgs
sqloInvokeFnArgs
sqlriInvokerTrusted
sqlriInvokeInvoker
sqlricall
sqlriSectInvoke
sqlrr_process_execute_request
sqlrr_execute.fdpr.clone
sqljs_ddm_excsqlstt.fdpr.clone
sqljsParseRdbAccessed
sqljsParse.fdpr.clone
sqljsSqlam
sqljsDriveRequests
sqljsDrdaAsInnerDriver
sqljsDrdaAsDriver
RunEDU
EDUDriver
sqloEDUEntry
And before the trap occurs, you might see the following
db2diag.log messages in regards to -901 sqlcode and lost of the
internal V lock:
2010-11-28-17.35.46.070787+540 I147280A1304 LEVEL: Severe
PID : 10220174 TID : 9768 PROC : db2sysc
0
INSTANCE: db2inst1 NODE : 000 DB : DB1
APPHDL : 0-29 APPID: 127.0.0.1.101128081210
AUTHID : DB2INST1
EDUID : 9768 EDUNAME: db2agent (DB1) 0
FUNCTION: DB2 UDB, lock manager, sqlplhld, probe:430
MESSAGE : ZRC=0x82100001=-2112880639=SQLP_NONSEVERE_PRGERR
"DPS detects non-severe programming error"
DIA8532C An internal processing error has occurred.
DATA #1 : String, 24 bytes
lock not owned by caller
DATA #2 : String, 8 bytes
SQLPLHLD
CALLSTCK:
[0] 0x090000000510D9E8 pdLog + 0xEC
[1] 0x090000000666CCAC sqlzSetAndLog901 + 0x1A8
[2] 0x090000000460B1CC sqlzSetAndLog901@glueD33 + 0xC4
[3] 0x0900000005368D24 sqlplhld__FP8sqeAgentP14SQLP_LOCK_INFO
+ 0x44
[4] 0x09000000052C2CE8
sqlplhld__FP8sqeAgentP14SQLP_LOCK_INFO@glueC55 + 0x74
[5] 0x0900000004BAC970 sqlra_close_sections__FP8sqlrr_cb +
0x458
[6] 0x0900000005041B80 sqlra_close_sections__FP8sqlrr_cbUiT2 +
0x104
[7] 0x090000000503FC90
sqlrr_cleanup_tran_before_DPS__FP8sqlrr_cbiN62PiT9b + 0x204
[8] 0x0900000004E91684 sqlrrcom__FP8sqlrr_cbiT2 + 0x11C
[9] 0x09000000050438FC sqlrr_commit__FP14db2UCinterface + 0xB0
2010-11-28-17.35.46.071364+540 I148585A808 LEVEL: Error
PID : 10220174 TID : 9768 PROC : db2sysc
0
INSTANCE: db2inst1 NODE : 000 DB : DB1
APPHDL : 0-29 APPID: 127.0.0.1.101128081210
AUTHID : DB2INST1
EDUID : 9768 EDUNAME: db2agent (DB1) 0
FUNCTION: DB2 UDB, lock manager, sqlplhld, probe:430
DATA #1 : SQLP_LOCK_INFO, PD_TYPE_SQLP_LOCK_INFO, 96 bytes
lockname 0000008A0000000A000130A056 SQLP_VARIATION
pLRB 70000003f3f2b00 prevIntent NON curIntent ..S intent ..S
duration 1
rlInFlags 0x00000001 rlOutFlags 0x00000000 cursorBitmap
0x40000000 rrIIDin 0 rrIIDout 0
rlUserDataOut.UNKNOWN 0000 0000 0000 0000
........
rlUserDataIn.UNKNOWN 0700 0001 D5E9 0080
........
<messages snippet>
2010-11-28-17.35.46.071857+540 I151104A865 LEVEL: Error
PID : 10220174 TID : 9768 PROC : db2sysc
0
INSTANCE: db2inst1 NODE : 000 DB : DB1
APPHDL : 0-29 APPID: 127.0.0.1.101128081210
AUTHID : DB2INST1
EDUID : 9768 EDUNAME: db2agent (DB1) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_data (secondary
logging func, probe:0
DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA sqlcabc: 136 sqlcode: -901 sqlerrml: 24
sqlerrmc: lock not owned by caller
sqlerrp : SQLPL00F
sqlerrd : (1) 0x82100001 (2) 0x00000000 (3)
0x00000000
(4) 0x00000000 (5) 0xFFFFFE52 (6)
0x00000000
sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11)
sqlstate: | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * Users running a CLI stored procedure in a 2 phase commit * * federated environment( i.e a federated server with option * * "DB2_TWO_PHASE_COMMIT 'Y'"). This issue has been known to * * impact the execution of an Oracle PL/SQL statement in a * * database with Oracle compatibility enabled. * **************************************************************** * PROBLEM DESCRIPTION: * * See above Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 Version 9.7 Fix Pack 4 * **************************************************************** | |
| Local Fix: | |
| available fix packs: | |
DB2 Version 9.7 Fix Pack 4 for Linux, UNIX, and Windows | |
| Solution | |
Problem was first fixed in Version 9.7 Fix Pack 4 | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 04.01.2011 12.05.2011 12.05.2011 |
| Problem solved at the following versions (IBM BugInfos) | |
9.7.FP4 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.7.0.4 |
|