Ошибки · Решение
SQL Server ошибка 3930: что означает и как исправить
Транзакция перешла в uncommittable state: запись в журнал и COMMIT больше невозможны, поэтому её нужно полностью откатить.
Короткий ответ
Код 3930 означает uncommittable transaction: после предыдущей ошибки транзакция уже не может писать в log или выполнять COMMIT. Найдите первичную ошибку и сделайте полный ROLLBACK.
Что означает ошибка
Транзакция перешла в uncommittable state: запись в журнал и COMMIT больше невозможны, поэтому её нужно полностью откатить.
Возможные причины
- Процедура не откатывает doomed transaction перед следующими изменениями.
- Внутри транзакции произошла ошибка, после которой `XACT_STATE()` стал -1.
- TRY/CATCH обработал исключение, но код продолжил выполнять write/COMMIT.
Что проверить
- Проверьте `XACT_STATE()` в CATCH-блоке.
- Найдите первичную ошибку, которая сделала транзакцию uncommittable.
- Проверьте границы nested procedures и кто отвечает за BEGIN/COMMIT/ROLLBACK.
Безопасные шаги
- Исправьте обработку исключений так, чтобы COMMIT выполнялся только для committable transaction.
- После исправления тестируйте сценарий с той же первичной ошибкой, а не только happy path.
- При `XACT_STATE() = -1` выполните полный ROLLBACK.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если 3930 повторяется, нужен не сам код, а первичная ошибка, после которой XACT_STATE() стал -1. Передайте разработчику/DBA CATCH-блок, границы транзакции и исходное исключение.
Похожие ошибки
- /errors/sql-server-error-3002/
- /errors/sql-server-error-3013/
- /errors/sql-server-error-3021/
Что учитывать
Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.
Официальный источник
Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.