При работе с крупными информационными базами 1С администраторы и разработчики часто сталкиваются с ситуацией, когда файл выгрузки .dt имеет умеренный размер (например, 8 ГБ), но при попытке развернуть его в СУБД MS SQL Server объем базы вырастает до сотен гигабайт. Разберем ситуацию, когда нам необходимо получить только конфигурацию или ограниченный набор данных из такого архива, не занимая при этом все дисковое пространство сервера.
Прежде чем приступать к загрузке, проанализируем, почему файл .dt размером 8 ГБ превращается в 300 ГБ на SQL-сервере. Выясним основные причины:
.dt — это сжатый образ только самих данных таблиц. При загрузке в SQL платформа 1С заново пересоздает все индексы. В высоконагруженных базах индексы могут занимать до 60-70% от общего объема базы данных.ХранилищеЗначения упаковываются очень плотно..dt SQL-сервер фиксирует каждую операцию в логе транзакций. Если модель восстановления базы установлена как Full, файл лога может разрастись до невероятных размеров, часто превышающих саму базу.Если нашей основной задачей является получение структуры метаданных для разработки или исправления ошибок, нам совершенно не обязательно загружать все 300 ГБ данных. Рассмотрим наиболее корректный путь решения этой задачи, если у нас есть доступ к исходной базе:
Рассмотрим пошагово, как это сделать:
.cf. Его размер будет составлять от нескольких десятков до сотен мегабайт (в зависимости от прикладного решения).Таким образом, мы получаем идентичную по структуре базу, в которой полностью отсутствуют документы, справочники и записи регистров, что позволяет работать с кодом без лишних затрат ресурсов.
Если нам все же нужны данные (например, только справочники или документы за последний месяц), мы не можем использовать стандартную загрузку .dt. Вместо этого проанализируем возможность использования универсальных обработок.
Посмотрим на алгоритм действий:
.cf, как описано в первом методе.УниверсальныйОбменДаннымиXML.Справочник.Номенклатура, Справочник.Контрагенты).Важный момент: Помните о ссылочной целостности. Если вы переносите документ, но не переносите справочники, на которые он ссылается, в новой базе вы получите "Битые ссылки". Всегда включайте в выгрузку необходимые связанные данные.
Если стоит задача передать .dt стороннему специалисту, но файл слишком велик, мы можем порезать саму базу перед выгрузкой. Рассмотрим, какие объекты чаще всего создают лишний объем и как их почистить.
Проанализируем типичные "мусорные" таблицы:
ВерсииОбъектов. Если в базе включено версионирование, этот регистр может занимать львиную долю объема.Пример кода для программной очистки данных перед выгрузкой (выполнять только на копии!):
// Очистка регистра версионирования для уменьшения размера
Набор = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
Набор.Записать(); // Записываем пустой набор, стирая все данные
// Очистка истории изменений
НаборИзм = РегистрыСведений.ИсторияИзмененийОбъектов.СоздатьНаборЗаписей();
НаборИзм.Записать();
После удаления лишних данных обязательно выполним Тестирование и исправление с опцией Сжатие таблиц, а в SQL Management Studio выполним команду DBCC SHRINKDATABASE, чтобы физически уменьшить файлы на диске перед созданием .dt.
Если доступа к исходной базе нет, а развернуть 300 ГБ не на чем, можно воспользоваться недокументированными возможностями. Файл .dt технически является контейнером. Существуют сторонние утилиты (например, V8Reader), которые позволяют заглянуть внутрь .dt без его загрузки в 1С.
Выясним, как это работает:
Внутри архива .dt данные разбиты по таблицам. Конфигурация хранится в блоках, соответствующих таблице Config. С помощью специальных инструментов можно извлечь эти блоки и сохранить их как .cf. Это крайне эффективный метод, если вам нужно только посмотреть код, имея на руках лишь огромный файл выгрузки.
Если загрузка все же необходима, но места в обрез, проанализируем настройки СУБД:
.dt. Это предотвратит бесконечный рост файла .ldf.Подведем итог: штатного селектора "выбрать таблицы для загрузки" в 1С не существует. Однако, комбинируя методы извлечения конфигурации (CF), выборочного обмена данными (XML) и предварительной очистки базы, мы можем эффективно решать задачи даже при работе с терабайтными массивами данных на ограниченном оборудовании.