SQL Server bloquea los recursos con diferentes modos de bloqueo que determinan cómo las transacciones simultáneas pueden tener acceso a los recursos.
SQL Server utiliza estos modos de bloqueo de recursos.
Modo de bloqueoCompartido (S): Utilizado para operaciones que no cambian o actualizan datos (operaciones de sólo lectura), como la instrucción SELECT.
Actualizar (U): Utilizado en recursos que se pueden actualizar. Evita una forma común de interbloqueo que se produce cuando hay varias sesiones que leen, bloquean y, a continuación, posiblemente actualizan recursos.
Exclusivo (X): Se utiliza para operaciones de modificación de datos, como INSERT, UPDATE o DELETE. Asegura que no se pueden realizar varias actualizaciones en el mismo recurso al mismo tiempo.
Intención: Utilizado para establecer una jerarquía de bloqueos. Los tipos de bloqueo con intención son: bloqueo con intención compartido (IS), bloqueo con intención exclusivo (IX), y bloqueo con intención compartido y exclusivo (SIX).
Esquema: Utilizado cuando se ejecuta una operación que depende del esquema de una tabla. Los tipos de bloqueo de esquema son: modificación del esquema (Sch-M) y estabilidad del esquema (Sch-S).
Actualización masiva (BU): Utilizado cuando se copian datos de forma masiva en una tabla y se especifica la sugerencia TABLOCK.
Bloqueos compartidosLos bloqueos compartidos (S) permiten que varias transacciones simultáneas lean (SELECT) un recurso. Ninguna otra transacción puede modificar los datos mientras haya bloqueos compartidos (S) en el recurso. Los bloqueos compartidos (S) en un recurso se liberan tan pronto como se han leído los datos, a menos que se haya establecido el nivel de aislamiento de la transacción como lectura repetible o más alto, o bien se utilice una sugerencia de bloqueo para mantener los bloqueos compartidos (S) durante la transacción.
Bloqueos de actualizaciónLos bloqueos de actualización (U) evitan una forma común de interbloqueo. Un patrón típico de actualización consiste en una transacción que lee un registro, adquiere un bloqueo compartido (S) en el recurso (página o fila) y, a continuación, modifica la fila, que necesita la conversión del bloqueo en bloqueo exclusivo (X). Si dos transacciones adquieren bloqueos compartidos en un recurso y, a continuación, intentan actualizar los datos simultáneamente, una de ellas intenta convertir el bloqueo en bloqueo exclusivo (X). La conversión de bloqueo compartido en exclusivo debe esperar, ya que el bloqueo exclusivo de una transacción no es compatible con el bloqueo compartido de la otra. Por tanto, se produce una espera de bloqueos. La segunda transacción intenta adquirir un bloqueo exclusivo (X) para realizar su actualización. Debido a que ambas transacciones intentan convertir los bloqueos en exclusivos (X) y cada una espera a que la otra libere su bloqueo de modo compartido, se produce un interbloqueo.
Para evitar este posible problema de interbloqueo, se utilizan los bloqueos de actualización (U). Dos transacciones no pueden obtener simultáneamente un bloqueo de actualización (U) para un recurso. Si una transacción modifica un recurso, el bloqueo de actualización (U) se convierte en bloqueo exclusivo (X). En caso contrario, el bloqueo se convierte en bloqueo de modo compartido.
Bloqueos exclusivosLos bloqueos exclusivos (X) evitan que las transacciones simultáneas tengan acceso a un recurso. Ninguna otra transacción puede leer o modificar los datos bloqueados con un bloqueo exclusivo (X).
Bloqueos con intenciónUn bloqueo con intención indica que SQL Server desea adquirir un bloqueo compartido (S) o exclusivo (X) en alguno de los recursos inferiores de la jerarquía. Por ejemplo, si se aplica un bloqueo con intención compartido a una tabla, significa que una transacción intenta aplicar bloqueos compartidos (S) a las páginas o filas de esa tabla. Establecer un bloqueo con intención en una tabla evita que otra transacción adquiera un bloqueo exclusivo (X) en la tabla que contiene esa página. Los bloqueos con intención mejoran el rendimiento, porque SQL Server examina los bloqueos con intención sólo en el nivel de tabla para determinar si una transacción puede adquirir un bloqueo en dicha tabla de forma segura. Esto elimina el requisito de examinar cada bloqueo de fila o de página de la tabla para determinar si una transacción puede bloquear toda la tabla.
Los bloqueos con intención incluyen los compartidos (IS), con intención exclusivos (IX) y los compartidos con intención exclusivos (SIX).
Modo de bloqueo Intención compartido (IS): Indica que una transacción tiene la intención de leer una parte de los recursos inferiores de la jerarquía mediante la colocación de bloqueos S en esos recursos concretos.
Intención exclusivo (IX): Indica que una transacción tiene la intención de modificar una parte de los recursos inferiores de la jerarquía mediante la colocación de bloqueos X en esos recursos concretos. IX es un superconjunto de IS.
Compartido con intención exclusivo (SIX): Indica que la transacción tiene la intención de leer todos los recursos inferiores de la jerarquía y modificar una parte de ellos colocando bloqueos IX en esos recursos concretos. Se permiten los bloqueos IS simultáneos en el recurso de nivel superior. Por ejemplo, un bloqueo SIX en una tabla coloca un bloqueo SIX en la tabla (permite lecturas simultáneas) y bloqueos IX en las páginas que se van a modificar (y bloqueos X en las filas modificadas). Sólo puede haber un bloqueo SIX simultáneo por recurso para impedir que otras transacciones lo actualicen, aunque otras transacciones pueden leer los recursos inferiores de la jerarquía obteniendo bloqueos IS en el nivel de tabla.
Bloqueos de esquemaLos bloqueos de modificación del esquema (Sch-M) se utilizan cuando se realiza una operación de lenguaje de definición de datos (DDL) en tablas como, por ejemplo, agregar una columna o quitar una tabla.
Los bloqueos de estabilidad del esquema (Sch-S) se utilizan al compilar consultas. Los bloqueos de estabilidad del esquema (Sch-S) no impiden los bloqueos de transacciones, incluidos los bloqueos exclusivos (X). Por tanto, otras transacciones, incluidas las que tienen bloqueos exclusivos (X) en una tabla, pueden seguir ejecutándose mientras se compila una consulta. Sin embargo, no se pueden realizar operaciones de DDL en la tabla.
Bloqueos de actualización masivaLos bloqueos de actualización masiva (BU) se obtienen cuando se copian datos en una tabla de forma masiva, y se especifica la sugerencia TABLOCK o se establece la opción de tabla table lock on bulk load con sp_tableoption. Los bloqueos de actualización masiva (BU) permiten a los procesos copiar datos de forma masiva y simultánea en la misma tabla, pero impiden que otros procesos que no están copiando datos de forma masiva tengan acceso a la tabla.
Ejemplo de una transacción:
USE pubs
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
SELECT au_lname FROM authors (ROWLOCK)
GO
Puedo acotar que generalmente esto no es muy usado en SQL Server, muy rara vez algunos programadores usan estas transacciones. De hecho yo no las uso. Pero no está demás aprender un poco.
Adjunto un link en ingles, revisalo de allí saque el ejemplo de transacción:
http://dotnetguts.blogspot.com/2007/08/faq-on-lock-in-sql-server.htmlCualquier cosa, sigue posteando. Saludos.