MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

locking of the table in cics program while reading table.

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Database
View previous topic :: View next topic  
Author Message
eshwar
Beginner


Joined: 05 May 2008
Posts: 3
Topics: 1

PostPosted: Mon May 05, 2008 10:24 pm    Post subject: locking of the table in cics program while reading table. Reply with quote

i need to handle locking of the table exclusively in cics program while reading table.

i know two ways to do this .

1.
we can use RR isolation instead of CS isolation level but this is not prfarable as it raises performence issue since it locks all pages .
2.
we can use lock table statement in program but this also not preferable as it raises performence issue since it locks entire table space

can any body suggest me to do in better way so that there will not be any performence issue.

Regards,
Eshwar.
Back to top
View user's profile Send private message
Terry_Heinze
Supermod


Joined: 31 May 2004
Posts: 391
Topics: 4
Location: Richfield, MN, USA

PostPosted: Tue May 06, 2008 9:18 am    Post subject: Reply with quote

I don't understand. You want to "lock the table exclusively", but don't want your locking to have performance issues. That seems contradictory. What do you want to lock? The table? The page? The row you're reading? If you are doing "read only", do a SELECT with the FOR READ ONLY clause and use CS and do not specify WITH UR.
_________________
....Terry
Back to top
View user's profile Send private message Send e-mail
dbzTHEdinosauer
Supermod


Joined: 20 Oct 2006
Posts: 1411
Topics: 26
Location: germany

PostPosted: Tue May 06, 2008 9:47 am    Post subject: Reply with quote

as terry said, why are you worried about locking a table?

first, why is this true:
Quote:
i need to handle locking of the table exclusively in cics program while reading table


the last thing you want to do is lock a table in a cics region. If you would give us an idea of what you are trying to accomplish, we could give some hints.

keep in mind the db2 reorgs can reorg a table without a table lock. I have rarely seen a situation whereby you need to lock a table.
_________________
Dick Brenholtz
American living in Varel, Germany
Back to top
View user's profile Send private message
eshwar
Beginner


Joined: 05 May 2008
Posts: 3
Topics: 1

PostPosted: Thu May 08, 2008 1:15 am    Post subject: Reply with quote

i have a situation where ID gets created by adding 1 to the max of (ID) of table. when two users creating ID at the same time will get the same ID .since two parallel cics sessions read the same table to get the max of (id) from the table . obviously this should not happen thats why i would like to have lock for the row which has been read so that the other user who is creating at the same will not be able to access the same row of the table. hope u got my requirement now. can u pls suggest is there any way to have row level locking of table in program itself.
Back to top
View user's profile Send private message
dbzTHEdinosauer
Supermod


Joined: 20 Oct 2006
Posts: 1411
Topics: 26
Location: germany

PostPosted: Thu May 08, 2008 7:45 am    Post subject: Reply with quote

you can specify row level locking during the table create.

again, program initiated locking (explicitly executing 'lock' sql) is not the way to go.

you should also look into identity columns.

or a loop:
do until sqlcode = 0
select maxid
update maxid where maxid = prev-maxid
endloop

though this code is a primative solution, you have a situation where the fault lies in the design.
_________________
Dick Brenholtz
American living in Varel, Germany
Back to top
View user's profile Send private message
eshwar
Beginner


Joined: 05 May 2008
Posts: 3
Topics: 1

PostPosted: Tue May 20, 2008 1:25 pm    Post subject: Reply with quote

this situation can be handled using ENQ ., it wil lock the resource which is given in ENQ command .this we need to code just before getting max id of the table .once the insert is successful on a table we can release the reource using DEQ.
Back to top
View user's profile Send private message
RMi
Beginner


Joined: 21 Jun 2006
Posts: 8
Topics: 0
Location: India

PostPosted: Mon Jun 02, 2008 5:53 am    Post subject: Reply with quote

Eshwar,

I have a question here on the ENQ. Does ENQ work across CICS regions? You stated that your concern is to avoid two different CICS regions getting the same value through the MAX function.
Back to top
View user's profile Send private message
dbzTHEdinosauer
Supermod


Joined: 20 Oct 2006
Posts: 1411
Topics: 26
Location: germany

PostPosted: Tue Jun 03, 2008 2:54 am    Post subject: Reply with quote

you could use a cursor for update, which would 'lock' your row until the update current cursor and commit (or end of task).

the cursor would effectively enq your row, thus saving you the additional code of deq.

since the cursor lock on the row is db2, it would therefore be effective in any environemnt (batch contention, cross region, etc...)

but you have not responded this week, assume you have your solution.
_________________
Dick Brenholtz
American living in Varel, Germany
Back to top
View user's profile Send private message
videlord
Beginner


Joined: 09 Dec 2004
Posts: 147
Topics: 19

PostPosted: Wed Jun 04, 2008 9:44 pm    Post subject: Reply with quote

eshwar wrote:
i have a situation where ID gets created by adding 1 to the max of (ID) of table. when two users creating ID at the same time will get the same ID .since two parallel cics sessions read the same table to get the max of (id) from the table . obviously this should not happen thats why i would like to have lock for the row which has been read so that the other user who is creating at the same will not be able to access the same row of the table. hope u got my requirement now. can u pls suggest is there any way to have row level locking of table in program itself.

2 options, easy to solve your issue:
1. define this ID as Generated ... as identity...
2. in DB2 V8, create SQEUENCE object
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Database All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group