Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

SQL Server - Lock

Estas en el tema de SQL Server - Lock en el foro de Bases de Datos General en Foros del Web. Buenas Mi consulta es sobre trabajar con with(ROWLOCK). Abriendo 2 SQL Query Analizer (QA1 y QA2) diferentes introduzco las consulta que sigue QA1 1- SET ...
  #1 (permalink)  
Antiguo 12/01/2005, 13:26
 
Fecha de Ingreso: abril-2002
Ubicación: Montevideo
Mensajes: 98
Antigüedad: 22 años, 7 meses
Puntos: 0
SQL Server - Lock

Buenas
Mi consulta es sobre trabajar con with(ROWLOCK).
Abriendo 2 SQL Query Analizer (QA1 y QA2) diferentes introduzco las consulta que sigue

QA1

1- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

2- BEGIN TRANSACTION aa

3- SELECT * FROM equipo WITH(ROWLOCK) WHERE equ_id = 134

4- UPDATE equipo
SET
equ_tecnico = 'a',
equ_tipo = 1
WHERE equ_id=134 AND equ_tipo = 0

5- COMMIT TRANSACTION aa


QA2

1- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

2- BEGIN TRANSACTION aa

3- SELECT * FROM equipo WITH(ROWLOCK) WHERE equ_id = 134

4- UPDATE equipo
SET
equ_tecnico = 'b',
equ_tipo = 1
WHERE equ_id=134 AND equ_tipo = 0

5- COMMIT TRANSACTION aa



Por lo que he leído el with(rowlock) bloquea hasta que se commitee la transacción.
Si voy ejecutnado en los 2 Query Analizer paso a paso las consultas (1 1, 2 2, 3 3, 4 4) cuando ejecuto el en QA2 la sentencia 4 llego a un DeadLock. Lo he probado con with(HOLDLOCK, ROWLOCK) y sucede lo mismo.

Por que es esto? No debería qudarse bloqueada la segunda transacción si se ejecutan enforma serializable y isolated?

Gracias,

jsaviola
  #2 (permalink)  
Antiguo 13/01/2005, 11:46
 
Fecha de Ingreso: abril-2002
Ubicación: Montevideo
Mensajes: 98
Antigüedad: 22 años, 7 meses
Puntos: 0
Alguna idea?
  #3 (permalink)  
Antiguo 13/01/2005, 15:47
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Nunca he manejado los locks manualmente, pero.. has probado eliminar el WITH(ROWLOCK) del SELECT? Se supone que SQL Server maneja los locks automáticamente, y solo bajo circunstancias especiales deberías asignarlos a mano.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 13/01/2005, 18:20
 
Fecha de Ingreso: abril-2002
Ubicación: Montevideo
Mensajes: 98
Antigüedad: 22 años, 7 meses
Puntos: 0
Si, he probado sin el WITH(ROWLOCK) del SELECT y da lo mismo.
Por lo que he leído el SQL Server maneja los locks pero hay ocaciones en que deja que lean la misma info.
De todas formas yo no quiero siquiera que puedan leer el dato.
  #5 (permalink)  
Antiguo 14/01/2005, 14:45
 
Fecha de Ingreso: abril-2002
Ubicación: Montevideo
Mensajes: 98
Antigüedad: 22 años, 7 meses
Puntos: 0
Hola,
Por si a alguien le interesa, lo solucione usando WITH(UPDLOCK)
  #6 (permalink)  
Antiguo 14/01/2005, 15:35
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Felicidades
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:13.