"Cuando una conexión se cierra y se devuelve al grupo, ¿se retiene el nivel de aislamiento de la última instrucción SET TRANSACTION ISOLATION LEVEL"?


8

El artículo en línea de MSDN " Aislamiento de instantáneas en SQL Server " establece:

  • "Un nivel de aislamiento tiene un alcance para toda la conexión, y una vez configurado para una conexión con la instrucción SET TRANSACTION ISOLATION LEVEL, permanece vigente hasta que se cierre la conexión o se establezca otro nivel de aislamiento. Cuando una conexión se cierra y se devuelve al grupo , se retiene el nivel de aislamiento de la última instrucción SET TRANSACTION ISOLATION LEVEL . Las conexiones posteriores que reutilizan una conexión agrupada utilizan el nivel de aislamiento que estaba vigente en el momento en que se agrupa la conexión "

¿No es un párrafo autocontradictorio ("hasta" vs. "retenido")?

Luego, si " se retiene el nivel de aislamiento de la última instrucción SET TRANSACTION ISOLATION LEVEL " después de cerrar la conexión y devolverla a un grupo, cómo debe entenderse:

  • que el nivel de aislamiento predeterminado tendrá un valor arbitrario (diferentes conexiones en el grupo tendrán diferentes niveles de aislamiento y su valor dependerá de la conexión que se vuelva a abrir)?
  • o todos los valores predeterminados en todas las conexiones en el grupo se cambiarán a la última? pero de nuevo bastante desconocido de antemano?

Respuestas:


14

Una conexión del grupo tendrá el nivel de aislamiento establecido por el último cliente para usar esa conexión. Sí, realmente da tanto miedo.

En resumen, si cambia el nivel de aislamiento de una conexión, debe restablecerla explícitamente READ COMMITTEDantes de cerrar. Lo mejor es declarar explícitamente su nivel de aislamiento requerido al comienzo de cualquier lote, para asegurarse de que su código no se vea afectado por otra persona descuidada y devolverlo al valor predeterminado al final.

Este comportamiento, aunque desconcertante, aparentemente es por diseño .


Nunca he visto esos "debe explícitamente" y "Mejor es explícitamente" en artículos, libros, blogs, documentos, etc. de
MSDN

5

¿No es un párrafo autocontradictorio ("hasta" vs. "retenido")?

No para mí, pero puedo ver que hay otras formas de leerlo. Si desea actualizar la documentación para aclararla, el lugar adecuado para solicitarla es en Microsoft Connect . La gente aquí no mantiene la documentación de Microsoft.

que el nivel de aislamiento predeterminado tendrá un valor arbitrario (diferentes conexiones en el grupo tendrán diferentes niveles de aislamiento y su valor dependerá de la conexión que se vuelva a abrir)?

Si está reutilizando una conexión agrupada, entonces sí, el nivel de aislamiento "preexistente" es el que estaba vigente la última vez que se cerró la conexión agrupada. La mejor práctica es establecer explícitamente el nivel de aislamiento necesario al conectarse.

o todos los valores predeterminados en todas las conexiones en el grupo se cambiarán a la última? pero de nuevo bastante desconocido de antemano?

No.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.