Как устранить ошибку «Database is in use» и успешно восстановить базу данных 1С из SQL-бэкапа?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Восстановление базы данных из резервной копии (бэкапа) в SQL Server — это стандартная процедура, которая, тем не менее, часто вызывает трудности у администраторов 1С. Типичная ситуация: необходимо развернуть копию рабочей базы на том же сервере для проверки данных или тестирования обновлений, но процесс прерывается ошибкой о невозможности получения монопольного доступа («Database is in use»). Рассмотрим подробно, почему возникает эта проблема и как правильно настроить процесс восстановления, чтобы не повредить основную рабочую базу.

Разберем причину конфликта имен и путей файлов

Одной из самых опасных и частых ошибок является попытка восстановления бэкапа в новую базу без изменения путей к физическим файлам. Проанализируем ситуацию: внутри файла бэкапа (.bak) хранится информация о логических именах (например, Trade_Data) и физических путях (например, C:\SQLData\Trade.mdf). Если вы создали новую пустую базу Trade_Copy и пытаетесь восстановить в нее бэкап основной базы Trade, SQL Server по умолчанию может попытаться перезаписать файлы «живой» рабочей базы.

Для решения этой проблемы выполним следующие действия в SQL Server Management Studio (SSMS):

  1. Перейдем на вкладку «Файлы» (Files) в окне восстановления базы данных.
  2. Установим флаг «Relocate all files to folder» (Переместить все файлы в папку).
  3. Проверим колонку «Restore As» (Восстановить как). Убедимся, что пути к файлам .mdf и .ldf указывают на новые файлы, соответствующие вашей тестовой базе, а не на файлы основной конфигурации. Это критически важно, чтобы не «похерить» (как выразились участники обсуждения) рабочую базу.

Обеспечение монопольного режима и разрыв соединений

Если SQL Server сообщает, что база используется, значит, к ней есть активные подключения. Это может быть консоль 1С, фоновые задания или открытые окна самой SSMS. Разберем, как принудительно освободить базу для восстановления.

На вкладке «Параметры» (Options) в окне восстановления необходимо активировать опцию «Close existing connections to destination database». Эта настройка заставляет SQL Server разорвать все текущие сессии перед началом операции.

Если стандартная «галка» в интерфейсе не помогает, воспользуемся более надежным методом — переводом базы в однопользовательский режим с помощью скрипта. Рассмотрим пример кода:


ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- Здесь выполняется операция восстановления
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER;

В этом сценарии команда ROLLBACK IMMEDIATE мгновенно прерывает все незавершенные транзакции и выгоняет пользователей, позволяя вам беспрепятственно начать работу с файлами. После завершения восстановления не забудьте вернуть режим MULTI_USER, иначе пользователи не смогут подключиться к базе.

Блокировка регламентных заданий на стороне сервера 1С

Часто виновником того, что база «занята», является сам сервер 1С:Предприятие. Даже если пользователи вышли, кластер может запускать фоновые процессы. Проанализируем необходимые настройки в консоли администрирования 1С:

  1. Откроем консоль администрирования серверов 1С.
  2. Найдем нашу информационную базу и зайдем в её свойства.
  3. Установим флаг «Блокировка начала сеансов включена».
  4. Обязательно установим флаг «Блокировка регламентных заданий включена».

Эти действия гарантируют, что в процессе восстановления SQL Server не получит новый запрос на соединение от rphost, который мог бы помешать установке монопольного режима.

Тонкая настройка параметров восстановления в SSMS

Посмотрим на дополнительные параметры, которые часто игнорируются, но могут стать причиной сбоя. На вкладке «Options» есть несколько важных переключателей:

Различия между выгрузкой 1С (.dt) и бэкапом SQL (.bak)

Важно понимать фундаментальное различие в инструментах. Если вы используете файл .bak, то все манипуляции проводятся в SQL Server Management Studio. Если же вы имеете дело с файлом .dt, то восстановление происходит через Конфигуратор 1С (пункт меню «Администрирование» — «Загрузить информационную базу»).

Выясним причину, почему авторы часто путают эти понятия: файл .dt — это платформенный механизм, он не зависит от типа СУБД, тогда как .bak — это низкоуровневая копия данных самого SQL Server. Для работы с большими базами данных использование .bak является предпочтительным, так как оно значительно быстрее и надежнее.

Проверка прав доступа и версий SQL

Напоследок проанализируем ситуацию с правами. Даже если вы обладаете правами администратора в системе, служба SQL Server работает под своей учетной записью (например, NT SERVICE\MSSQLSERVER). Убедитесь, что у этой учетной записи есть права «Чтение» и «Запись» на папку, где лежит файл бэкапа и куда будут записываться файлы базы. В противном случае вы получите ошибку доступа еще на этапе выбора файла.

Также помните о правиле совместимости: вы можете восстановить базу с более старой версии SQL Server на новую (например, с 2016 на 2019), но невозможно восстановить бэкап, сделанный в SQL Server 2022, на сервер версии 2017. В таких случаях единственным выходом будет использование выгрузки через .dt.

← На главную