database deadlocks - How to do a safe "SELECT FOR UPDATE" with a WHERE condition over multiple tables on a DB2? -
problem
on db2 (version 9.5) sql statement
select o.id table1 o, table2 x [...] update rr
gives me error message sqlstate=42829
(the update clause not allowed because table specified cursor cannot modified).
additional info
i need specify with rr
, because i'm running on isolation level read_committed
, need query block while there process running same query.
solution far...
if instead query this:
select t.id table t t.id in ( select o.id table1 o, table2 x [...] ) update rr
everything works fine.
new problem
but deadlock exceptions when multiple processes perform query simultaneously.
question
is there way formulate for update
query without introducing place deadlock can occur?
first, having isolation level read_committed
not need specify with rr
, because results in isolation level serializable
. specify with rs
(read stability) enough.
to propagate for update rs
inner select have specify additionally use , keep update locks
.
so complete statement looks this:
select t.id table t t.id in ( select o.id table1 o, table2 x [...] ) update rs use , keep update locks
i made tests on db2 via jdbc , worked without deadlocks.
Comments
Post a Comment