n1ro°
RU

Ошибки · Решение

SQL Server ошибка 3021: что означает и как исправить

Команда резервного копирования или восстановления выполняется в пользовательской транзакции, а SQL Server этого не допускает.

Редакция N1RO · Проверено

Короткий ответ

Ошибка 3021 означает, что BACKUP или RESTORE запущен внутри пользовательской транзакции. Завершите или откатите транзакцию и выполняйте операцию резервного копирования отдельно.

Что означает ошибка

Команда резервного копирования или восстановления выполняется в пользовательской транзакции, а SQL Server этого не допускает.

Возможные причины

  • BACKUP/RESTORE выполняется между BEGIN TRAN и COMMIT/ROLLBACK.
  • Процедура-обёртка неявно открыла transaction раньше административной команды.
  • ORM/automation держит транзакцию вокруг набора statements, куда попал BACKUP или RESTORE.

Что проверить

  • Найдите внешний BEGIN TRAN в вызывающем коде.
  • Сверьте, не включает ли job несколько административных действий в одну transaction scope.
  • Проверьте `@@TRANCOUNT` перед командой.

Безопасные шаги

  1. Повторите операцию в отдельном session/context.
  2. Завершите или откатите пользовательскую транзакцию до BACKUP/RESTORE.
  3. Вынесите административную команду из transactional wrapper.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если SQL Server 3021 повторяется после проверки указанного состояния, передайте DBA полный текст ошибки, несколько соседних записей SQL Server error log, версию/edition, имя базы и точную команду, на которой возник сбой.

Похожие ошибки

  • /errors/sql-server-error-3002/
  • /errors/sql-server-error-3013/
  • /errors/sql-server-error-3023/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.