Как правильно сделать копию базы 1С на MS SQL Server из бэкапа?

Системный администратор IT и автоматизация бизнеса
← На главную

Создание копии информационной базы — одна из самых частых задач администратора 1С. Это требуется для тестирования обновлений, разработки нового функционала или анализа данных без риска для «боевой» системы. Однако при работе с MS SQL Server процедура восстановления из бэкапа имеет свои нюансы. Если просто запустить восстановление «по умолчанию», можно случайно повредить рабочую базу. В этой статье мы подробно разберем, как сделать копию правильно, и что делать, если что-то пошло не так.

Метод 1: Использование T-SQL скрипта (самый надежный способ)

Рассмотрим наиболее эффективный метод создания копии — использование SQL-запроса. Проанализируем ситуацию: у нас есть файл бэкапа OldBase.bak и мы хотим создать на его основе базу NewBase. Главная сложность заключается в том, что внутри бэкапа хранятся пути к физическим файлам оригинальной базы. Если их не изменить, SQL Server попытается перезаписать файлы работающей базы, что приведет к ошибке или потере данных.

Разберем по шагам структуру правильного скрипта:


RESTORE DATABASE [NewBase]
FROM DISK = N'C:\Backup\OldBase.bak'
WITH
    FILE = 1,
    MOVE N'OldBase_Data' TO N'D:\SQLData\NewBase_Data.mdf',
    MOVE N'OldBase_log' TO N'D:\SQLData\NewBase_log.ldf',
    NOUNLOAD,
    REPLACE

Проанализируем параметры этого запроса:

Метод 2: Восстановление через графический интерфейс (SSMS)

Если вы предпочитаете работать мышкой, рассмотрим, как выполнить ту же операцию в SQL Server Management Studio. Посмотрим на алгоритм действий:

  1. Нажмите правой кнопкой на ветку Databases и выберите Restore Database....
  2. В поле Source выберите Device и укажите путь к вашему .bak файлу.
  3. В поле Destination Database вручную введите имя НОВОЙ базы (например, Work_Copy).
  4. ВНИМАНИЕ: Перейдите на закладку Files. Это самый важный этап.
  5. Установите галочку Relocate all files to folder или вручную измените пути в колонке Restore As. Имена файлов .mdf и .ldf в этой колонке ОБЯЗАТЕЛЬНО должны отличаться от имен файлов оригинальной базы.
  6. На закладке Options установите флаг Overwrite the existing database (WITH REPLACE).

Что делать, если оригинальная база стала недоступна (статус Restoring)

Выясним причину типичной ошибки: иногда после неудачной попытки создания копии основная база «зависает» в состоянии In Recovery или Restoring. Это происходит, когда SQL Server начал процесс восстановления, но не смог его завершить (например, из-за конфликта имен файлов), и база осталась заблокированной для транзакций.

Если вы случайно «задели» рабочую базу и она стала недоступна, не паникуйте. Попробуем вывести ее из этого состояния командой:

RESTORE DATABASE [Имя_Вашей_Рабочей_Базы] WITH RECOVERY

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

Специфические настройки 1С после создания копии

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

1. Блокировка регламентных заданий. В копии базы могут быть настроены автоматические обмены, рассылки или выгрузки в банк. Если копия запустит эти процессы, она может отправить старые или некорректные данные реальным контрагентам. Чтобы этого избежать, при добавлении базы в консоли администрирования 1С установите флаг «Блокировка регламентных заданий включена».

2. Ответ на запрос системы при входе. При первом запуске копии 1С:Предприятие обнаружит изменение параметров SQL и выдаст диалоговое окно. Мы всегда должны выбирать вариант «Информационная база перемещена» (или «Это копия информационной базы» в новых версиях). Это действие автоматически отключит внутри базы регламентные задания, внешние источники данных и другие опасные механизмы связи с внешним миром.

3. Проблема «осиротевших» пользователей. Часто после восстановления базы на другом сервере пользователь базы данных теряет связь с логином SQL. Проанализируем ситуацию: в списке Users базы пользователь есть, а зайти под ним нельзя. Чтобы исправить это, воспользуемся командой:

ALTER USER [ИмяПользователя] WITH LOGIN = [ИмяЛогина];

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

Рекомендации по именованию логических файлов

Рассмотрим еще один важный момент, упомянутый в обсуждении. Технически SQL Server позволяет иметь файлы с одинаковыми внутренними (логическими) именами в разных базах. Однако для удобства администрирования мы рекомендуем менять и их. Если в базе Base_Work логический файл называется Base_Data, то в копии Base_Test лучше переименовать его в Base_Test_Data. Это поможет избежать путаницы при чтении отчетов о дисковом пространстве или при написании скриптов обслуживания IndexOptimize и DatabaseBackup.

Используя эти методы, мы сможем создавать любое количество копий баз 1С быстро и безопасно. Главное — всегда проверять пути к файлам на вкладке Files или в секции MOVE вашего скрипта.

← На главную