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

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

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

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

MSSQL Error 3101: Exclusive access could not be obtained — Решение

Обновлено: 25.08.2026 · Официальная документация ↗

Ошибка 3101 возникает при выполнении операций RESTORE DATABASE, DROP DATABASE или ALTER DATABASE, требующих эксклюзивного (монопольного) доступа к базе, если к ней остаются подключены активные пользовательские сессии или фоновые процессы.

  • Сообщение: Exclusive access could not be obtained because the database is in use (Severity 16, State 1).
  • Невозможность выполнить восстановление бэкапа поверх существующей рабочей или тестовой базы 1С.
  • Сбои автоматических ночных регламентных задач разворачивания копий баз.

1. Идентификация сессий, удерживающих базу данных

SELECT 
    s.session_id,
    s.login_name,
    s.host_name,
    s.program_name,
    req.status,
    req.command
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests req ON s.session_id = req.session_id
WHERE s.database_id = DB_ID('YourDatabaseName');

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

Самый надежный способ получения монопольного доступа — немедленный откат всех активных транзакций:

USE [master];
GO
ALTER DATABASE [YourDatabaseName] 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

3. Выполнение операции восстановления (Restore)

RESTORE DATABASE [YourDatabaseName] 
FROM DISK = N'D:\Backups\YourDatabase.bak' 
WITH REPLACE;
GO

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

ALTER DATABASE [YourDatabaseName] 
SET MULTI_USER;
GO

5. Отключение соединений на стороне кластера 1С

Если база удерживается процессами rphost, отключите блокировку регламентных заданий и сбросьте сессии через консоль администрирования 1С или PowerShell скрипт RAS/RAC.

💡 Практика специалистов: Всегда оборачивайте скрипты восстановления в конструкцию: ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE -> RESTORE -> ALTER DATABASE ... SET MULTI_USER в едином скрипте управления.

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

Почему после команды SINGLE_USER соединение захватывает чужой процесс?

Если пул приложений 1С или мониторинг успеет переподключиться раньше вас, они займут единственный доступный слот. Выполняйте ALTER DATABASE ... SINGLE_USER и RESTORE DATABASE в одном пакете (скрипте) в рамках одного SPID.

Что делает параметр WITH ROLLBACK IMMEDIATE?

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

Может ли агент SQL Server блокировать базу?

Да, если в этот момент запущен Job резервного копирования, сбора статистики или DBCC CHECKDB.

Как закрыть все сессии к базе с помощью хранимой процедуры sp_WhoIsActive?

Найдите блокирующие SPID через EXEC sp_WhoIsActive @filter_type = 'database', @filter = 'YourDB' и выполните команду KILL для каждого session_id.

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