3961: Snapshot isolation transaction failed because the object was modified by a DDL statement
SQL ServerЧто это значит?
Транзакция, работающая на уровне изоляции snapshot, завершилась ошибкой, так как объект, к которому она обращалась, был изменён оператором DDL (изменение схемы) в другой параллельной транзакции. Метаданные не версионируются, поэтому транзакция snapshot не может продолжаться.
Почему возникает?
Пока выполняется транзакция, начатая на уровне изоляции SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT), другой сеанс выполняет DDL, такой как ALTER TABLE/CREATE INDEX, над таблицей, к которой она обращается. Транзакции snapshot видят версии строк, но не версии схемы. Эта ошибка не возникает при READ COMMITTED SNAPSHOT (RCSI); RCSI создаёт новый снимок для каждого оператора.
Как исправить
Повторите транзакцию; обычно она успешна после завершения DDL. В качестве постоянного решения выполняйте изменения схемы (DDL) в окна обслуживания без интенсивной нагрузки snapshot. Перехватывайте эту ошибку в приложении и реализуйте логику автоматического повтора. Сокращайте длительные транзакции snapshot.
Ещё по этой СУБД
- 3902Для запроса COMMIT TRANSACTION нет соответствующего BEGIN TRANSACTION
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission
- 4834You do not have permission to use the bulk load statement