Compartir a través de


Personalizar el nivel de aislamiento de transacción

READ COMMITTED es el nivel de aislamiento predeterminado del SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft. Cuando es necesario utilizar una aplicación en un nivel de aislamiento distinto, se pueden utilizar los métodos que se indican a continuación para configurar el nivel de aislamiento:

  • Ejecutar la instrucción SET TRANSACTION ISOLATION LEVEL.
  • Para las aplicaciones ADO.NET que utilicen el espacio de nombres administrado System.Data.SqlClient, especificar una opción IsolationLevel mediante el método SqlConnection.BeginTransaction.
  • Para las aplicaciones que utilicen ADO, configurar la propiedad Niveles de aislamiento de confirmación automática.
  • Al iniciar una transacción, las aplicaciones que utilicen OLE DB pueden llamar a ITransactionLocal::StartTransaction con la propiedad isoLevel establecida en el nivel de aislamiento de transacción deseado. Si se especifica el nivel de aislamiento en el modo de confirmación automática, para las aplicaciones que utilicen OLE DB se puede establecer la propiedad DBPROPSET_SESSION, DBPROP_SESS_AUTOCOMMITISOLEVELS en el nivel de aislamiento de transacción deseado.
  • Para las aplicaciones que utilicen ODBC, establecer el atributo SQL_COPT_SS_TXN_ISOLATION mediante SQLSetConnectAttr.

Para obtener más información acerca de cómo configurar los niveles de aislamiento de transacción, vea Ajustar los niveles de aislamiento de transacción.

Si se especifica el nivel de aislamiento, el bloqueo de todas las consultas e instrucciones del lenguaje de manipulación de datos (DML) en la sesión de SQL Server se aplica en ese nivel de aislamiento. El nivel de aislamiento permanece vigente hasta que finaliza la sesión o hasta que se cambia la configuración del nivel de aislamiento.

En el siguiente ejemplo, se configura el nivel de aislamiento SERIALIZABLE:

USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
SELECT EmployeeID
    FROM HumanResources.Employee;
GO

El nivel de aislamiento se puede pasar por alto, si es necesario, para consultas o instrucciones DML individuales. Para ello debe especificarse una sugerencia de tabla. El hecho de especificar una sugerencia de tabla no afecta a las demás instrucciones de la sesión. Se recomienda que las sugerencias de tabla sólo se utilicen para modificar el comportamiento predeterminado en los casos estrictamente necesarios.

Es posible que Database Engine (Motor de base de datos) tenga que adquirir bloqueos al leer los metadatos incluso si el nivel de aislamiento se ha establecido en un nivel en el que no se soliciten bloqueos compartidos al leer los datos. Por ejemplo, una transacción que se ejecute en el nivel de aislamiento de lectura sin confirmar no adquiere bloqueos compartidos al leer datos, pero es probable que tenga que solicitar bloqueos en alguna ocasión al leer una vista de catálogo del sistema. Esto significa que es posible que una transacción con lectura sin confirmar provoque un bloqueo cuando ejecute consultas en una tabla mientras otra transacción simultánea modifica los metadatos de la tabla.

Para determinar el nivel de aislamiento de transacción que está establecido actualmente, utilice la instrucción DBCC USEROPTIONS como se indica en el siguiente ejemplo. El conjunto de resultados puede variar según el conjunto de resultados del sistema.

USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
DBCC USEROPTIONS;
GO

Éste es el conjunto de resultados.

Set Option                   Value                                       
---------------------------- ------------------------------------------- 
textsize                     2147483647
language                     us_english
dateformat                   mdy
datefirst                    7
...                          ...
Isolation level              repeatable read

(14 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Vea también

Otros recursos

DBCC USEROPTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
SELECT (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005