При работе с крупными информационными базами 1С администраторы часто сталкиваются с критической ошибкой при попытке загрузки данных из файла выгрузки .dt в новую базу на SQL Server. Сообщение системы гласит: «Ошибка загрузки информационной базы. В информационную базу загружены не все данные». В подробностях ошибки СУБД обычно указывается, что не удалось выделить новую страницу для базы данных вследствие нехватки места на диске в файловой группе PRIMARY. Рассмотрим подробно причины возникновения этой ситуации и разберем по шагам способы её решения.
Проанализируем технические характеристики используемого программного обеспечения. Если вы используете бесплатную редакцию Microsoft SQL Server Express Edition (например, версии 2014), то основным камнем преткновения является жесткое ограничение на максимальный размер одной базы данных. Для версии SQL Server 2014 Express это ограничение составляет 10 Гб.
Важно понимать, что файл выгрузки .dt — это сильно сжатый архив данных. При импорте в SQL Server происходит следующее:
В среднем, объем данных в SQL Server увеличивается в 4–8 раз относительно размера исходного .dt. Таким образом, если ваш файл выгрузки весит 10 Гб, то после загрузки база может занять от 40 до 80 Гб дискового пространства. Как только размер файла данных .mdf достигает порога в 10 Гб, SQL Server Express блокирует дальнейшую запись, и загрузка 1С прерывается с ошибкой.
Иногда после неудачной загрузки пользователи пытаются запустить базу «как есть», что приводит к ошибкам в программном коде. Разберем пример из практики, когда при запуске возникает ошибка в модуле ПолныеПрава:
ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = Константы.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей.Получить();
Причина здесь кроется не в ошибке кода, а в целостности данных. Поскольку загрузка была прервана на середине, таблица констант либо не была заполнена, либо содержит некорректные значения. Метод Получить() возвращает неопределенное значение, которое нельзя присвоить параметру сеанса с типом Булево. Пытаться исправлять код в этой ситуации бесполезно — база данных находится в «битом» состоянии и требует полной переповторной загрузки в подходящую среду.
Если вам необходимо развернуть базу для целей разработки, тестирования или отладки, лучшим решением будет использование редакции SQL Server Developer Edition. Рассмотрим её преимущества:
Внимание: Использование Developer Edition в продуктивной (рабочей) среде является нарушением лицензионного соглашения Microsoft.
Если покупка полной лицензии Microsoft SQL Server Standard невозможна, а база уже переросла лимиты бесплатной версии, стоит рассмотреть переход на PostgreSQL. Это мощная объектно-реляционная СУБД с открытым исходным кодом, которая не имеет ограничений по размеру базы данных.
Для корректной работы с 1С рекомендуется использовать специальные сборки PostgreSQL (например, от компании Postgres Professional или адаптированные версии от самой фирмы 1С). Процесс миграции будет выглядеть так:
.dt файла в созданную базу.Если вы принципиально хотите остаться на SQL Express, вам придется уменьшить физический размер данных в исходной базе перед созданием .dt. Проанализируем, какие шаги можно предпринять:
_ConfigRepo (история хранилища конфигурации) и очистите журналы регистрации, если они хранятся в базе (хотя в новых версиях они обычно вынесены в файлы).Тестирование и исправление с включенной опцией «Сжатие таблиц». Это поможет избавиться от фрагментации и неиспользуемого пространства внутри файлов.Многие пользователи при ошибках SQL пытаются загрузить базу в файловый вариант (.1cd). Однако помните, что в платформе 1С (особенно старых версий типа 8.2) существует жесткое ограничение: размер одной внутренней таблицы не может превышать 4 Гб. Если ваш .dt весит 10 Гб, то с вероятностью 100% таблицы проводок или движений регистров превысят этот лимит, и загрузка также завершится аварией.
Подведем итог: Ошибка «загружены не все данные» при использовании SQL Express — это практически всегда сигнал о достижении лимита в 10 Гб. Решайте проблему сменой редакции СУБД или переходом на PostgreSQL, так как простое «удаление файлов на диске» не поможет обойти программное ограничение самого SQL Server.