Bloqueos en SqlServer 2005

27/09/2007 - 08:34 por Paul | Informe spam
Hola,
He leódo lla ayuda sobre bloqueos, lo de ISOLATION LEVEl, y todo eso
pero no acanbo de entenderlo, he hecho varias pruebas y no acabo de
verlo claro.

Tengo una aplicación y me gustario que cuando un usuario lee rgistros
de una tabla, ningun otro usuario pueda manipular esta tabla, es decir
que pueda hacer select, pero no insert, ni update ni delete. Y ademas
que detectara que no puede realizar estas operaciones antes de
hacerlas, no se si hay alguna operación para decir hay bloqueo, o algo
así


Muchas gracias

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
27/09/2007 - 16:14 | Informe spam
Lea en los Books Online acerca del uso de "hints" (trad. "Sugerencias de
tabla").

El ejemplo siguiente especifica que se aplique un bloqueo compartido a la
tabla Production.Product y que se mantenga hasta que finalice la instrucción
UPDATE. Observe el uso del hint TABLOCK:

UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%'

Si me permite una opinión personal, lo que usted quiere hacer (bloquear
totalmente una tabla mientras un usuario lee datos) es una mala idea porque
produce mucho bloqueo, disminuyendo el acceso concurrente de los usuarios.

Además este tipo de comportamiento lo hace automáticamente el motor de base
de datos que no permite el acceso a un dato que está siendo modificado por
otro usuario.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Paul" wrote:

Hola,
He leódo lla ayuda sobre bloqueos, lo de ISOLATION LEVEl, y todo eso
pero no acanbo de entenderlo, he hecho varias pruebas y no acabo de
verlo claro.

Tengo una aplicación y me gustario que cuando un usuario lee rgistros
de una tabla, ningun otro usuario pueda manipular esta tabla, es decir
que pueda hacer select, pero no insert, ni update ni delete. Y ademas
que detectara que no puede realizar estas operaciones antes de
hacerlas, no se si hay alguna operación para decir hay bloqueo, o algo
así


Muchas gracias


Respuesta Responder a este mensaje
#2 Enrique Catala Bañuls
27/09/2007 - 17:25 | Informe spam
Hola Paul, creo que lo que tu necesitas es utilizar una transaccion con nivel
de aislamiento "READ SERIALIZABLE".

Con este tipo de aislamiento, lo que una conexión este leyendo, ninguna otra
lo va a poder modificar (leer si ), pero encima tampoco van a poder realizar
inserciones en el rango bloqueado hasta que la transaccion finalice.

Ten muchisimo cuidado con este tipo de aislamiento porque es una fuente de
futuros deadlocks y percepciones de lentitud por parte del usuario. Lo que
hagas de esta forma ha de estar fuertemente justificado de forma que sea
imperativo este funcionamiento y ademas ha de durar el menor tiempo posible (
que no se te ocurra abrir una transacción con este nivel de aislamiento que
involucre muchas tablas y encima dure 30 segundos, por ejemplo).

Espero haberte servido de ayuda.

Salu2!
Atentamente, Enrique Catala Bañuls


"Paul" wrote:

Hola,
He leódo lla ayuda sobre bloqueos, lo de ISOLATION LEVEl, y todo eso
pero no acanbo de entenderlo, he hecho varias pruebas y no acabo de
verlo claro.

Tengo una aplicación y me gustario que cuando un usuario lee rgistros
de una tabla, ningun otro usuario pueda manipular esta tabla, es decir
que pueda hacer select, pero no insert, ni update ni delete. Y ademas
que detectara que no puede realizar estas operaciones antes de
hacerlas, no se si hay alguna operación para decir hay bloqueo, o algo
así


Muchas gracias


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