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

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

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

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

Изоляция базы MSSQL: SINGLE_USER WITH ROLLBACK IMMEDIATE при восстановлении

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка RESTORE cannot process database 'db_name' because it is in use by this session (Error 3101).
  • Фоновые задания сервера 1С:Предприятие мгновенно перехватывают освободившееся соединение при попытке выполнить RESTORE.
  • Зависание команды ALTER DATABASE SET SINGLE_USER в бесконечном ожидании освобождения активных блокировок.

1. Принудительный перевод базы в SINGLE_USER с мгновенным сбросом сессий

USE [master];
GO

-- Принудительный сброс всех открытых сессий и перевод в однопользовательский режим
ALTER DATABASE [Enterprise1C]
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;
GO

2. Выполнение операции восстановления

RESTORE DATABASE [Enterprise1C]
FROM DISK = N'D:\Backups\Enterprise1C_Fresh.bak'
WITH REPLACE, RECOVERY;
GO

3. Обязательный возврат базы в многопользовательский режим

ALTER DATABASE [Enterprise1C]
SET MULTI_USER;
GO

4. Скрипт экстренного завершения всех сессий конкретной базы перед RESTORE

USE [master];
GO
DECLARE @kill VARCHAR(8000) = '';  
SELECT @kill = @kill + 'KILL ' + CAST(session_id AS VARCHAR(5)) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('Enterprise1C') AND session_id != @@SPID;

EXEC(@kill);
💡 Практика специалистов: Перед переводом высоконагруженной базы 1С в SINGLE_USER рекомендуется временно заблокировать регламентные задания и остановить службу сервера '1C:Enterprise 8 Server Agent' (ragent), чтобы избежать шторма переподключений пула соединений.

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

Что произойдет, если после перевода в SINGLE_USER соединение перехватит другой процесс?

Если сторонний процесс (например, служба кластера 1С) успеет подключиться раньше вашего скрипта восстановления, ваш сеанс получит ошибку 'Changes to the state of the database failed because database is in single-user mode'.

Как гарантировать, что именно текущая сессия займет монопольный доступ в SINGLE_USER?

Выполняйте команду ALTER DATABASE ... SET SINGLE_USER и последующий RESTORE внутри единого скрипта или транзакционного блока без закрытия текущего соединения.

В чем разница между WITH ROLLBACK IMMEDIATE и WITH ROLLBACK AFTER N SECONDS?

ROLLBACK IMMEDIATE немедленно прерывает и откатывает все активные транзакции других пользователей. ROLLBACK AFTER ожидает указанное число секунд перед принудительным сбросом.

Можно ли перевести базу в RESTRICTED_USER вместо SINGLE_USER?

Да, режим RESTRICTED_USER разрешает доступ только членам ролей db_owner, dbcreator и sysadmin, что снижает риск случайного перехвата базы обычными пользователями.

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