Problemas con los bloqueos SQL
Publicado por albert (4 intervenciones) el 27/11/2007 17:58:45
Saludos amigos,
tengo un GRAN problema con un programa informático hecho en VB .NET, y con el SGBD SQL Server 2000. El problema está relacionado con los bloqueos. El programa es cuestión sirve para gestionar empresas de obras y servicios. El programa está distribuido es decir, varios usuarios tienen acceso a la vez a los datos de la base de datos.
El programa funciona perfectamente excepto para un caso, que es el siguiente:
Un usuario conectado a la BD accede a un formulario de envío de material a obra, en dicho formulario se introducen datos, se introducen materiales a enviar a obra. Cuando se acepta el detalle del formulario se registra en la base de datos unos movimientos de stock de material y se accede a la tabla Contadores donde cada registro tiene Codigo_Contador, Descripcion y Valor del contador, para consultar el Codigo_Contador que le corresponde a cada movimiento de stock. Este usuario sin ACEPTAR el formulario para hacer el COMMIT, se espera y deja abierto el formulario (por cualquier motivo).
Paralelamente otro usuario accede al programa y a la BD, accede a hacer un Albarán de compra de material para enviar al almacén de la empresa. Este formulario tiene unas lineas de detalle que son los materiales que se enviarán al almacen. Cada linea de detalle registará un movimiento de stock hacia el almacén de dicho material. Cuando le damos a ACEPTAR el formulario para acabar el albarán SE NOS QUEDA COLGADO!!! Resulta que se cuelga hasta que el 1er usuario acepta o cancela su formulario.
Hemos estado investigando, ya que es un programa bastante complejo, con muchas horas de trabajo (2 años), y la persona que realizó el tema de los bloqueos ya no está. Hemos detectado que el problema es de bloqueos, todas las sentencias INSERT tienen un WITH (NOLOCK) para mejorar eficiencia pero quizá sea el culpable de este bloqueo.
Hemos detectado tb que esto sucede pq aun no se ha hecho el COMMIT de la transaccion que bloquea el registro de la tabla Contadores descrita anteriormente, ya que ambos usuarios acceden al mismo registro para consultar e incrementar posteriormente el contador Valor_Contador del registro.
Os pido ayuda ya que he probado diversas cosas pero sigue quedandose colgado!!!
A quien me ayude le prometo que le envio un regalo!!! Ropa interior Calvin Klein!!
tengo un GRAN problema con un programa informático hecho en VB .NET, y con el SGBD SQL Server 2000. El problema está relacionado con los bloqueos. El programa es cuestión sirve para gestionar empresas de obras y servicios. El programa está distribuido es decir, varios usuarios tienen acceso a la vez a los datos de la base de datos.
El programa funciona perfectamente excepto para un caso, que es el siguiente:
Un usuario conectado a la BD accede a un formulario de envío de material a obra, en dicho formulario se introducen datos, se introducen materiales a enviar a obra. Cuando se acepta el detalle del formulario se registra en la base de datos unos movimientos de stock de material y se accede a la tabla Contadores donde cada registro tiene Codigo_Contador, Descripcion y Valor del contador, para consultar el Codigo_Contador que le corresponde a cada movimiento de stock. Este usuario sin ACEPTAR el formulario para hacer el COMMIT, se espera y deja abierto el formulario (por cualquier motivo).
Paralelamente otro usuario accede al programa y a la BD, accede a hacer un Albarán de compra de material para enviar al almacén de la empresa. Este formulario tiene unas lineas de detalle que son los materiales que se enviarán al almacen. Cada linea de detalle registará un movimiento de stock hacia el almacén de dicho material. Cuando le damos a ACEPTAR el formulario para acabar el albarán SE NOS QUEDA COLGADO!!! Resulta que se cuelga hasta que el 1er usuario acepta o cancela su formulario.
Hemos estado investigando, ya que es un programa bastante complejo, con muchas horas de trabajo (2 años), y la persona que realizó el tema de los bloqueos ya no está. Hemos detectado que el problema es de bloqueos, todas las sentencias INSERT tienen un WITH (NOLOCK) para mejorar eficiencia pero quizá sea el culpable de este bloqueo.
Hemos detectado tb que esto sucede pq aun no se ha hecho el COMMIT de la transaccion que bloquea el registro de la tabla Contadores descrita anteriormente, ya que ambos usuarios acceden al mismo registro para consultar e incrementar posteriormente el contador Valor_Contador del registro.
Os pido ayuda ya que he probado diversas cosas pero sigue quedandose colgado!!!
A quien me ayude le prometo que le envio un regalo!!! Ropa interior Calvin Klein!!
Valora esta pregunta


0