I am trying to use intent locks within a transaction over multiple sessions. The documentation seems to say that one intent lock does allow other sessions to read the record but not to create another intent lock. However when I try that, all intent locks seem to be successful.
In session1 (within a transaction) I create an intent lock by either:
select id, c from tab holdlock where id = 1
select id, c from tab where id = 1 for update by lock
This does create a lock, updating the record does block, but when I issue the same select statements in session2 (also in a transaction) to get (or wait for) an intent lock, the lock also seems to be created for session2, the select returns immediately, i would expect the second select to block until the first session transaction is ended.
I am using sybase ianywhere 11
Any idea what I am doing wrong or how to get a blocking state for the second session?
HOLDLOCK does not acquire an intent row lock - the WITH( UPDLOCK ) table hint does. HOLDLOCK is equivalent to running the SELECT statement at isolation level 3.
answered 13 Oct '10, 15:14