Как восстановить резервную копию базы MS SQL в тестовую базу 1С без блокировки пользователей рабочей базы?

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

В процессе сопровождения клиент-серверных информационных баз 1С:Предприятие регулярно возникает необходимость развернуть свежую резервную копию рабочей базы в тестовую или аналитическую среду. Однако при выполнении стандартной процедуры восстановления через среду SQL Server Management Studio (SSMS) администраторы нередко сталкиваются с ситуацией, когда СУБД начинает требовать монопольный доступ к рабочей базе-источнику, блокирует активные сеансы пользователей или завершает процесс восстановления с ошибкой.

Разберем причины возникновения такого поведения, выясним, какие параметры мастера восстановления приводят к блокировкам, и рассмотрим правильные варианты создания копии как через графический интерфейс, так и с помощью сценариев T-SQL.

Почему SQL Server требует монопольный доступ к рабочей базе?

Когда мы разворачиваем бэкап из файла формата .bak в новую базу данных, исходная рабочая база теоретически вообще не должна участвовать в процессе: данные считываются напрямую из архивного файла. Ошибки и попытки монопольного захвата исходной базы возникают по двум основным причинам:

  1. Резервное копирование заключительного фрагмента журнала (Tail-log backup): По умолчанию мастер восстановления в SSMS может попытаться создать резервную копию заключительного фрагмента журнала транзакций базы-источника и перевести её в состояние восстановления (режим WITH NORECOVERY). Этот механизм предназначен для сценариев аварийного восстановления текущей рабочей базы при сбое, но при разворачивании тестовой копии он ошибочно пытается перевести действующую рабочую базу в режим RESTORING, требуя закрытия всех активных соединений 1С.
  2. Конфликт путей к физическим файлам данных: Внутри файла бэкапа содержатся пути к файлам .mdf и .ldf, которые использовались на момент создания архива. Если при восстановлении явно не указать новые имена и каталоги для тестовой базы, SQL Server попытается перезаписать рабочие файлы базы-источника, которые уже открыты и монопольно удерживаются службой СУБД.

Пошаговое восстановление через графический интерфейс SSMS

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

  1. В обозревателе объектов (Object Explorer) нажимаем правой кнопкой мыши на ветку Базы данных (Databases) или на созданную заранее пустую тестовую базу и выбираем Задачи (Tasks) → Восстановить (Restore) → База данных (Database).
  2. На вкладке Общие (General) в качестве источника (Source) выбираем переключатель Устройство (Device), нажимаем кнопку выбора и указываем путь к файлу резервной копии .bak. В поле назначения (Destination Database) обязательно указываем имя базы-приемника (например, BGU_Test).
  3. Переходим на вкладку Файлы (Files). Обязательно активируем опцию Переместить все файлы в папку (Relocate all files to folder) либо вручную в таблице в колонке Восстановить как (Restore As) задаем уникальные пути и имена файлов для файлов данных и журнала (например, BGU_Test.mdf и BGU_Test_log.ldf). Это предотвратит попытку перезаписи файлов рабочей базы.
  4. Переходим на вкладку Параметры (Options). Это ключевой этап для устранения блокировок:
    • Устанавливаем флаг Перезаписать существующую базу данных с параметром REPLACE (Overwrite the existing database WITH REPLACE), если разворачивание выполняется поверх существующей тестовой базы.
    • Критически важно: В секции «Резервная копия заключительного фрагмента журнала» (Tail-Log backup) снимаем флаг Создать резервную копию заключительного фрагмента журнала перед восстановлением и снимаем отметку Оставить базу данных источник в состоянии восстановления (Leave source database in the restoring state).
    • В блоке «Состояние восстановления» (Recovery state) проверяем, чтобы был выбран пункт Оставить базу данных готовой к использованию (RESTORE WITH RECOVERY).
    • При необходимости перезаписи существующей тестовой базы активируем опцию Закрыть существующие соединения с базой данных назначения (Close existing connections to destination database).
  5. Нажимаем кнопку ОК и запускаем процесс разворачивания.

Восстановление через сценарий T-SQL (рекомендуемый способ)

Использование прямого T-SQL скрипта полностью исключает влияние скрытых настроек графического интерфейса SSMS и снижает вероятность человеческой ошибки. Проанализируем, как правильно сформировать такой запрос.

Для начала выясним точные логические имена файлов, хранящихся внутри архива. Выполним команду:


RESTORE FILELISTONLY 
FROM DISK = N'C:\Backup\BGU_backup.bak';

В выводе запроса обратим внимание на значения в колонке LogicalName для строк с типом D (данные) и L (журнал транзакций). Затем выполним команду восстановления с явным перенаправлением файлов (параметр MOVE):


USE [master];
GO

-- Переводим только тестовую базу в однопользовательский режим для разрыва старых сеансов
IF DB_ID('BGU_Test') IS NOT NULL
BEGIN
    ALTER DATABASE [BGU_Test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
END
GO

-- Выполняем восстановление
RESTORE DATABASE [BGU_Test]
FROM DISK = N'C:\Backup\BGU_backup.bak'
WITH 
    MOVE N'BGU2_Data' TO N'D:\SQLData\BGU_Test.mdf',
    MOVE N'BGU2_Log' TO N'D:\SQLData\BGU_Test_log.ldf',
    REPLACE,
    RECOVERY;
GO

-- Возвращаем тестовую базу в многопользовательский режим
ALTER DATABASE [BGU_Test] SET MULTI_USER;
GO

Такой скрипт работает полностью автономно, не затрагивает рабочую базу и может быть встроен в расписание Агента SQL Server (SQL Server Agent) для регулярного автоматического обновления тестового контура.

Ограничения платформы 1С и обязательные действия после разворачивания

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

  1. Штатное резервное копирование в режиме «1С:Предприятие»: Раздел меню Администрирование → Обслуживание → Резервное копирование и восстановление разработан исключительно для файловых информационных баз. В клиент-серверном варианте создание дампов должно осуществляться средствами СУБД (планы обслуживания MS SQL).
  2. Выгрузка в файл .dt: Использование выгрузки базы в файл формата .dt через Конфигуратор не рекомендуется в качестве регулярного бэкапа для больших баз, так как требует монопольной блокировки информационной базы и предназначено в первую очередь для миграции между различными СУБД (например, с MS SQL на PostgreSQL).
  3. Блокировка регламентных заданий: Сразу после добавления восстановленной базы в консоль администрирования кластера 1С:Предприятия необходимо открыть свойства информационной базы и установить флаг Блокировка регламентных заданий включена. Это предотвратит отправку тестовых уведомлений контрагентам, запуск фоновых обменов и выполнение регламентных расчетов в тестовом контуре.
  4. Определение копии при первом входе: При запуске базы в режиме «1С:Предприятие» платформа определит изменение параметров подключения и выдаст диалоговое окно. Необходимо обязательно выбрать вариант Это копия базы. В этом случае система автоматически заблокирует регламентные задания и интеграционные взаимодействия через внешние веб-сервисы.
← На главную