Share via


Nivel de aislamiento de transacción

De manera predeterminada, Microsoft SQL Server Compact 4.0 opera en un nivel de aislamiento de lectura confirmada (Read Committed). No obstante, una aplicación podría necesitar funcionar con un nivel de aislamiento diferente. Para implementar distintos niveles de aislamiento en las aplicaciones, puede personalizar el bloqueo para toda una sesión estableciendo el nivel de aislamiento de la sesión con la instrucción SET TRANSACTION ISOLATION LEVEL.

Importante

Aunque el nivel de aislamiento predeterminado de SQL Server Compact 4.0 es de lectura confirmada (Read Committed), usando este nivel de aislamiento no se producen bloqueos S al leer los datos. Este comportamiento no es propio de MicrosoftSQL Server. En SQL Server, cuando se utiliza Read Committed se solicita un bloqueo S siempre que se lee una fila, y éste esperará si existe un bloqueo en conflicto en esa fila. SQL Server Compact 4.0 no requiere un bloqueo S porque las versiones de las páginas de datos se mantienen automáticamente para asegurarse de que los datos confirmados pueden leerse sin necesidad de realizar un bloqueo. Esto es importante porque en SQL Server Compact 4.0, las operaciones SELECT no necesitan llevar a cabo ningún bloqueo en los datos y casi siempre se realizan con éxito. Las operaciones SELECT no esperan si algunos datos tienen un bloqueo X, al contrario que en SQL Server. La operación SELECT aún requiere un bloqueo Sch-S. La operación solo producirá un error si la tabla se está modificando, ya que existirá un bloqueo Sch-X que causa un conflicto.

Cuando se especifica el nivel de aislamiento, el comportamiento de bloqueo de todas las instrucciones SELECT de la sesión de SQL Server Compact 4.0 funciona en ese nivel de aislamiento y permanece vigente hasta que termina la sesión o hasta que el nivel de aislamiento se establece en otro nivel. Por ejemplo, para establecer el nivel de aislamiento de transacción a Serializable y para asegurarse de que ninguna transacción simultánea no inserta filas fantasma en la tabla Employee, utilice la siguiente instrucción SQL:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

También puede establecer el nivel de aislamiento de transacción mediante programación. A continuación, se ofrece un ejemplo de cómo establecer el nivel de aislamiento de transacción mediante ADO .NET:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

Vea también

Conceptos

Descripción de bloqueos

Mostrar la información de bloqueo

Sugerencias de bloqueo

Tiempo de espera para bloqueo