DBAtlas · Atlas de operaciones de bases de datos

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement (falló la transacción snapshot porque una sentencia DDL modificó el objeto)

SQL Server

¿Qué significa?

Una transacción con aislamiento snapshot falló porque un objeto al que accedía fue modificado por una sentencia DDL (cambio de esquema) en otra transacción concurrente. Los metadatos no tienen versiones, por lo que la transacción snapshot no puede continuar.

¿Por qué ocurre?

Mientras se ejecuta una transacción iniciada con aislamiento SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT), otra sesión ejecuta DDL como ALTER TABLE/CREATE INDEX sobre una tabla a la que accede. Las transacciones snapshot pueden ver versiones de filas, pero no versiones del esquema. Este error no se produce con READ COMMITTED SNAPSHOT (RCSI); RCSI toma un nuevo snapshot para cada sentencia.

Cómo solucionarlo

Reintente la transacción; normalmente funciona una vez completado el DDL. Como solución permanente, realice los cambios de esquema (DDL) en ventanas de mantenimiento sin carga snapshot intensa. Capture este error en la aplicación e implemente una lógica de reintento automático. Acorte las transacciones snapshot de larga duración.

Abrir en DBAtlas →

Más entradas de este motor