Как загрузить конфигурацию и часть данных из тяжелого файла выгрузки .dt?

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

При работе с крупными информационными базами 1С администраторы и разработчики часто сталкиваются с ситуацией, когда файл выгрузки .dt имеет умеренный размер (например, 8 ГБ), но при попытке развернуть его в СУБД MS SQL Server объем базы вырастает до сотен гигабайт. Разберем ситуацию, когда нам необходимо получить только конфигурацию или ограниченный набор данных из такого архива, не занимая при этом все дисковое пространство сервера.

Анализируем причину разницы в объеме данных

Прежде чем приступать к загрузке, проанализируем, почему файл .dt размером 8 ГБ превращается в 300 ГБ на SQL-сервере. Выясним основные причины:

  1. Отсутствие индексов в архиве: Файл .dt — это сжатый образ только самих данных таблиц. При загрузке в SQL платформа 1С заново пересоздает все индексы. В высоконагруженных базах индексы могут занимать до 60-70% от общего объема базы данных.
  2. Сжатие данных: Платформа использует эффективные алгоритмы сжатия при выгрузке. Текстовые данные, пустые поля и избыточная информация в полях типа ХранилищеЗначения упаковываются очень плотно.
  3. Лог транзакций (LDF): При загрузке .dt SQL-сервер фиксирует каждую операцию в логе транзакций. Если модель восстановления базы установлена как Full, файл лога может разрастись до невероятных размеров, часто превышающих саму базу.

Метод 1: Получение конфигурации без данных (CF)

Если нашей основной задачей является получение структуры метаданных для разработки или исправления ошибок, нам совершенно не обязательно загружать все 300 ГБ данных. Рассмотрим наиболее корректный путь решения этой задачи, если у нас есть доступ к исходной базе:

Рассмотрим пошагово, как это сделать:

  1. Откроем исходную базу в режиме Конфигуратор.
  2. Перейдем в меню Конфигурация — Сохранить конфигурацию в файл....
  3. Сохраним файл с расширением .cf. Его размер будет составлять от нескольких десятков до сотен мегабайт (в зависимости от прикладного решения).
  4. Создадим новую пустую базу в SQL или в файловом варианте.
  5. В новой базе зайдем в Конфигуратор и выберем Конфигурация — Загрузить конфигурацию из файла....

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

Метод 2: Выборочный перенос данных через XML

Если нам все же нужны данные (например, только справочники или документы за последний месяц), мы не можем использовать стандартную загрузку .dt. Вместо этого проанализируем возможность использования универсальных обработок.

Посмотрим на алгоритм действий:

  1. Развернем пустую базу из файла .cf, как описано в первом методе.
  2. В исходной ("тяжелой") базе воспользуемся типовой обработкой УниверсальныйОбменДаннымиXML.
  3. Настроим правила выгрузки, выбрав только необходимые объекты (например, Справочник.Номенклатура, Справочник.Контрагенты).
  4. Установим период выгрузки для документов, чтобы не переносить историю за десятилетия.
  5. Загрузим полученный XML-файл в нашу новую "легкую" базу.

Важный момент: Помните о ссылочной целостности. Если вы переносите документ, но не переносите справочники, на которые он ссылается, в новой базе вы получите "Битые ссылки". Всегда включайте в выгрузку необходимые связанные данные.

Метод 3: Очистка базы перед созданием выгрузки

Если стоит задача передать .dt стороннему специалисту, но файл слишком велик, мы можем порезать саму базу перед выгрузкой. Рассмотрим, какие объекты чаще всего создают лишний объем и как их почистить.

Проанализируем типичные "мусорные" таблицы:

Пример кода для программной очистки данных перед выгрузкой (выполнять только на копии!):


// Очистка регистра версионирования для уменьшения размера
Набор = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
Набор.Записать(); // Записываем пустой набор, стирая все данные

// Очистка истории изменений
НаборИзм = РегистрыСведений.ИсторияИзмененийОбъектов.СоздатьНаборЗаписей();
НаборИзм.Записать();

После удаления лишних данных обязательно выполним Тестирование и исправление с опцией Сжатие таблиц, а в SQL Management Studio выполним команду DBCC SHRINKDATABASE, чтобы физически уменьшить файлы на диске перед созданием .dt.

Метод 4: Извлечение структуры напрямую из .dt (технический хак)

Если доступа к исходной базе нет, а развернуть 300 ГБ не на чем, можно воспользоваться недокументированными возможностями. Файл .dt технически является контейнером. Существуют сторонние утилиты (например, V8Reader), которые позволяют заглянуть внутрь .dt без его загрузки в 1С.

Выясним, как это работает:

Внутри архива .dt данные разбиты по таблицам. Конфигурация хранится в блоках, соответствующих таблице Config. С помощью специальных инструментов можно извлечь эти блоки и сохранить их как .cf. Это крайне эффективный метод, если вам нужно только посмотреть код, имея на руках лишь огромный файл выгрузки.

Работа с SQL при ограниченных ресурсах

Если загрузка все же необходима, но места в обрез, проанализируем настройки СУБД:

  1. Установите модель восстановления базы данных Simple перед загрузкой .dt. Это предотвратит бесконечный рост файла .ldf.
  2. Используйте разреженные файлы (sparse files) или сжатие тома на уровне файловой системы (NTFS), если данные в базе содержат много повторяющихся значений.
  3. Попробуйте использовать DDL триггеры на стороне SQL для блокировки создания определенных тяжелых таблиц (например, регистров накопления), хотя этот метод может привести к ошибке загрузки 1С и требует глубокого понимания структуры метаданных.

Подведем итог: штатного селектора "выбрать таблицы для загрузки" в 1С не существует. Однако, комбинируя методы извлечения конфигурации (CF), выборочного обмена данными (XML) и предварительной очистки базы, мы можем эффективно решать задачи даже при работе с терабайтными массивами данных на ограниченном оборудовании.

← На главную