cancel
Showing results for 
Search instead for 
Did you mean: 

Intent locks not blocking each other?

Former Member
2,699

Hi,

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

or

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?

Rob Gansevles

Breck_Carter
Participant

Ahhhh, locking... almost as complicated as cursors, and changing almost as fast 🙂

Former Member
0 Kudos

What version and build number of SQL Anywhere 11 are you running?

Accepted Solutions (1)

Accepted Solutions (1)

Former Member

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.

Former Member
0 Kudos

By the way, the HOLDLOCK syntax you are using is Transact-SQL. You will need to use WITH() syntax for the table hint if you are attempting to specify UPDLOCK.

Former Member
0 Kudos

Thanks, with(updlock) is what I needed.

Rob

Answers (0)