uncommitted transaction transacciones repeatable read niveles example ejemplos dirty committed bloqueo begin aislamiento sql-server tsql sql-server-2005 isolation-level

sql-server - transaction - set isolation to dirty read



Ámbitos de nivel de aislamiento de transacciones (7)

¿Cuáles son las reglas de alcance para los niveles de aislamiento de transacciones en SQL Server 2005? Sé lo que significan los diferentes niveles, pero no cómo aplicarlos correctamente fuera de un script ejecutado manualmente. No puedo encontrar una guía para el uso práctico en el código de calidad de producción.

Obviamente, el alcance comienza cuando usas un comando como este:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Pero ¿dónde termina? Si configuro el nivel iso en un procedimiento almacenado y luego ese proceso llama a otro, ¿el proceso anidado lo hereda? Aún mejor, si escalo el nivel iso dentro del proceso anidado, ¿volverá a funcionar en el proceso de llamada? ¿Los comandos de transacción como BEGIN TRAN, ROLLBACK y COMMIT hacen alguna diferencia?

Cuando una aplicación o un trabajo de agente llama a un proceso almacenado, ¿los cambios de nivel de aislamiento persisten de algún modo? ¿Siempre tengo que volver al valor predeterminado LEER COMPROMETIDO al final de cada proceso?

Lo probaría en diferentes situaciones, pero no sé cómo se define el nivel de aislamiento actual.


De libros en línea

Solo se puede configurar una de las opciones de TRANSACTION ISOLATION LEVEL a la vez, y permanece establecida para esa conexión hasta que se modifique explícitamente. Esto se convierte en el comportamiento predeterminado a menos que se especifique una opción de optimización en el nivel de tabla en la cláusula FROM de la instrucción.


Desde MSDN

Si emite SET TRANSACTION ISOLATION LEVEL en un procedimiento almacenado o disparador, cuando el objeto devuelve el control, el nivel de aislamiento se restablece al nivel vigente cuando se invoca el objeto . Por ejemplo, si configura REPEATABLE READ en un lote y el lote llama a un procedimiento almacenado que establece el nivel de aislamiento en SERIALIZABLE, la configuración del nivel de aislamiento vuelve a REPEATABLE READ cuando el procedimiento almacenado devuelve el control al lote.


Ejecute lo siguiente y compruébelo usted mismo:

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;


El nivel de aislamiento no retrocede con la transacción.

El nivel de aislamiento permanece actualizado incluso si llama a procedimientos y funciones.




DBCC USEROPTIONS mostrará el nivel de aislamiento actual, junto con todas las demás opciones de SET.