Inicio > Transact-SQL > Set Transaction – Transact SQL – Nivel de Aislamiento

Set Transaction – Transact SQL – Nivel de Aislamiento


Se puede definir el sistema de bloqueo de las instrucciones SELECT para todas las transacciones de la sesión.

Sintaxis :

SET TRANSACTION ISOLATION LEVEL opcion

opcion :

Read UNCOMMITTED

Este nivel permite leer las modificaciones todavia no validadas de otras transacciones. Este tipo de lectura se demonina “en sucio” o “dirty read”, ya que los datos visualizados no necesariamente se conservaran en caso de que la transaccion se anule (ROLLBACK). en este modo de funconamiento, las instrucciones DML no necesitan un bloqueo compartido para la lectura de los datos porque nada impide la modificación de los datos leídos, aunque la modificación no esté aún validada.

Read COMMITTED

En este solo son vivibles las modificaciones validadas (COMMIT), Las instrucciones de DML utilizan siempre un bloqueo exclusivo. No obstante, los bloqueos fijados para la lectura de datos se anulan cuando termina la lectura, no cuando termina la transaccion. Si se lee mas de una vez la misma fila durante una misma transacción, no está garantizada que la lectura de la misma fila devuelta siemrpe los mismos datos.

Puede darse este caso si los datos son modificados y luego validados por otra transacción entre las 2 operaciones de lectura.

REPEATABLE READ

En este modo de funcionamiento, los datos leídos o modificados por una transacción ya no son accesibles para las otras transacciones, con el fin de garantizar que la lectura repetida de una fila de datos devuelva siempre el mismo contenido.

No obstante los datos leídos siguen siendo accesibles  en lectura para las demas transacciones. Los bloqueos se definen para duración de la transacción. Con este tipo de bloqueo se pueden agregar datos a las tablas entre el principio y fin de la transaccion y por lo tanto el conjunto de datos ya no es el mismo , este tipo de problema puede tener una incidencia significativa cuando por ejemplo, una transacción efectual el calculo de descuento sobre un monto y simultaneamente , otras transacciones añaden un dato adicional. Este nuevo pedido modificara el resultado del calculo del descuento.

SERIALIZABLE

Con este modo de funcionamiento, los datos leídos o modificados por la transacción serán accesibles unicamnete para esta transaccion. Los datos que sólo se lean seguiran siendo accesibles en modo lectura para las demas transacciones.

Se definen bloqueos para toda la duración de la transacción a nivel de fila de datos, tambien se definen bloqueos a nivel mas alto, en los indices para evitar que se agreguen datos al conjunto de resultados de la transacción. Si no existe nigún indice que cubra la consulta de lectura, es importante un bloqueo adicional a nivel de tabla.

Opciones de bloqueo

Es posible especificar el bloqueo de una tabla para una instrucción SELECT particular.

Es aconsejable dejar la gestión de bloqueos en manos del motor relacional para optimizar esta gestión , la gestión manual sólo permite muy raramente un gestión optima y puede probocar problemas.

Sintaxis

SELECT  FROM <nombretutabla> WITH (opción de bloqueo)

NOLOCK — Sin bloqueos.

HOLDLOCK — Mantiene bloqueos compartidos hasta el fin de la transacción.

UPDLOCK — Mantine bloqueos de actualización de página hata el fin de la transacción.

TABLOCK — Uso de bloqueo compartido sobre tabla.

PAGLOCK — Uso de bloqueo compartido sobre las páginas.

TABLOCKX — Mantiene el bloqueo exclusivo.

ROWLOCK — Permite especificar que se debe utilizar un bloqueo de nivel de filas cuando el optimizador de consultas de la tabla tome la decisión de utilizar uno en el nivel de páginas o de tablas.

http://www.guillesql.es/Articulos/SQLServerFAQ_Aislamiento_Transaccion_Isolation_Level.aspx

Categorías:Transact-SQL
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: