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 ServerO 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.
Mais entradas deste banco
- 3902The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION
- 1101Could not allocate a new page because of insufficient disk space in filegroup (não foi possível alocar uma nova página por falta de espaço em disco no filegroup)
- 3729Cannot DROP because it is being referenced by object (não é possível remover porque outro objeto o referencia)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (a constraint FOREIGN KEY pode causar ciclos ou vários caminhos em cascata)
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission (o objeto/principal não foi encontrado porque não existe ou você não tem permissão)
- 4834You do not have permission to use the bulk load statement (você não tem permissão para usar o comando de carga em massa)