Oracle - Lock Table Nowait - Si que wait, vaya que sí...

 
Vista:

Lock Table Nowait - Si que wait, vaya que sí...

Publicado por Jul (3 intervenciones) el 03/06/2003 17:02:03
Hola peña!!
Estoy usando el lock para bloquear una tabla:
LOCK TABLE JUL_SENTENCIA IN EXCLUSIVE MODE NOWAIT;

Lanzo este comando desde una sesión de SQL-Plus. A continuación abro una sesión diferente y lanzo un procedimiento que actualiza e inserta datos en esa tabla, y en lugar de darme error, se queda esperando a que el bloqueo termine, que es exactamente lo que estoy intentando evitar con el NOWAIT.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Lock Table Nowait - Si que wait, vaya que sí...

Publicado por Harold (697 intervenciones) el 03/06/2003 20:17:10
Es logico que pase eso. La primera sesion tiene bloqueada la tabla.

Saludes

Harold
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pero...

Publicado por Jul (3 intervenciones) el 04/06/2003 15:51:01
Pero se supone que al incluir el NOWAIT, evito que los procesos que intentan acceder a esa tabla se queden esperando y nos dé un error oracle que nos indica que la tabla está bloqueada. Vamos, que me da lo mismo usar el NOWAIT que no usarlo, porque se comporta igual. Yo lo que tengo que conseguir es que en lugar de quedarse esperando, me muestre el error de que la tabla está bloqueada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pero...

Publicado por Byron (300 intervenciones) el 04/06/2003 16:01:24
La opcion NOWAIT en el comando LOCK TABLE, lo que hace es decirle a Oracle que no espere si es que la tabla ya ha sido bloqueada por otro usuario, es decir, si la tabla ya estaba bloqueada antes que le hagas lock table nowait, oracle no espera a que se libere para que tu puedas bloquearla y te envia el mensaje que la tabla ya ha sido bloqueada por otro usuario, si no hubieses especificado el NOWAIT oracle espera a que se libere para bloquearla.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Vale, entonces...

Publicado por Jul (3 intervenciones) el 04/06/2003 16:16:31
Vale, muchas gracias!! Entonces cómo podría hacer para conseguir que cuando una tabla está bloqueada al hacer una update o un insert no se quede esperando? Me han pedido que lo avise mediante un error. Hay alguna forma? Usando el paquete DBMS_LOCK?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Vale, entonces...

Publicado por Harold (697 intervenciones) el 05/06/2003 23:37:07
Mira, en Oracle no hay bloqueos, si los hay es por el diseño del sistema. No se si sabes pero Oracle es el unico DBMS que los lectores no son bloqueados por los escritores y los escritores no son bloqueados por los lectores. Si la tabla esta siendo usada al momento que otro usuario actualize, segun tu diseño, el bloqueo se podria esperar toda la vida. Un consejo, el commit tiene que ir al FINAL de todo, no hagas commits parciales para hacer las cosas "mas rapido" que no es asi.
Para mas informacion deberias de buscar en asktom.oracle.com.

Saludes

Harold
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar