Compartir a través de


Trabajar con aislamiento de instantánea

SQL Server 2005 introdujo un nuevo nivel de aislamiento de "instantánea" pensado para mejorar la simultaneidad en las aplicaciones de procesamiento de transacciones en línea (OLTP). En versiones anteriores de SQL Server, la simultaneidad se basada únicamente en el bloqueo, lo que podía provocar problemas de bloqueo e interbloqueo en algunas aplicaciones. El aislamiento de instantánea depende de las mejoras en el control de versiones de fila y está pensado para mejorar el rendimiento evitando situaciones de bloqueo de lectura-escritura.

Las transacciones que se inician bajo el aislamiento de instantánea leen una instantánea de la base de datos realizada al comenzar la transacción. Un resultado de esta acción es que los cursores de servidor de conjunto de claves, dinámicos y estáticos, al abrirse dentro de un contexto de transacciones de instantánea, actúan de forma muy similar a los cursores estáticos que se abren desde transacciones serializables. Sin embargo, cuando los cursores se abren bajo el nivel de aislamiento de instantánea no se toman bloqueos, lo que puede reducir el bloqueo en el servidor.

Para obtener más información acerca de la compatibilidad de SQL Server con el aislamiento de instantánea, vea Descripción de los niveles de aislamiento basado en el control de versiones de filas.

Proveedor OLE DB de SQL Server Native Client

El proveedor OLE DB de SQL Server Native Client incluye mejoras que sacan provecho del aislamiento de instantánea introducido en SQL Server 2005. Estas mejoras incluyen cambios en los conjuntos de propiedades DBPROPSET_SESSION y DBPROPSET_DATASOURCEINFO.

DBPROPSET_DATASOURCEINFO

El conjunto de propiedades DBPROPSET_DATASOURCEINFO ha cambiado para indicar que se admite el nivel de aislamiento de instantánea mediante la adición del valor DBPROPVAL_TI_SNAPSHOT que se utiliza en la propiedad DBPROP_SUPPORTEDTXNISOLEVELS. Este nuevo valor indica que se admite el nivel del aislamiento de instantánea independientemente de que se haya habilitado o no el control de versiones en la base de datos. A continuación se incluye una lista de los valores de DBPROP_SUPPORTEDTXNISOLEVELS:

Id. de propiedad

Descripción

DBPROP_SUPPORTEDTXNISOLEVELS

Tipo: VT_I4

L/E: sólo lectura

Descripción: una máscara de bits que especifica los niveles de aislamiento de transacción admitidos. Combinación de cero o más de los siguientes elementos:

  • DBPROPVAL_TI_CHAOS

  • DBPROPVAL_TI_READUNCOMMITTED

  • DBPROPVAL_TI_BROWSE

  • DBPROPVAL_TI_CURSORSTABILITY

  • DBPROPVAL_TI_READCOMMITTED

  • DBPROPVAL_TI_REPEATABLEREAD

  • DBPROPVAL_TI_SERIALIZABLE

  • DBPROPVAL_TI_ISOLATED

  • DBPROPVAL_TI_SNAPSHOT

DBPROPSET_SESSION

El conjunto de propiedades DBPROPSET_SESSION ha cambiado para indicar que se admite el nivel de aislamiento de instantánea mediante la adición del valor DBPROPVAL_TI_SNAPSHOT que se utiliza en la propiedad DBPROP_SESS_AUTOCOMMITISOLEVELS. Este nuevo valor indica que se admite el nivel del aislamiento de instantánea independientemente de que se haya habilitado o no el control de versiones en la base de datos. A continuación se incluye una lista de los valores de DBPROP_SESS_AUTOCOMMITISOLEVELS:

Id. de propiedad

Descripción

DBPROP_SESS_AUTOCOMMITISOLEVELS

Tipo: VT_I4

L/E: sólo lectura

Descripción: especifica una máscara de bits que indica el nivel de aislamiento de transacción mientras está activo el modo de confirmación automática. Los valores que se pueden establecer en esta máscara de bits son iguales a los que se pueden establecer para DBPROP_SUPPORTEDTXNISOLEVELS.

[!NOTA]

Si se establece DBPROPVAL_TI_SNAPSHOT con las versiones de SQL Server anteriores a SQL Server 2005, se generan los errores DB_S_ERRORSOCCURRED o DB_E_ERRORSOCCURRED.

Para obtener información sobre cómo se admite el aislamiento de instantánea en transacciones, vea Compatibilidad con transacciones locales.

Controlador ODBC de SQL Server Native Client

El controlador ODBC de SQL Server Native Client proporciona la compatibilidad con el aislamiento de instantánea a través de las mejoras realizadas en las funciones SQLSetConnectAttr y SQLGetInfo.

SQLSetConnectAttr

La función SQLSetConnectAttr admite ahora el uso del atributo SQL_COPT_SS_TXN_ISOLATION. Si SQL_COPT_SS_TXN_ISOLATION se establece en SQL_TXN_SS_SNAPSHOT, la transacción tendrá lugar bajo el nivel de aislamiento de instantánea.

SQLGetInfo

La función SQLGetInfo admite ahora el valor SQL_TXN_SS_SNAPSHOT agregado al tipo de información SQL_TXN_ISOLATION_OPTION.

Para obtener información sobre cómo se admite el aislamiento de instantánea en transacciones, vea Nivel de aislamiento de las transacciones de cursores.