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

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

Как скопировать SQL-базу 1С

Способы скопировать SQL-базу 1С: выгрузка через конфигуратор, бэкап средствами MS SQL и PostgreSQL, восстановление на другом сервере, проверка результата.

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

Существует два принципиально разных подхода. Первый — выгрузка информационной базы в файл .dt через конфигуратор: способ универсальный, не зависит от СУБД, но требует монопольного доступа и на больших базах работает долго. Второй — создание резервной копии средствами SQL-сервера (backup/restore): быстрее, сохраняет базу «как есть», но требует прав администратора СУБД и аккуратности при переносе на другой сервер.

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

Что нужно подготовить перед копированием

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

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

Проверьте свободное место на диске. Резервная копия SQL-базы обычно занимает заметную часть размера самой базы, а файл .dt при выгрузке может оказаться сопоставимым по объёму. Для базы в несколько десятков гигабайт заранее зарезервируйте место с запасом — прерванная из-за нехватки места выгрузка не создаёт пригодный файл.

Способ 1: выгрузка базы в файл .dt через конфигуратор

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

Порядок действий: запустите конфигуратор под пользователем с административными правами, откройте меню «Администрирование» → «Выгрузить информационную базу», укажите путь и имя файла .dt и дождитесь завершения. На время выгрузки база переводится в режим, требующий монопольного доступа, — все пользователи и фоновые сеансы должны быть завершены.

Проверить активные сеансы можно в консоли кластера серверов 1С (если используется сервер 1С:Предприятия) или через «Администрирование» → «Активные пользователи» в клиенте. Принудительное завершение сеансов допустимо, но предупредите сотрудников заранее — несохранённые данные в открытых документах будут потеряны.

Порядок действий при выгрузке .dt
  1. 1
    Завершите сеансы пользователей и фоновые задания в базе
  2. 2
    Запустите конфигуратор с правами администратора
  3. 3
    Откройте «Администрирование» → «Выгрузить информационную базу»
  4. 4
    Укажите путь к файлу .dt на диске с достаточным свободным местом
  5. 5
    Дождитесь завершения и проверьте размер и дату создания файла

Ограничения способа .dt

На больших базах (десятки и сотни гигабайт) выгрузка .dt занимает часы и сильно нагружает сервер. Кроме того, загрузка .dt в существующую базу полностью замещает её содержимое — это не инструмент слияния данных. Для регулярных резервных копий рабочей SQL-базы .dt обычно дополняют, а не заменяют им SQL-бэкапы.

Способ 2: резервная копия средствами MS SQL Server

Если база работает на MS SQL Server, самый быстрый способ её скопировать — создать полную резервную копию (Full backup) и восстановить её под новым именем или на другом сервере. Пользователей при этом можно не выгонять, хотя для гарантированной целостности с точки зрения прикладной логики копию лучше делать в период минимальной активности.

В SQL Server Management Studio (SSMS) подключитесь к серверу, найдите нужную базу, щёлкните правой кнопкой → «Tasks» → «Back Up». Выберите тип «Full», укажите файл назначения с расширением .bak и запустите. Та же операция выполняется командой T-SQL.

sql
BACKUP DATABASE [MyBase1C] TO DISK = N'D:\Backup\MyBase1C_copy.bak' WITH FORMAT, COMPRESSION;

Чтобы развернуть копию рядом с исходной базой на том же сервере, восстановите бэкап под новым именем, обязательно переназначив физические файлы данных и журнала — иначе восстановление попытается перезаписать файлы рабочей базы. В SSMS это делается на вкладке «Files» окна восстановления, в T-SQL — параметром MOVE.

sql
RESTORE DATABASE [MyBase1C_Copy] FROM DISK = N'D:\Backup\MyBase1C_copy.bak' WITH MOVE 'MyBase1C' TO 'D:\Data\MyBase1C_Copy.mdf', MOVE 'MyBase1C_log' TO 'D:\Data\MyBase1C_Copy_log.ldf';

Способ 3: копирование базы на PostgreSQL

Для баз 1С на PostgreSQL (в том числе на сборке, адаптированной под 1С) используется штатная утилита pg_dump. Она создаёт логическую копию базы, которую затем разворачивают через pg_restore или psql.

bash
pg_dump -U postgres -Fc -f /backup/mybase1c_copy.dump mybase1c

Флаг -Fc создаёт сжатый дамп в собственном формате, который восстанавливается командой pg_restore в заранее созданную пустую базу. Учтите, что для 1С новая база должна создаваться с теми же параметрами локали и кодировки, что и исходная, иначе при подключении из консоли кластера возможны ошибки сортировки и сравнения строк.

bash
createdb -U postgres -T template0 --locale=ru_RU.UTF-8 mybase1c_copy && pg_restore -U postgres -d mybase1c_copy /backup/mybase1c_copy.dump

Регистрация копии в кластере 1С и подключение пользователей

После восстановления SQL-копии база существует только на уровне СУБД — сервер 1С о ней не знает. Чтобы с копией можно было работать, зарегистрируйте её в консоли кластера серверов 1С: создайте новую информационную базу, укажите тип СУБД, сервер, имя восстановленной базы и пользователя СУБД.

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

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

Проверка результата и типичные ошибки

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

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

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

Открытие базы в режиме предприятия
Норма

База запускается, справочники и документы открываются без ошибок

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

Ошибки подключения к СУБД, сообщения о несовместимости версий

Актуальность данных
Норма

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

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

Данные отсутствуют или заметно старше ожидаемых

Работа фоновых механизмов
Норма

Обмены и рассылки в копии отключены или настроены на тестовые контуры

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

Копия выполняет обмены с рабочими системами

Журнал восстановления СУБД
Норма

Restore завершён успешно, база в статусе ONLINE

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

Ошибки RESTORE, база в состоянии Restoring или Suspect

Типичные ошибки
01
Восстановление бэкапа поверх рабочей базы без MOVE — перезаписываются файлы продуктивной базы, данные теряются
02
Выгрузка .dt при активных сеансах — выгрузка не запускается или завершается ошибкой монопольного доступа
03
Копирование mdf/ldf-файлов при работающем SQL-сервере — копия повреждена и не подключается
04
Забытый флажок «Создать базу при отсутствии» в консоли кластера — вместо подключения копии создаётся пустая база
05
Запуск копии без отключения обменов — тестовая база шлёт данные в рабочие системы

Какой способ выбрать

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

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

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

Backup/restore MS SQL

Быстро, подходит для регулярных копий и восстановления. Работает только внутри MS SQL, требует прав на СУБД

pg_dump/pg_restore (PostgreSQL)

Штатный способ для PostgreSQL, гибкие параметры. Требует совпадения локали и кодировки при создании новой базы

Копирование файлов БД вручную

Только при остановленной службе СУБД. В работающей системе приводит к повреждённой копии — не рекомендуется

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

Итог

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

SQL-базу 1С копируют через выгрузку .dt (универсально, нужен монопольный доступ) или через backup/restore средствами СУБД (быстро, нужны права администратора СУБД). После восстановления SQL-копию регистрируют в консоли кластера 1С без создания новой базы и отключают в ней обмены и рассылки. Результат проверяют входом в базу и сверкой данных.

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

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

Да, при создании резервной копии средствами СУБД (BACKUP DATABASE в MS SQL или pg_dump в PostgreSQL) пользователи могут продолжать работать. Выгрузка .dt через конфигуратор, напротив, требует монопольного доступа. Для максимально согласованной копии SQL-бэкап лучше делать в период низкой активности.

Чем отличается файл .dt от SQL-бэкапа?

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

Почему восстановленная копия не видна в списке баз 1С?

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

Что делать, если при восстановлении MS SQL выдаёт ошибку про занятые файлы?

Ошибка означает, что вы восстанавливаете бэкап без переназначения файлов, и SQL пытается использовать файлы существующей базы. В окне восстановления SSMS на вкладке «Files» укажите новые пути для mdf- и ldf-файлов либо используйте параметры MOVE в T-SQL-команде RESTORE.

Опасно ли запускать копию рабочей базы?

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

Как часто нужно делать копии рабочей SQL-базы?

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