Как перенести базу 1С между разными СУБД без использования выгрузки в DT?

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

Перенос информационных баз 1С большого объема (от 500 Гб до нескольких терабайт) между различными системами управления базами данных (СУБД) всегда был серьезным вызовом для системных администраторов. Традиционный метод через создание файла .dt часто дает сбои: процесс выгрузки может занимать десятки часов, требовать огромного свободного места на диске и в итоге завершаться ошибкой из-за нехватки памяти или нестабильности соединения. В последних версиях платформы 1С:Предприятие (начиная с 8.3.24) появился принципиально новый механизм, который позволяет выполнять миграцию напрямую из одной СУБД в другую.

В чем заключается проблема классической миграции?

Разберем типичную ситуацию, с которой сталкиваются многие администраторы крупных инсталляций 1С. Когда возникает необходимость перенести базу с Microsoft SQL Server на PostgreSQL (например, в рамках импортозамещения), стандартный путь выглядит так: Выгрузка в .dt -> Создание пустой базы -> Загрузка из .dt. Рассмотрим основные недостатки этого метода:

  1. Ограничения по объему: Базы размером около 1 Тб крайне неохотно выгружаются в .dt. Как отмечают участники обсуждения, процесс может длиться более 30 часов, и малейший сбой в сети или регламентное задание на сервере прерывает этот процесс.
  2. Двойное дисковое пространство: Вам нужно место не только под две базы (источник и приемник), но и под сам файл выгрузки, который для терабайтной базы может занимать сотни гигабайт.
  3. Монопотоковость: Классическая выгрузка/загрузка работает преимущественно в один поток, что не позволяет эффективно использовать ресурсы современных многоядерных серверов.
  4. Риск невалидных данных: В случае повреждения структуры базы .dt может просто не создаться, блокируя возможность миграции.

Новое решение: Прямая потоковая миграция через ibcmd

Проанализируем новый инструмент, предложенный разработчиками 1С. Основным действующим лицом здесь выступает утилита командной строки ibcmd. В ней реализована команда infobase copy, которая кардинально меняет подход к переносу данных. Теперь данные передаются из СУБД-источника в СУБД-приемник "на лету", минуя промежуточное сохранение в файл.

Рассмотрим ключевые преимущества этого механизма:

Инструкция по выполнению прямой миграции

Для выполнения миграции нам потребуется доступ к консоли сервера и установленная утилита ibcmd. Разберем примерный алгоритм действий. Предположим, нам нужно перенести базу с сервера MS SQL на сервер PostgreSQL.

Посмотрим на пример команды для запуска процесса:


ibcmd infobase copy 
    --src-db-type=MSSQLServer 
    --src-db-server=SQL-OLD 
    --src-db-name=Trade_Base 
    --src-db-user=sa 
    --src-db-pwd=password 
    --dst-db-type=PostgreSQL 
    --dst-db-server=PG-NEW 
    --dst-db-name=Trade_Base_New 
    --dst-db-user=postgres 
    --dst-db-pwd=secret 
    --threads=8

В данном примере параметр --threads=8 указывает утилите использовать 8 параллельных потоков для копирования данных, что значительно ускоряет процесс на мощном оборудовании.

Обеспечение консистентности и "горячая" миграция

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

Однако, как справедливо замечают эксперты в обсуждении, если требуется минимизировать простой до нуля, можно рассмотреть комбинированный подход:

  1. Создание снимка (snapshot) базы на уровне СУБД.
  2. Первичная миграция данных из снимка с помощью ibcmd.
  3. "Добивка" измененных данных через механизмы регистрации изменений (планы обмена) или анализ логов транзакций, хотя это требует сложной ручной настройки.

Большинству организаций будет достаточно стандартного использования ibcmd в технологическое окно, так как скорость работы нового механизма в 2–3 раза выше, чем у связки с .dt.

Когда стоит использовать этот механизм?

Рассмотрим основные сценарии, в которых ibcmd infobase copy станет незаменимым помощником:

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

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

← На главную