Habilitar niveles de aislamiento basado en el control de versiones de filas

Los administradores de bases de datos determinan la configuración de la base de datos para el control de versiones de filas mediante las opciones de base de datos READ_COMMITTED_SNAPSHOT y ALLOW_SNAPSHOT_ISOLATION de la instrucción ALTER DATABASE.

Cuando se establece la opción de base de datos READ_COMMITTED_SNAPSHOT en ON, se activan inmediatamente los mecanismos utilizados para admitir la opción. Al establecer la opción READ_COMMITTED_SNAPSHOT, sólo se permite en la base de datos la conexión que ejecuta el comando ALTER DATABASE. No debe haber ninguna otra conexión de base de datos abierta hasta que ALTER DATABASE haya finalizado. La base de datos no tiene que estar en modo de usuario único.

La siguiente instrucción Transact-SQL habilita READ_COMMITTED_SNAPSHOT:

ALTER DATABASE AdventureWorks
    SET READ_COMMITTED_SNAPSHOT ON;

Si la opción de base de datos ALLOW_SNAPSHOT_ISOLATION se establece en ON, la instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft no genera versiones de filas para datos modificados hasta que finalicen todas las transacciones activas que han modificados los datos en la base de datos. Si hay transacciones de modificación activas, SQL Server establece el estado de la opción en PENDING_ON. Una vez finalizadas todas las transacciones de modificación, el estado de la opción cambia a ON. Los usuarios no pueden iniciar una transacción de instantáneas en la base de datos hasta que la opción esté completamente en ON. La base de datos pasa a un estado PENDING_OFF cuando el administrador de la base de datos establece la opción ALLOW_SNAPSHOT_ISOLATION en OFF.

La siguiente instrucción Transact-SQL habilita ALLOW_SNAPSHOT_ISOLATION:

ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;

En la tabla siguiente se enumeran y describen los estados de la opción ALLOW_SNAPSHOT_ISOLATION. El uso de ALTER DATABASE con la opción ALLOW_SNAPSHOT_ISOLATION no bloquea a los usuarios que actualmente tienen acceso a la base de datos.

Estado del marco de aislamiento de instantánea para la base de datos actual

Descripción

OFF

La compatibilidad de transacciones de aislamiento de instantánea no está activada. No se permiten transacciones de aislamiento de instantánea.

PENDING_ON

La compatibilidad de transacciones de aislamiento de instantánea se encuentra en estado de transición (de OFF a ON). Las operaciones abiertas deben finalizar.

No se permiten transacciones de aislamiento de instantánea.

ON

La compatibilidad de transacciones de aislamiento de instantánea está activada.

Se permiten transacciones de instantáneas.

PENDING_OFF

La compatibilidad de transacciones de aislamiento de instantánea se encuentra en estado de transición (de ON a OFF).

Las transacciones de instantáneas iniciadas con posterioridad no tienen acceso a esta base de datos. La actualización de transacciones sigue pagando el costo de crear versiones en esta base de datos. Las transacciones de instantáneas existentes siguen teniendo acceso a la base de datos sin problema. El estado PENDING_OFF no pasa a OFF hasta que finalicen las transacciones de instantáneas que estaban activas cuando el estado de aislamiento de instantánea de la base de datos estaba en ON.

Utilice la vista de catálogo sys.databases para determinar el estado de ambas opciones de base de datos para el control de versiones de filas.

Todas las actualizaciones de tablas de usuario y algunas tablas de sistema almacenadas en master y msdb generan versiones de filas.

La opción ALLOW_SNAPSHOT_ISOLATION se establece automáticamente en ON en las bases de datos master y msdb, y no puede deshabilitarse.

Los usuarios no pueden establecer en ON la opción READ_COMMITTED_SNAPSHOT en master, tempdb ni msdb.