Select bloquea y no deja hacer update

26/05/2004 - 11:11 por Manuel | Informe spam
Es posible que una select me haga un bloqueo por pag y me
bloquee la ejecucion de un update?
Estas mismas pruebas las he hecho en otro servidor con una
copia de seguridad, tirando de local y no me ocurre.

Muchas Gracias.Un saludo.

Preguntas similare

Leer las respuestas

#1 Adrian D. Garcia
26/05/2004 - 11:34 | Informe spam
Depende de varios factores.

Si es un SELECT que no se ejecuta dentro de una transaccion bloqueara las
filas afectadas en forma "compartida" est significa que permitira a acceder
a leerlas pero no a actualizarlas durante la ejecucion del query. Si este
select lee un determinado porcentaje (no recuerdo cual es) de filas de una
pagina, SQL Server bloquea en forma compartida la pagina y no las filas de
la misma.
Si el SELECT se encuentra dentro de una transaccion, depende del nivel de
aislamiento que tenga la misma para que el bloqueo se mantenga durante mas o
menos tiempo y del tipo de bloqueo que se produce.

Podrias contarnos mas sobre tu caso?

Saludos

Adrian D. Garcia
NDSoft
MCSD
"Manuel" escribió en el mensaje
news:12b7401c44301$6f38fad0$
Es posible que una select me haga un bloqueo por pag y me
bloquee la ejecucion de un update?
Estas mismas pruebas las he hecho en otro servidor con una
copia de seguridad, tirando de local y no me ocurre.

Muchas Gracias.Un saludo.
Respuesta Responder a este mensaje
#2 Manuel
26/05/2004 - 11:55 | Informe spam
Es una select de una gran parte de la tabla, y estos
datos se le hace un update fila a fila...he mirado los
bloqueos el spid y me da que el update no se puede hacer
porque esta bloqueado por el select. Que solucion tengo,
todo este proceso lo hago desde recordset en vb.


Un saludo y gracias
Respuesta Responder a este mensaje
#3 Carlos Sacristan
26/05/2004 - 12:08 | Informe spam
¿Haces el SELECT y dentro del procesamiento de éste intentas enviar un
UPDATE por el campo que estés tratando en ese momento?. ¿Has mirado si es
posible realizar ese UPDATE en una sola instrucción?, porque al fin y al
cabo estás usando un procesamiento fila a fila (cursores), que es lo que se
intenta evitar siempre que se pueda.

Es normal que no se pueda realizar un UPDATE (que necesita un bloqueo
exclusivo de la fila) si existe una consulta abierta (que realiza un bloqueo
compartido como mínimo sobre los registros que esté manejando). Me parece
que tendrás que cambiar la lógica que estás usando para poder solucionar el
problema



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Manuel" escribió en el mensaje
news:128f801c44307$911a0490$
Es una select de una gran parte de la tabla, y estos
datos se le hace un update fila a fila...he mirado los
bloqueos el spid y me da que el update no se puede hacer
porque esta bloqueado por el select. Que solucion tengo,
todo este proceso lo hago desde recordset en vb.


Un saludo y gracias
Respuesta Responder a este mensaje
#4 Adrian D. Garcia
26/05/2004 - 12:26 | Informe spam
Coincido conCarlos, pero tambien puede llegar a ser de que el proceso de
actualizacion sea lo suficiente complejo como para recurrir a realizar el
mismo desde una aplicacion externa.
Entonces las soluciones posibles serian:
1) Realizar un UPDATE a todas las filas en una sola instruccion como lo
especifico Carlos (Es la mejor de todas)

2) Utilizar un cursor (del lado del cliente) del tipo Readonly/Forward Only
(no estaras abriendo un cursor dinamico desde ADO?)

3) Ejecutar el query con el hint de NOLOCK. Ej: SELECT * FROM tabla
WITH(NOLOCK). Ojo! Esta opcion lee tambien datos que estan en transacciones
y que no estan confirmados. Hay que analizar muy bien el caso.

Saludos

Adrian D. Garcia
NDSoft
MCSD
"Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
news:

¿Haces el SELECT y dentro del procesamiento de éste intentas enviar un
UPDATE por el campo que estés tratando en ese momento?. ¿Has mirado si es
posible realizar ese UPDATE en una sola instrucción?, porque al fin y al
cabo estás usando un procesamiento fila a fila (cursores), que es lo que


se
intenta evitar siempre que se pueda.

Es normal que no se pueda realizar un UPDATE (que necesita un bloqueo
exclusivo de la fila) si existe una consulta abierta (que realiza un


bloqueo
compartido como mínimo sobre los registros que esté manejando). Me parece
que tendrás que cambiar la lógica que estás usando para poder solucionar


el
problema



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Manuel" escribió en el mensaje
news:128f801c44307$911a0490$
> Es una select de una gran parte de la tabla, y estos
> datos se le hace un update fila a fila...he mirado los
> bloqueos el spid y me da que el update no se puede hacer
> porque esta bloqueado por el select. Que solucion tengo,
> todo este proceso lo hago desde recordset en vb.
>
>
> Un saludo y gracias


Respuesta Responder a este mensaje
#5 Manuel
26/05/2004 - 12:46 | Informe spam
Gracias a ambos, ya se que la logica no es la mas
apropiada, pero es justo lo que trataba de evitar.
Reestructuraremos el proceso.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida