Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_ERR_5070 1С:Предприятие и СУБД

MSSQL Ошибка 5070: Database state cannot be changed while other users are using

Обновлено: 25.08.2026 · Официальная документация ↗
  • Сообщение: Msg 5070, Level 16, State 1: Database state cannot be changed while other users are using the database 'Base1C'. ALTER DATABASE failed.
  • Невозможно перевести базу данных в SINGLE_USER, OFFLINE, READ_ONLY или изменить состояние READ_COMMITTED_SNAPSHOT.
  • Фоновые соединения кластера 1С блокируют административные операции над базой.

1. Использование конструкции WITH ROLLBACK IMMEDIATE

Чтобы команда изменения состояния базы принудительно сбросила все текущие подключения и откатила их незавершенные транзакции, всегда добавляйте модификатор отката:

ALTER DATABASE [Base1C] 
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;
GO

-- Выполнение необходимых сервисных операций (например, включение RCSI)
ALTER DATABASE [Base1C] SET READ_COMMITTED_SNAPSHOT ON;
GO

-- Возврат в рабочий режим
ALTER DATABASE [Base1C] 
SET MULTI_USER;
GO

2. Завершение активных сессий через T-SQL

Если требуется принудительно отключить соединения конкретной базы вручную:

DECLARE @kill varchar(8000) = '';  
SELECT @kill = @kill + 'KILL ' + CAST(session_id AS varchar(5)) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('Base1C') AND session_id != @@SPID;

EXEC(@kill);
GO

3. Блокировка соединений на уровне кластера 1С

Перед обслуживанием СУБД заблокируйте начало новых сеансов и регламентных заданий в консоли администрирования 1С:Предприятия или через утилиту rac:

rac session dismiss --cluster=<ID> --base=<ID>
💡 Практика специалистов: При выполнении скрипта перевода в SINGLE_USER всегда держите соединение открытым и выполняйте возврат в MULTI_USER в том же скрипте. Если вы случайно закроете окно SSMS, находясь в SINGLE_USER, фоновый пул 1С может перехватить единственный слот подключения.

Частые вопросы (FAQ)

Чем отличается ROLLBACK IMMEDIATE от NO_WAIT?

ROLLBACK IMMEDIATE немедленно завершает все активные сессии и выполняет смену состояния. Опция NO_WAIT завершает команду ошибкой, если в базе есть хотя бы одно активное подключение.

Почему база после SINGLE_USER оказывается занята другим процессом?

Если сразу после перевода в SINGLE_USER первое освободившееся соединение перехватит фоновый процесс 1С или служба мониторинга, администратор получит ошибку блокировки. Запускайте все команды в рамках единого скрипта/пакета.

Безопасен ли сброс соединений через ROLLBACK IMMEDIATE?

Для целостности СУБД это полностью безопасно (все незавершенные транзакции корректно откатываются). Однако пользователи 1С получат аварийное завершение текущей операции без сохранения несохраненных форм.

Как изменить параметры базы, не отключая пользователей?

Большинство параметров (Auto Growth, Maxsize, Compatibility Level) меняются онлайн без блокировки базы. Отключение пользователей требуется только для режимов доступа, смены Collation и изменения модели версионирования RCSI.

Полезные материалы
Рекомендуем