К статье
Практический материал

Администрирование · 10 мин

Как сделать копию базы 1С средствами SQL

Как сделать копию базы 1С средствами SQL Server: backup/restore, скрипты T-SQL, перенос на другой сервер, проверка результата и типичные ошибки администраторов.

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

Основной инструмент — штатные механизмы резервного копирования SQL Server: полный backup базы и его восстановление под новым именем или на другом сервере. Для MS SQL Server это делается через SQL Server Management Studio (SSMS) или скриптами T-SQL, для PostgreSQL — через pg_dump/pg_restore. Ниже разобраны оба сценария с упором на MS SQL, как наиболее распространённый в связке с 1С:Предприятием.

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

Когда SQL-копия подходит, а когда нужна выгрузка в .dt

Выбор метода зависит от цели копии. SQL-резервная копия переносит базу «как есть» — со всеми таблицами, индексами и служебными данными СУБД. Это оптимально для быстрого создания тестовой копии, отката после неудачного обновления и переноса между серверами с одинаковой версией СУБД.

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

Сравнение способов копирования

Backup/restore средствами SQL

Быстро на больших базах, не требует монопольного доступа надолго. Ограничение: перенос только в пределах совместимых версий одной СУБД.

Выгрузка в .dt через конфигуратор

Универсальный перенос между СУБД и платформами. Ограничение: долго на больших базах, нужен монопольный режим.

Копирование файловой базы

Подходит только для файлового варианта 1С — просто копируется каталог с файлом 1Cv8.1CD при закрытых сеансах.

Подготовка: что проверить перед созданием копии

Перед запуском backup убедитесь, что у учётной записи, под которой выполняется операция, есть права на резервное копирование базы (роль db_backupoperator или выше) и доступ на запись в каталог, куда будет сохраняться файл .bak. Дисковое пространство должно превышать размер базы с запасом — сжатый backup обычно заметно меньше исходной базы, но точный размер зависит от данных.

Определите модель восстановления базы. Для рабочих баз 1С обычно рекомендуют простую модель (Simple), чтобы журнал транзакций не разрастался. Если база в полной модели (Full), перед копированием убедитесь, что журнал регулярно усекается, иначе backup будет включать большой журнал.

Желательно, чтобы в момент копирования в базе не выполнялись тяжёлые регламентные операции: перепроведение, закрытие месяца, обновление конфигурации. Сам по себе backup не блокирует работу пользователей, но активная нагрузка замедляет процесс и увеличивает риск тайм-аутов.

Создание резервной копии через SQL Server Management Studio

Самый наглядный способ — графический интерфейс SSMS. Подключитесь к серверу, найдите нужную базу в списке баз данных, щёлкните по ней правой кнопкой мыши и выберите «Задачи» → «Создать резервную копию» (Tasks → Back Up).

В окне настройки выберите тип копии «Полная» (Full), укажите назначение — диск и путь к файлу с расширением .bak. Рекомендуется включить параметр «Проверить резервную копию после завершения» (Verify backup when finished), чтобы сразу убедиться в целостности файла. На вкладке «Параметры носителя» можно включить сжатие — оно существенно уменьшает размер файла.

После нажатия OK дождитесь сообщения об успешном завершении. Время копирования зависит от размера базы и скорости дисковой подсистемы: база в десятки гигабайт на быстрых дисках копируется за минуты, на медленных — значительно дольше.

Порядок действий в SSMS
  1. 1
    Подключитесь к SQL Server и найдите базу 1С в списке баз данных
  2. 2
    Правой кнопкой мыши: Задачи → Создать резервную копию
  3. 3
    Выберите тип «Полная», укажите путь к файлу .bak
  4. 4
    Включите проверку резервной копии и при необходимости сжатие
  5. 5
    Нажмите OK и дождитесь сообщения об успешном завершении
  6. 6
    Проверьте, что файл .bak появился в указанном каталоге и имеет ненулевой размер

Создание копии скриптом T-SQL

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

BACKUP DATABASE [MyBase1C]

TO DISK = N'D:\Backups\MyBase1C_copy.bak'

WITH FORMAT, COMPRESSION, CHECKSUM;

Параметр COMPRESSION включает сжатие, CHECKSUM добавляет проверку контрольных сумм при записи, FORMAT создаёт новый набор носителей (используйте осторожно — он перезаписывает существующий файл). Для восстановления копии под новым именем на том же сервере используется RESTORE с переназначением файлов:

RESTORE DATABASE [MyBase1C_Test]

FROM DISK = N'D:\Backups\MyBase1C_copy.bak'

WITH MOVE N'MyBase1C' TO N'D:\Data\MyBase1C_Test.mdf',

MOVE N'MyBase1C_log' TO N'D:\Data\MyBase1C_Test_log.ldf',

REPLACE;

Логические имена файлов (параметры MOVE) можно узнать запросом RESTORE FILELISTONLY FROM DISK = N'...' — он покажет, какие файлы данных и журнала содержатся в backup. Без корректного переназначения файлов восстановление под новым именем на том же сервере завершится ошибкой, потому что исходные файлы уже заняты рабочей базой.

sql
RESTORE FILELISTONLY FROM DISK = N'D:\Backups\MyBase1C_copy.bak';

