DBAtlas · Атлас эксплуатации баз данных

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.

Открыть в DBAtlas →

Ещё по этой СУБД