2016-04-06 7 views
2

Ich erhalte die Fehlermeldung:Ist es jemals unsicher, ein SQL Connection-Objekt zu committen?

SQL State: 25001 
Error Code: 20000 
Message: Cannot close a connection while a transaction is still active. 

ich das verstehen, weil ich die DB-Verbindung am Schließen, wenn eine Transaktion nicht festgeschrieben oder Rück ist.

Dies sollte relativ einfach zu beheben sein. Ich verwende jedoch einen Verbindungspool. Ich bin mir also wirklich nicht sicher, wo diese Verbindung unverbindlich bleibt. Ich versuche nur, jede Verbindung im Verbindungspool elegant zu schließen.

Ist es sicher, immer nur Commit vor dem Schließen der Transaktion aufzurufen? Die andere Möglichkeit, dies zu beheben, besteht darin, jede Datenbankaktion sorgfältig zu prüfen, um sicherzustellen, dass die Verbindung festgeschrieben ist. Ist das eine sichere Abkürzung?

+1

** Definieren ** sicher? 'LÖSCHEN VON BENUTZERN; commit; ' –

+0

@Elliott Frisch Ich gehe davon aus, dass alle Aktionen beabsichtigt sind. Es konnte jedoch eine Ausnahme geben, die dazu führte, dass das Commit nie stattfand. Ich bin nicht 100% warum das Commit nie passiert ist. –

+0

Ich wäre bequemer Blind zurückrollen, über blind zu begehen. –

Antwort

1

Log es und Rollback.

Nie blind verpflichten.

Der Verbindungspool sollte jede Verbindung zurücksetzen, die mit einer aktiven Transaktion zurückgegeben wird. Der Grund dafür ist, dass der Grund dafür, dass die Transaktion immer noch aktiv ist, wenn die Verbindung zurückgegeben wird, darin besteht, dass der entleihende Thread ein Problem hatte und seinen Prozess nicht normal beendet hat.

+0

Gibt es keine Chance, dass ich eine nützliche Transaktion zurücksetzen werde? –

+0

Niemals. Wenn es sich um eine nützliche Transaktion handelte, wäre sie festgelegt worden. Per Definition hat jede Geschäftslogik, die das Commit auslässt, mindestens einen Fehler (fehlerhafte Transaktionsgrenzen) und ist deshalb völlig verdächtig, weil sie nicht ordnungsgemäß getestet/validiert wurde. Wenn Sie ein Rollback durchführen, schützen Sie die Integrität Ihrer Datenbank und finden Fehler schneller. Wenn Sie sich verpflichten, erhalten Sie schlechte Daten in Ihrer Datenbank und verstecken heimtückische Fehler. – Rob

Verwandte Themen