Frage

Was sind die Scoping-Regeln für die Transaktionsisolationsstufen in SQL Server 2005? Ich weiß, was die verschiedenen Ebenen bedeuten, aber nicht, wie richtig sie außerhalb eines manuell ausführen Skript anzuwenden. Ich kann nicht einen Leitfaden für den praktischen Einsatz in Produktionsqualität Code.

Offensichtlich beginnt der Umfang, wenn Sie einen Befehl wie folgt verwendet werden:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

Aber wo hört sie auf? Wenn ich die ISO-Ebene in einer gespeicherten Prozedur und ruft dann die Prozedur eine andere, wird das verschachtelte proc es erben? Noch besser ist, wenn ich eskalieren die ISO-Ebene innerhalb des verschachtelten proc wird es wieder in die Berufung proc tragen gehen? Haben Transaktion Befehle wie BEGIN TRAN, ROLLBACK und COMMIT keine Unterschiede machen?

Wenn eine gespeicherte Prozedur von einer Anwendung oder einem Mittel Job der Isolationsstufe Änderungen bestehen in irgendeine Weise genannt wird? Muss ich immer auf den Standard READ am Ende jedes proc VERPFLICHTET wiederherstellen?

Ich würde es in verschiedenen Situationen testen, aber ich weiß nicht, wie zu lesen, was die aktuelle Isolationsstufe eingestellt ist.

War es hilfreich?

Lösung

Führen Sie die folgende und sehen Sie selbst:

CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO

CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
    DBCC USEROPTIONS;

Andere Tipps

MSDN

  

Wenn Sie SET TRANSACTION ISOLATION LEVEL Ausgabe in einer gespeicherten Prozedur oder   Auslöser, wenn das Objekt kehrt die Isolationsstufe steuern zurückgesetzt   auf das Niveau in der Tat, wenn wurde das Objekt aufgerufen . Zum Beispiel, wenn   Sie setzen WIEDERHOLBARE READ in einer Charge und der Ansatz ruft dann eine gespeicherte   Verfahren, das die Isolationsstufe SERIALIZABLE, setzt die Isolations   Pegeleinstellung kehrt READ wiederholbar, wenn die Prozedur gespeichert   kehrt die Steuerung zu dem Ansatz.

DBCC USEROPTIONS wird die aktuelle Isolationsstufe angezeigt werden, zusammen mit allen anderen SET-Optionen.

Von Büchern on line

  

Nur eines der TRANSACTION ISOLATION   LEVEL-Optionen können zu einem Zeitpunkt festgelegt werden,   und es bleibt für diese Verbindung eingestellt   bis sie explizit geändert. Diese   wird das Standardverhalten, wenn nicht ein   Optimierungsoption angegeben bei   der Tabellenebene in der FROM-Klausel   die Erklärung.

Isolationsstufe rollt nicht zurück mit der Transaktion.

Isolationsstufe bleibt Strom, auch wenn Sie in Prozeduren aufrufen und Funktionen.

Bitte beachten Sie, es ist ein Thema, mit Rahmen von Transaktionsebenen und SqlServer 2012 oder früher, wenn eine hohe Leistung ADO.NET Connection Pooling verwendet wird, wo dies tatsächlich über Schließen der Verbindung bestehen kann:

SQL Server: Isolationsstufe Lecks über gepoolten Verbindungen

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top