Strano problema SQL2005. & # 8220; SqlConnection non supporta transazioni parallele & # 8221;

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un problema che sembra essere il risultato di una situazione di stallo. Stiamo cercando la radice del problema, ma nel frattempo volevamo riavviare il server e far andare avanti il ??cliente.

E ora ogni volta che avviamo il programma si dice semplicemente "SqlConnection non supporta transazioni parallele". Non abbiamo modificato nulla nel programma, è stato compilato e sul server dei clienti, ma dopo la "possibile situazione di deadlock" vuole tornare di nuovo online.

Abbiamo 7 client (computer) che eseguono il programma, ogni client sta parlando con un servizio web su un server locale e il servizio web sta parlando con sql-server (stessa macchina del server web).

Abbiamo riavviato sia il server sql che il server iis, ma non abbiamo riavviato il server a causa di altri importanti servizi in esecuzione sul server, quindi è l'ultima cosa che facciamo. Non è possibile visualizzare alcun blocco o altro nella scheda Gestione.

Quindi la mia domanda è: perché " SqlConnection non supporta transazioni parallele " errore proveniente da una volta all'altra senza modificare nulla nel programma e vive ancora tra sql-restart.

Sembra che accada alla prima richiesta db che il programma fa all'avvio.

Se hai bisogno di maggiori informazioni basta chiedere. Sono perplesso ...

Ulteriori informazioni: Non credo di avere "long" transazioni in corso. Lo scenario è spesso che ho un set di dati con 20-100 righe (ContractRows) in cui eseguo un .Update sul tableAdapter. Inoltre eseguo il loop attraverso quelle 20-100 righe e per alcune di esse creo ad-hook-sql-querys (ad esempio se un prodotto noleggiato viene contrassegnato come restituito, creo una query sql per contrassegnare il prodotto come restituito nel database)

Quindi lo faccio in modo molto semplificato:

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

E poi eseguo il commit o il rollback a seconda che sia andato bene o meno.

Modifica: nessuna delle risposte ha risolto il problema, ma ti ringrazierò per i buoni suggerimenti per la risoluzione dei problemi.

Il " SqlConnection non supporta transazioni parallele " è scomparso all'improvviso e ora il server SQL solo "scende". 4-5 volte al giorno, immagino che sia un punto morto che lo fa, ma non ho le giuste conoscenze per scoprirlo e sono a corto di esperti sql che possono monitorare questo per me al momento. Ho appena riavviato il server SQL e tutto funziona di nuovo. 1 su 10 volte devo anche riavviare il computer. Mi sta davvero infastidendo (e ovviamente i miei clienti).

Chiunque conosca una persona con buone nell'analisi di problemi con deadlock o altri problemi di sql in Svezia (o ovunque nel mondo, di lingua inglese) è libero di contattarmi. So che questo non è un sito di contatto ma prendo la mia possibilità di porre la domanda perché ho esaurito le opzioni, ho trascorso 3 giorni e notti a ottimizzare i clienti per essere sicuro di chiudere le connessioni e non fare troppe cose stupide lì . Senza fortuna.

È stato utile?

Soluzione

Sembra che tu stia condividendo connessioni e creando nuove transazioni sulla stessa connessione aperta (questa è la parte parallela dell'eccezione che stai vedendo).

Il tuo esempio sembra supportare questo dato che non hai menzionato il modo in cui acquisisci la connessione in esso.

Dovresti fare una revisione del tuo codice e assicurarti di aprire solo una connessione e di eliminarla al termine (e, in ogni caso, usa l'istruzione using per assicurarti di chiudere la connessione), poiché sembra che tu ne stia lasciando uno aperto da qualche parte.

Altri suggerimenti

Il tuo non sembra essere un problema insolito. Google ha trovato molti risultati quando ho incollato la stringa di errore nella casella della query.

Leggendo le risposte passate, sembra che abbia qualcosa a che fare con l'interleaving delle transazioni in modo improprio o il livello di isolamento.

Per quanto tempo rimangono aperte le connessioni? Hai transazioni a lungo termine?

Hai transazioni implicite attivate da qualche parte, in modo che ci sono alcune transazioni in cui non te le saresti aspettate? Hai aperto Activity Monitor per vedere se ci sono transazioni impreviste?

Hai provato a fare un backup del tuo registro delle transazioni? Ciò potrebbe chiarire anche se ricordo correttamente un'esperienza precedente simile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top