Dans une procédure stockée, j'ai ce qui suit: (SQL Server 2008)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION getStuff
BEGIN TRY
/* some selects, updates, etc, etc. */
....
COMMIT TRANSACTION getStuff
END TRY
BEGIN CATCH
...
END CATCH
Comme il s'agit de la transaction basée sur la transaction, ma pensée était que le reste des connexions de base de données ne sera pas affectée par le sérialisable.
Dois-je définir implicitement un niveau d'isolement pour lire commis après mon commit? Cela affectera-t-il négativement d'autres connexions entre mon serveur d'applications et serveur de base de données?
La commande est TRANSACTION ISOLATION LEVEL
, ne pas SERVER ISOLATION LEVEL
. Cela ne change que le niveau d'isolement pour la portée de la transaction.
Non, vous n'avez pas à définir implicitement le niveau d'isolement à lire commis.
Des livres en ligne .
Si vous publiez le niveau d'isolement de la transaction défini dans une procédure ou une gâchette stockée, lorsque l'objet renvoie le contrôle, le niveau d'isolation est réinitialisé au niveau en vigueur lorsque l'objet a été invoqué. Par exemple, si vous définissez la lecture répétable dans un lot et que le lot appelle ensuite une procédure stockée qui définit le niveau d'isolement sur Serializable, le réglage du niveau d'isolation revient à une lecture répétable lorsque la procédure stockée renvoie le contrôle sur le lot.
La commande que vous avez postée vient d'exécuter la transaction dans le SP avec TRANSACTION ISOLATION LEVEL SERIALIZABLE
. D'autres connexions seront par défaut au niveau d'isolement par défaut - lu engagée (sauf indication contraire d'un niveau d'isolement différent explicitement).
Il y a une excellente série de Paul White - Niveaux d'isolation SQL Server: une série qui vous aidera à comprendre en profondeur quels niveaux d'isolement signifie et font quand ils sont utilisés.