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

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

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

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

MS SQL: Не удаляется/не восстанавливается база данных 1С (There is 1 other session using the database)

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

Природа блокировок соединений в MS SQL

Ошибка «Cannot drop database because it is currently in use» (или «There is 1 other session using the database» при попытке RESTORE) возникает, когда администратор пытается удалить (DROP), отсоединить (DETACH) или перезаписать из бэкапа базу данных, к которой в данный момент существуют активные или спящие (SLEEPING) подключения. В архитектуре клиент-серверной 1С рабочие процессы (rphost.exe) постоянно удерживают пул соединений к СУБД MS SQL для оптимизации производительности. Даже если в консоли кластера 1С нет активных пользователей, rphost может держать фоновые соединения открытыми. Бизнес-риски: невозможность оперативно накатить бэкап при аварии, простой разработки при обновлении копий баз.

Типы блокирующих сессий

Источник сессии (Program Name)Статус (Status)Причина удержания БД
1CV8 Server (rphost)sleepingПул соединений кластера 1С. Сессия не активна, но физический коннект к TCP-порту SQL не закрыт.
Microsoft SQL Server Management StudiorunnableУ администратора открыто окно запроса (Query Window), в контексте которого выбрана данная БД (USE [Имя_Базы]).
SQLAgent - TSQL JobStepbackgroundВыполняется регламентное задание SQL Server (например, обслуживание индексов).

Методы принудительного отключения сессий

Сценарий 1: Перевод базы в однопользовательский режим (SINGLE_USER)

Самый быстрый и надежный способ отрубить все сторонние подключения и немедленно откатить их незавершенные транзакции. Выполняется в SSMS.

 Переключение контекста на системную базу (важно!)
USE master;
GO

 Принудительное закрытие всех соединений с откатом транзакций
ALTER DATABASE [Имя_Вашей_Базы_1С] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

 Теперь можно выполнять DROP или RESTORE
DROP DATABASE [Имя_Вашей_Базы_1С];
GO

Сценарий 2: Поиск и завершение конкретной сессии (KILL)

Если переводить базу в SINGLE_USER нельзя, можно точечно "убить" зависший процесс.

 1. Вывод всех сессий с фильтрацией по имени базы
EXEC sp_who2;
-- Или более удобный запрос:
SELECT spid, status, program_name, hostname 
FROM sys.sysprocesses 
WHERE dbid = DB_ID('Имя_Вашей_Базы_1С');

 2. Завершение сессии по её номеру (SPID)
KILL 54; -- Где 54 - это найденный SPID

Типовые ошибки администраторов

  • Оставленное окно в SSMS: Администратор пишет скрипт RESTORE DATABASE [DB]..., но в выпадающем списке баз данных слева сверху выбрана именно эта база [DB]. SSMS сама блокирует базу. Перед восстановлением всегда выполняйте USE master;.
  • Блокировка сервером 1С: Попытка удалить базу в SQL без её предварительного удаления (или снятия галочки "Блокировка начала сеансов") в Консоли кластера 1С. Сервер 1С будет моментально пересоздавать соединения.
Обновление тестовых баз 1С из рабочих бэкапов занимает часы из-за зависаний?
ITSTM автоматизирует процессы CI/CD для 1С. Мы напишем PowerShell-скрипты на базе SqlServer модуля, которые корректно гасят сеансы в кластере 1С, очищают кэши и восстанавливают SQL-базы по ночам без участия человека.
💡 Практика специалистов: Практика ITSTM: При скриптовании автоматического бэкапа и развертывания сред 1С, мы всегда сначала обращаемся к COM-объекту V83.COMConnector, программно блокируем базу в кластере 1С, делаем Disconnect всем пользователям через IClusterInfo, и только потом идем в MS SQL выполнять RESTORE. Это исключает гонки состояний (Race Conditions).

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

Что значит WITH ROLLBACK IMMEDIATE?

Эта команда принудительно обрывает коннекты и заставляет SQL Server немедленно откатить (Rollback) любые незавершенные транзакции прерванных сессий. Без неё сервер будет ждать нормального завершения работы пользователей.

Как вернуть базу обратно в многопользовательский режим?

Если вы не удаляли базу, а просто отключали пользователей, выполните команду: ALTER DATABASE [Имя_Вашей_Базы_1С] SET MULTI_USER;

Почему команда KILL SPID долго висит со статусом KILLED/ROLLBACK?

Если прерванный процесс (например, перепроведение документов в 1С) успел изменить миллионы строк, SQL Server не может просто убить его. Он обязан откатить эти изменения, читая Transaction Log, что может занять столько же времени, сколько работал сам процесс.

Можно ли разорвать соединения через графический интерфейс SSMS?

Да. При выполнении задачи (Tasks) -> Restore (Восстановление) на вкладке Options поставьте галочку 'Close existing connections to destination database' (Закрыть существующие подключения). SSMS выполнит ALTER DATABASE под капотом.

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