DBAtlas · Atlas de operações de banco de dados

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement (a transação snapshot falhou porque um comando DDL modificou o objeto)

SQL Server

O que significa?

Uma transação em execução com snapshot isolation falhou porque um objeto que ela acessava foi alterado por um comando DDL (mudança de schema) em outra transação concorrente. Os metadados não são versionados, por isso a transação snapshot não pode continuar.

Por que acontece?

Enquanto uma transação iniciada com isolamento SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT) está em execução, outra sessão executa DDL como ALTER TABLE/CREATE INDEX em uma tabela que ela acessa. Transações snapshot enxergam versões de linhas, mas não versões de schema. Este erro não ocorre com READ COMMITTED SNAPSHOT (RCSI); o RCSI obtém um novo snapshot para cada comando.

Como resolver

Repita a transação; geralmente ela é bem-sucedida depois que o DDL termina. Como solução permanente, faça as mudanças de schema (DDL) em janelas de manutenção sem carga snapshot pesada. Capture este erro na aplicação e implemente uma lógica de nova tentativa automática. Encurte transações snapshot de longa duração.

Abrir no DBAtlas →

Mais entradas deste banco