43 Stimmen

Bereiche der Transaktionsisolationsebene

Wie lauten die Scoping-Regeln für Transaktionsisolierungsebenen in SQL Server 2005? Ich weiß, was die verschiedenen Ebenen bedeuten, aber nicht, wie man sie außerhalb eines manuell ausgeführten Skripts richtig anwendet. Ich kann keinen Leitfaden für den praktischen Einsatz in produktionsfähigem Code finden.

Offensichtlich beginnt der Geltungsbereich, wenn Sie einen Befehl wie diesen verwenden:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

Aber wo endet sie? Wenn ich die Iso-Stufe in einer gespeicherten Prozedur einstelle und diese Prozedur dann eine andere aufruft, erbt die verschachtelte Prozedur sie dann? Oder noch besser: Wenn ich die Iso-Ebene innerhalb der verschachtelten Prozedur erhöhe, wird sie dann in die aufrufende Prozedur zurückgeführt? Machen Transaktionsbefehle wie BEGIN TRAN, ROLLBACK und COMMIT einen Unterschied?

Bleiben die Änderungen der Isolationsebene auf irgendeine Weise erhalten, wenn ein gespeicherter Prozess von einer Anwendung oder einem Agentenauftrag aufgerufen wird? Muss ich am Ende jedes Prozesses immer zum Standardwert READ COMMITTED zurückkehren?

Ich würde es in verschiedenen Situationen testen, aber ich weiß nicht, wie ich den aktuellen Isolationsgrad ablesen kann.

1voto

dmc2005 Punkte 536

Bitte beachten Sie, dass es ein Problem mit dem Geltungsbereich von TRANSACTION LEVELS und SqlServer 2012 oder früher gibt, wenn ADO.NET Connection Pooling mit hoher Leistung verwendet wird, wo dies tatsächlich über das Schließen der Verbindung bestehen bleiben kann:

SQL-Server: Lecks in der Isolationsebene bei gepoolten Verbindungen

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation-level?forum=sqldatabaseengine

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X