none
Duda con Transacciones en VB.Net y SqlServer RRS feed

  • Pregunta

  • Tengo una aplicación que realiza multiples insercciones y updates a la base de datos, pero que a su vez necesita dentro de esas transacciones estar consultando a las tablas que va afectando pero tengo el problema de que en las consultas que hago dentro de la transaccion se produce bloqueo mientras se esta consultando. He estado leyendo y hablan de las consultas sucias pero no me parecen una buena opción. Habra posibilidad de manejar todo dentro de una sola transaccion y a la vez hacer consultas sin que estas bloqueen la base de datos?

    Gracias.

    miércoles, 4 de julio de 2018 15:10

Todas las respuestas

  • Tendria que saber a detalle que estas haciendo, trabaje mucho tiempo para una empresa que hace labores de Call Center, 500 posiciones, insertando y actualizando registros, ¿como resolvi el problema de los interbloqueos?, cada que un OPERADOR tomaba un registro, de forma inmediata, en la misma transaccion, actualizaba dicho registro con el ID del operador, en un campo especifico para esta solucion. Entonces, asi, era imposible que DOS operadores (o mas) tomaran el mismo registro.
    miércoles, 4 de julio de 2018 15:25
  • La aplicación lo que hace es unos pagos, pero entonces ella toma datos de diferentes tablas y va haciendo como dije insert y updates sobre esas mismas tablas que esta consultando. Ese proceso es muy pesado y lo realiza una sola persona y se trata de hacer en un horario en el que no haya mucha concurrencia de usuarios para no poner mas lenta la bd, pero ahora mismo la aplicación tiene las transacciones segmentadas por asi decir, y entonces si una transaccion falla, la otra que ya se hizo pues no se revierte y entonces quedan datos guardados en una tabla si y en otras no.

    La idea es poder dejar todo bajo una sola transacción y de esa manera si algo falla que revierta todo el proceso.

    Te pongo un ejemplo, tengo 100 cedulas para pagar, entonces proceso una a una y voy consultando el ultimo pago y luego inserto el pago nuevo en la misma tabla en el que consulte el ultimo, pero me toca abrir y cerrar una transaccion por cada cedula porque si dejo la transacción abierta para las 100 cedulas, llega un momento en que se bloquea la bd y no deja seguir, y asi como lo tengo ahora si una transaccion falla ya las demas se hicieron entonces le pago a unas cedulas si y a otras no. 

    miércoles, 4 de julio de 2018 15:34
  • Hola,

    Dentro de una transaccion cada registro que se actualiza o se elimina se bloquea hasta que la transaccion que lo bloqueo confirma o anula la transaccion. Por supuesto que los modificados se liberan y los eliminados se eliminan.

    Todo registro que se bloqueo en una transaccion puede ser accedido por la transaccion que lo bloqueo. Por ejemplo si la transaccion T1 actualizo el campo MiCampo con el valor "ABCD" del registro 20 de la tabla MiTabla y luego es accedido por la misma transaccion T1 el valor obtenido del campo MiCampo para el registro 20 sera "ABCD".

    En otras palabras, los registros bloqueados estaran disponibles solo para la transaccion que los bloqueo. Para las demas transacciones estaran bloqueados, no podran ser leidos. Al intentar leerlos el motor quedara esperando hasta que se desbloquee, se salga por time out o deadlook.



    Victor Koch

    miércoles, 4 de julio de 2018 17:35
  • Si lo realiza UNA SOLA PERSONA, como es que tiene concurrencia de transacciones
    jueves, 5 de julio de 2018 16:44
  • Pero usted comenta que el proceso solo lo puede ejecutar una sola persona, ¿donde esta la concurrencia?
    jueves, 5 de julio de 2018 16:45