40 votes

niveau d’isolation de la transaction

Quelles sont les règles de portée pour les niveaux d'isolation des transactions dans SQL Server 2005? Je sais ce que les différents niveaux de sens, mais de ne pas savoir comment les appliquer correctement à l'extérieur de la main, et l'exécution d'un script. Je ne peux pas trouver un guide pour une utilisation pratique dans la production d'un code de qualité.

De toute évidence, la portée commence lorsque vous utilisez une commande comme ceci:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Mais où prend-elle fin? Si j'ai mis le niveau de l'iso dans une procédure stockée, puis que le proc en appelle une autre, ne imbriquée proc en hériter? Encore mieux, si j'escalade le niveau de l'iso à l'intérieur de la imbriquée proc est-ce qu'il va effectuer, de retour à l'appel de la proc? Faire les commandes de transaction comme BEGIN TRAN, la RESTAURATION, et de s'ENGAGER faire des différences?

Lorsqu'une procédure stockée est appelée par une application ou un travail de l'agent de faire le niveau d'isolation des changements persistent, d'une certaine façon? Dois-je toujours revenir à la valeur par défaut de LECTURE validée à la fin de chaque proc?

Je voudrais le tester dans diverses situations mais je ne sais pas comment faire pour lire ce que l'actuel niveau d'isolation est réglé.

36voto

AlexKuznetsov Points 9555

Exécutez ce qui suit et voyez par vous-même:

 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;
 

17voto

Andrey Points 2120

À partir de MSDN

Si vous émettez SET TRANSACTION ISOLATION LEVEL dans une procédure stockéeou déclencheur, lorsque l'objet renvoie le contrôle du niveau d'isolation est réinitialisé au niveau en vigueur au moment où l'objet a été invoquée. Par exemple, si vous définissez REPEATABLE READ dans un lot et le lot appelle ensuite stockée procédure qui définit le niveau d'isolation SERIALIZABLE, l'isolement niveau REPEATABLE READ lorsque la procédure stockée retourne le contrôle au traitement.

14voto

Darryl Peterson Points 1679

DBCC USEROPTIONS affichera le niveau d'isolation actuel, ainsi que toutes les autres options SET.

4voto

SQLMenace Points 68670

De livres en ligne

Une seule des options TRANSACTION ISOLATION LEVEL peut être définie à la fois et elle reste définie pour cette connexion jusqu'à ce qu'elle soit explicitement modifiée. Cela devient le comportement par défaut sauf si une option d'optimisation est spécifiée au niveau de la table dans la clause FROM de l'instruction.

2voto

Hans Malherbe Points 1426

Le niveau d'isolement ne revient pas avec la transaction.

Le niveau d'isolation reste à jour même si vous appelez des procédures et des fonctions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X