MSSQL Ошибка 5070: Database state cannot be changed while other users are using
- Сообщение:
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;
GO2. Завершение активных сессий через 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);
GO3. Блокировка соединений на уровне кластера 1С
Перед обслуживанием СУБД заблокируйте начало новых сеансов и регламентных заданий в консоли администрирования 1С:Предприятия или через утилиту rac:
rac session dismiss --cluster=<ID> --base=<ID> Частые вопросы (FAQ)
Чем отличается ROLLBACK IMMEDIATE от NO_WAIT?
ROLLBACK IMMEDIATE немедленно завершает все активные сессии и выполняет смену состояния. Опция NO_WAIT завершает команду ошибкой, если в базе есть хотя бы одно активное подключение.
Почему база после SINGLE_USER оказывается занята другим процессом?
Если сразу после перевода в SINGLE_USER первое освободившееся соединение перехватит фоновый процесс 1С или служба мониторинга, администратор получит ошибку блокировки. Запускайте все команды в рамках единого скрипта/пакета.
Безопасен ли сброс соединений через ROLLBACK IMMEDIATE?
Для целостности СУБД это полностью безопасно (все незавершенные транзакции корректно откатываются). Однако пользователи 1С получат аварийное завершение текущей операции без сохранения несохраненных форм.
Как изменить параметры базы, не отключая пользователей?
Большинство параметров (Auto Growth, Maxsize, Compatibility Level) меняются онлайн без блокировки базы. Отключение пользователей требуется только для режимов доступа, смены Collation и изменения модели версионирования RCSI.