Étrange problème SQL2005. "SqlConnection ne supporte pas les transactions parallèles"

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai un problème qui semble résulter d'une impasse. Nous recherchons maintenant la source du problème, mais entre-temps, nous voulions redémarrer le serveur et permettre au client de continuer.

Et chaque fois que nous démarrons le programme, celui-ci indique simplement que "SqlConnection ne prend pas en charge les transactions parallèles". Nous n'avons rien changé dans le programme, qu'il soit compilé et sur le serveur du client, mais après la situation "dans l'impasse possible", il souhaite à nouveau être mis en ligne.

Nous avons 7 clients (ordinateurs) exécutant le programme, chaque client communique avec un service Web sur un serveur local et le serveur Web communique avec le serveur SQL (le même ordinateur que le serveur Web).

Nous avons redémarré le serveur SQL et le serveur IIS, mais nous n'avons pas redémarré le serveur car d'autres services importants sont exécutés sur le serveur. Il s'agit donc de la dernière chose que nous faisons. Nous ne pouvons voir aucun verrou ou quoi que ce soit dans l'onglet Gestion.

Ma question est donc la suivante: pourquoi "SqlConnection ne prend pas en charge les transactions parallèles" erreur venant d'une fois sur l'autre sans rien changer dans le programme et il reste toujours entre le redémarrage de SQL.

Il semble que cela se produise lors de la première demande de base de données effectuée par le programme lors de son démarrage.

Si vous avez besoin de plus d'informations, il suffit de demander. Je suis perplexe ...

Plus d'informations: Je ne pense pas avoir " long " transactions en cours. Le scénario est souvent que j'ai un ensemble de données avec 20-100 lignes (ContractRows) dans ce que je fais une mise à jour sur le tableAdapter. J'ai également parcouru ces 20 à 100 lignes et pour certaines d'entre elles, je crée des requêtes ad-hook-sql (par exemple, si un produit loué est marqué comme renvoyé, je crée une requête sql pour marquer le produit comme renvoyé dans la base de données)

Je fais donc cela très simplifié:

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()

Et puis je fais un commit ou une annulation selon que tout se passe bien ou pas.

Modifier: aucune des réponses n'a résolu le problème, mais je vous remercie pour votre bonne résolution des problèmes.

La " SqlConnection ne supporte pas les transactions parallèles " a soudainement disparu et le serveur SQL vient de "tomber en panne". 4-5 fois par jour, j'imagine que c'est une impasse, mais je n'ai pas les connaissances nécessaires pour le savoir et je manque de spécialistes en SQL qui peuvent le surveiller pour le moment. Je viens de redémarrer le serveur SQL et tout fonctionne à nouveau. 1 fois sur 10, je dois également redémarrer l'ordinateur. C'est vraiment un problème pour moi (et mes clients bien sûr).

Toute personne qui connaît une bonne personne ayant des connaissances en matière d'analyse des problèmes liés à des impasses ou à d'autres problèmes liés au sql en suède (ou dans le monde entier, parlant anglais) est libre de me contacter. Je sais que ce n’est pas un site de contact, mais j’ai le courage de poser la question parce que je suis à court d’options; j’ai passé 3 jours et nuits à optimiser les clients pour être sûr de fermer les connexions et de ne pas y faire trop de bêtises. . Sans chance.

Était-ce utile?

La solution

Il semble que vous partagiez des connexions et que vous créiez de nouvelles transactions sur la même connexion ouverte (il s’agit de la partie parallèle de l’exception que vous voyez).

Votre exemple semble corroborer cette affirmation, car vous ne mentionnez pas comment vous y avez acquis la connexion.

Vérifiez votre code et assurez-vous d’ouvrir une connexion, puis de vous en débarrasser une fois que vous avez terminé (et utilisez l’instruction using pour vous assurer de fermer la connexion), il semble que vous en laissiez un ouvert quelque part.

Autres conseils

Le vôtre ne semble pas être un problème inhabituel. Google a trouvé beaucoup de résultats lorsque j'ai collé votre chaîne d'erreur dans la zone de requête.

En lisant les réponses précédentes, il semble que cela ait quelque chose à voir avec des transactions entrelacées incorrectement ou un niveau d’isolement.

Combien de temps les connexions sont-elles ouvertes? Avez-vous des transactions de longue durée?

Les transactions implicites sont-elles activées quelque part, de sorte que il y a des transactions où vous ne les auriez pas attendues? Avez-vous ouvert Activity Monitor pour voir s’il existe des transactions inattendues?

Avez-vous essayé de faire une sauvegarde de votre journal des transactions? Cela pourrait aussi éclaircir les choses si je me souviens correctement d’une expérience antérieure similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top