como lockear para consultas concurrentes

14/09/2007 - 14:48 por DarthSidious | Informe spam
buenos dias, estoy teniendo que hacer una aplicacion que van a usar varios
clientes al mismo tiempo, y la base de datos esta montada sobre un sql server
2000.
El sql debe devolver a la aplicacion un registro para que el cliente lo
utilice, la aplicacion cliente lo unico que hace es "pedir" un nuevo
registro. El problema creo que lo voy a tener con los lockeos, porque debo
asegurarme de que 2 clientes no vayan a recuperar el mismo registro por
ejemplo. Lo que pense es poner en la tabla de registros un bit que indique si
esa fila esta en uso o no. Para esto, en el stored procedure que devuelve el
registro, hago lo siguiente:

primero: selecciono un registro que este en la fecha de hoy
segundo: actualizo ese registro para poner que esta siendo usado, por X
usuario
tercero: hago otro select mas sobre este registro presiso que se recupero,
para obtener datos que necesito trabajar en el stored procedure, antes de
devolverle todo al cliente.

Lo que necesitaria yo es que todos esos pasos se ejecuten atomicamente, que
cuando yo voy a hacer el update para poner el registro en uso, otro cliente
no pueda hacer un select sobre ese registro y me estoy mareando un poco
con locks porque soy nuevo en esto. He leido que se puede hacer un lock a
nivel de fila, pero no me queda claro la duracion del mismo, si dura lo que
dura ese "select" especifico o si dura lo que dura todo el stored procedure.

bueno cualqueir ayuda se agradece.

salu2

Preguntas similare

Leer las respuestas

#1 Maxi
14/09/2007 - 17:30 | Informe spam
Hola, si desde tu aplicacion no quieres q otra persona lea un registro que
ya alguien ha seleccionado podrias ponerle una marca como bien indicas.
Yo no haria un lock en la base de datos para este tipo de concurrencia que
estas buscando.


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"DarthSidious" escribió en el
mensaje news:
buenos dias, estoy teniendo que hacer una aplicacion que van a usar varios
clientes al mismo tiempo, y la base de datos esta montada sobre un sql
server
2000.
El sql debe devolver a la aplicacion un registro para que el cliente lo
utilice, la aplicacion cliente lo unico que hace es "pedir" un nuevo
registro. El problema creo que lo voy a tener con los lockeos, porque debo
asegurarme de que 2 clientes no vayan a recuperar el mismo registro por
ejemplo. Lo que pense es poner en la tabla de registros un bit que indique
si
esa fila esta en uso o no. Para esto, en el stored procedure que devuelve
el
registro, hago lo siguiente:

primero: selecciono un registro que este en la fecha de hoy
segundo: actualizo ese registro para poner que esta siendo usado, por X
usuario
tercero: hago otro select mas sobre este registro presiso que se recupero,
para obtener datos que necesito trabajar en el stored procedure, antes de
devolverle todo al cliente.

Lo que necesitaria yo es que todos esos pasos se ejecuten atomicamente,
que
cuando yo voy a hacer el update para poner el registro en uso, otro
cliente
no pueda hacer un select sobre ese registro y me estoy mareando un
poco
con locks porque soy nuevo en esto. He leido que se puede hacer un lock a
nivel de fila, pero no me queda claro la duracion del mismo, si dura lo
que
dura ese "select" especifico o si dura lo que dura todo el stored
procedure.

bueno cualqueir ayuda se agradece.

salu2
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida