2009-06-25 2 views

Antwort

8

nichts - die Transaktion ist noch nicht abgeschlossen. Wenn Sie die Verbindung beenden, wird sie zurückgesetzt.

6

Da Ihre Transaktion Teile der Datenbank sperren kann, können Sie andere Transaktionen/Abfragen blockieren, bis Sie einen dieser Befehle absetzen.

Irgendwann, auf die eine oder andere Weise, muss die Transaktion abgeschlossen sein. Wenn etwas nicht in Ordnung ist (z. B. wenn die Anwendung beendet wurde), wird es zurückgesetzt, es sei denn, Sie übernehmen es zuerst.

1

Wenn die Anwendung beendet wird, wird die Verbindung implizit geschlossen und zurückgesetzt.

Wenn die Anwendung auf einem Anwendungsserver ausgeführt wird (zB ASPNET, Java App Server usw.), wird die Verbindung wahrscheinlich in einen Pool zurückgegeben, wo sie hoffentlich zurückgesetzt wird, bevor sie erneut verwendet wird. aber vielleicht nicht sofort).

Wenn sich die nicht verwendete Verbindung in einem Pool befindet, wird sie möglicherweise vom App-Server geschlossen, und die Transaktion wird dann definitiv zurückgesetzt.

Seien Sie vorsichtig bei der Offenhaltung von Transaktionen für zu lange - Sie halten Sperren (wenn Sie etwas geändert haben) und stoppen alte Zeilen von aufgeräumt werden, die sehr nachteilige Auswirkungen auf eine Datenbank mit einer Menge von " Abwanderung ".

0

Sie werden mit unerwünschtem Verhalten enden, wenn Sie eine Transaktion geöffnet lassen. Wenn es nicht zurückgesetzt wird, wenn Ihre App die Verbindung zum Pool zurückgibt, wird eine Sperrtransaktion ausgeführt. Wenn es zurückgerollt wird, ist Ihre Arbeit verloren. In beiden Fällen ist dies nicht das Verhalten, das Sie in einer Produktionsumgebung wünschen.

/Håkan Winther