Регистрация копии в 1С после восстановления

Сам по себе восстановленный в SQL снимок базы ещё не доступен пользователям 1С — его нужно зарегистрировать на сервере 1С:Предприятия. Откройте консоль управления сервером 1С (оснастка «Администрирование серверов 1С:Предприятия»), перейдите в раздел информационных баз и создайте новую базу, сняв флаг «Создать базу данных, если её нет». В параметрах укажите имя восстановленной базы данных на SQL Server.

Альтернатива — добавить базу напрямую в список информационных баз на клиенте, указав сервер 1С и имя базы. После этого запустите конфигуратор или тонкий клиент и убедитесь, что база открывается и данные на месте: проверьте несколько документов за последние даты и справочники.

Если копия создаётся как тестовая, обязательно измените в ней настройки, которые могут навредить рабочему контуру: отключите расписания регламентных заданий, обмены с другими системами, отправку почты и синхронизацию с внешними сервисами. Иначе тестовая база начнёт отправлять реальные письма клиентам или дублировать документы в связанных системах.

Типичные ошибки
01
Восстановление поверх рабочей базы вместо новой — данные рабочей базы безвозвратно заменяются копией
02
Забытые регламентные задания в тестовой копии — тестовая база начинает выполнять обмены и рассылки как рабочая
03
RESTORE без MOVE на том же сервере — ошибка, потому что файлы заняты исходной базой
04
Нет прав у учётной записи сервера 1С на новую базу — база видна в SQL, но не открывается из 1С

Особенности для PostgreSQL

На связке 1С с PostgreSQL копия создаётся утилитами pg_dump и pg_restore или командой создания базы из шаблона. Самый быстрый способ — CREATE DATABASE newdb TEMPLATE mybase;, но он требует, чтобы к исходной базе не было активных подключений. Поэтому в практике чаще используют pg_dump с последующим восстановлением в новую базу.

Учитывайте, что 1С работает с PostgreSQL через специально подготовленные сборки, и при переносе копии на другой сервер версии СУБД и установленные расширения должны совпадать. После восстановления базу так же регистрируют в консоли кластера 1С, указывая новое имя базы данных.

Проверка результата и автоматизация

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

Если копии нужны регулярно — например, ежедневное обновление тестовой базы — оформите backup и restore в виде задания агента SQL Server или планировщика Windows с запуском скрипта sqlcmd. Перед автоматическим restore добавьте в скрипт перевод целевой базы в однопользовательский режим с откатом активных транзакций, иначе восстановление не сможет получить эксклюзивный доступ.

Контрольные точки

Как проверить результат

Файл .bak после backup
Норма

Файл существует, ненулевой размер, проверка в SSMS пройдена

Тревожный признак

Файл отсутствует или нулевого размера, ошибки в журнале

Восстановленная база в SQL
Норма

База в состоянии ONLINE, таблицы доступны для запросов

Тревожный признак

База в состоянии Restoring или Suspect

Открытие копии в 1С
Норма

База открывается, свежие документы на месте

Тревожный признак

Ошибка подключения или пустые данные

Итог

Что важно запомнить

Копия базы 1С средствами SQL — это полный backup с последующим restore под новым именем и регистрацией в консоли сервера 1С. Метод быстрее выгрузки .dt на больших базах, но работает только в пределах совместимых версий одной СУБД. Ключевые меры безопасности: не восстанавливать поверх рабочей базы и отключать регламентные задания в тестовой копии.

Частые вопросы

Можно ли сделать копию базы 1С средствами SQL, не останавливая работу пользователей?

Да, создание backup в MS SQL Server не требует отключения пользователей и не блокирует базу на запись. Однако под высокой нагрузкой копирование идёт медленнее, поэтому на практике его часто планируют на периоды минимальной активности.

Чем SQL-копия отличается от выгрузки в .dt?

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

Почему восстановление под новым именем завершается ошибкой о занятых файлах?

При restore SQL Server пытается разместить файлы базы по исходным путям, которые уже заняты рабочей базой. Решение — использовать параметры MOVE в команде RESTORE, указав новые пути для файлов данных и журнала. Логические имена файлов показывает команда RESTORE FILELISTONLY.

Нужно ли что-то настраивать в тестовой копии после восстановления?

Да. Отключите регламентные и фоновые задания, обмены данными, интеграции и почтовые рассылки, иначе копия будет выполнять те же операции, что и рабочая база. Также полезно изменить представление базы или добавить пометку, чтобы пользователи не перепутали её с рабочей.

Достаточно ли скопировать файлы .mdf и .ldf, чтобы получить копию базы?

Нет, копировать файлы напрямую можно только при остановленной службе SQL Server или отсоединённой базе — при работающем сервере файлы заблокированы, а скопированные «вживую» файлы могут оказаться несогласованными. Штатный и безопасный способ — BACKUP/RESTORE или операции detach/attach.

Можно ли восстановить копию на сервере с другой версией SQL Server?

Восстановление возможно только на сервере с версией не ниже той, на которой создавался backup. Перенос «вниз», на более старую версию, штатными средствами restore невозможен — в этом случае используют выгрузку в .dt или генерацию скриптов данных.