Extraño problema SQL2005. "SqlConnection no admite transacciones paralelas"

StackOverflow https://stackoverflow.com/questions/407320

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un problema que parece ser el resultado de una situación de punto muerto. Ahora estamos buscando la raíz del problema, pero mientras tanto, queríamos reiniciar el servidor y poner en marcha al cliente.

Y ahora, cada vez que iniciamos el programa, simplemente dice que "SqlConnection no admite transacciones paralelas". No hemos cambiado nada en el programa, está compilado y en el servidor de los clientes, pero después del posible "punto muerto", la situación que desea volver a estar en línea.

Tenemos 7 clientes (computadoras) ejecutando el programa, cada cliente está hablando con un servicio web en un servidor local, y el servicio web está hablando con el servidor sql (la misma máquina que el servidor web).

Hemos reiniciado tanto el servidor SQL como el servidor iis, pero no hemos reiniciado el servidor debido a otros servicios importantes que se ejecutan en el servidor, por lo que es lo último que hacemos. No podemos ver bloqueos ni nada en la pestaña de administración.

Mi pregunta es, ¿por qué la " SqlConnection no admite transacciones paralelas " error que pasa de una vez a otra sin cambiar nada en el programa y todavía vive entre el reinicio de SQL.

Parece que sucede en la primera solicitud de db que hace el programa cuando se inicia.

Si necesitas más información solo pregunta. Estoy desconcertado ...

Más información: No creo que tenga " largo " ejecutando transacciones. El escenario a menudo es que tengo un conjunto de datos con 20-100 filas (ContractRows) en el que haré una actualización en el tableAdapter. También hago un bucle a través de esas 20-100 filas y para algunas de ellas crearé ad-hook-sql-querys (por ejemplo, si un producto alquilado está marcado como devuelto, creo una consulta sql para marcar el producto como devuelto en la base de datos)

Así que hago esto muy simplificado:

Create objTransactionObject
Create objtableadapter (objTransactionObject)
for each row in contractDS.contractrows
  if row.isreturned then
    strSQL &= "update product set instock=1 where prodid=" & row.productid & vbcrlf
 End if
next
objtableadapter.update(contractDS)
objData.ExecuteQuery(strSQL, objTransactionObject)    
if succsesfull 
  objtransactionobject.commit
else
  objtransactionobject.rollback
end if
objTran.Dispose()

Y luego estoy haciendo un commit o rollback dependiendo de si salió bien o no.

Editar: ninguna de las respuestas ha resuelto el problema, pero te agradeceré por los buenos indicadores de resolución de problemas.

La " SqlConnection no admite transacciones paralelas " desapareció de repente y ahora el servidor sql simplemente " deja de funcionar " 4-5 veces al día, creo que es un punto muerto que hace eso, pero no tengo el conocimiento adecuado para averiguarlo y me faltan expertos en SQL que pueden supervisar esto por mí en este momento. Acabo de reiniciar el servidor sql y todo funciona de nuevo. 1 de 10 veces también tengo que reiniciar la computadora. Realmente me está molestando (y a mis clientes, por supuesto).

Cualquier persona que conozca a una persona con buen en el análisis de problemas con puntos muertos u otros problemas de SQL en Suecia (o en cualquier parte del mundo, que hablen inglés) puede ponerse en contacto conmigo. Sé que este no es un sitio de contacto, pero aprovecho mi pregunta para hacer la pregunta porque me he quedado sin opciones, he pasado 3 días y noches optimizando a los clientes para asegurarnos de que cerramos las conexiones y no hagamos demasiadas estupideces. . Sin suerte.

¿Fue útil?

Solución

Parece ser que estás compartiendo conexiones y creando nuevas transacciones en la misma conexión abierta (esta es la parte paralela de la excepción que estás viendo).

Su ejemplo parece admitir esto, ya que no tiene ninguna mención de cómo adquiere la conexión en él.

Debes hacer una revisión de tu código y asegurarte de que solo estás abriendo una conexión y luego deshaciéndote de ella cuando hayas terminado (y, por supuesto, usa la instrucción using para asegurarte de cerrar la conexión). Como parece que estás dejando uno abierto en algún lugar.

Otros consejos

El tuyo no parece ser un problema inusual. Google encontró muchos resultados cuando pegué la cadena de error en el cuadro de consulta.

Al leer las respuestas anteriores, parece que tiene algo que ver con el intercalado de transacciones incorrectamente o el nivel de aislamiento.

¿Cuánto tiempo se mantienen abiertas las conexiones? ¿Tiene transacciones de larga duración?

¿Tiene transacciones implícitas activadas en algún lugar, de modo que ¿Hay algunas transacciones donde no las hubieras esperado? ¿Has abierto el Monitor de actividad para ver si hay transacciones inesperadas?

¿Ha intentado hacer una copia de seguridad de su registro de transacciones? Eso también podría eliminarse si recuerdo correctamente una experiencia previa similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top