Как исправить ошибку «Превышен максимальный размер внутреннего файла» при создании начального образа РИБ в 1С

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

При работе с распределенными информационными базами (РИБ) системные администраторы и программисты часто сталкиваются с ситуацией, когда центральная база успешно функционирует на MS SQL Server или PostgreSQL, но при попытке создать начальный образ для периферийного узла система выдает ошибку: «Превышен максимальный размер внутреннего файла». Проблема кажется парадоксальной, ведь в SQL-версии нет жестких лимитов на размер таблиц в 4 Гб. Однако корень проблемы кроется в том, что по умолчанию 1С пытается сформировать начальный образ в виде файловой базы .1CD, которая наследует все ограничения старого формата данных.

В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать структуру хранения данных и какими способами можно обойти лимит в 4 Гб, сохранив работоспособность системы.

Выясним причину: почему SQL-база выдает «файловую» ошибку?

Разберем ситуацию: ваша база 1С:Управление нашей фирмой весит 30 Гб и работает в клиент-серверном режиме. Когда вы запускаете мастер создания начального образа РИБ, платформа начинает выгружать данные. Если выбран вариант создания образа «В файловом варианте», система генерирует файл 1Cv8.1CD. В этом формате любая таблица (данные или индексы) по умолчанию не может превышать 4 Гб из-за фиксированного размера страницы данных в 8 Кб.

Даже если вы удалили документы за несколько лет, физический размер таблиц в файловой базе может не уменьшиться автоматически. Рассмотрим, почему стандартные действия (ТИИ, Сжатие, Выгрузка в DT) часто не приносят результата в этом случае.

Шаг 1. Анализ структуры хранения и поиск «тяжелых» таблиц

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

Выполним следующий код в консоли кода или обработке:


ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
    Если СтрокаТаблицы.ИмяТаблицыХранения = "Имя_Проблемной_Таблицы_Из_СУБД" Тогда
        Сообщить("Объект метаданных: " + СтрокаТаблицы.ИмяТаблицы);
    КонецЕсли;
КонецЦикла;

Проанализируем ситуацию, описанную в теме: автор нашел, что документы События (электронные письма) занимают 6 Гб. Важно понимать, что в 1С данные могут храниться не только в основной таблице документа _DocumentXXX, но и в таблицах дополнительных сведений, табличных частях или регистрах сведений, связанных с этими объектами.

Шаг 2. Использование утилиты CNVDBFL.EXE для расширения лимитов

Если нам критически важно оставить периферийный узел в файловом варианте, мы можем воспользоваться штатной возможностью платформы 8.3.8 и выше — изменением размера страницы данных. Увеличение размера страницы с 8 Кб до 64 Кб позволяет расширить лимит одной таблицы до 32–64 Гб.

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

  1. Найдем в папке bin установленной платформы утилиту cnvdbfl.exe.
  2. Создадим пустую файловую базу данных.
  3. Запустим утилиту, выберем файл новой базы и в поле «Размер страницы» установим значение 64 Кб (65536 байт).
  4. Теперь, при создании начального образа, нам нужно будет «подсунуть» этот настроенный файл системе или загрузить данные в него. Однако стандартный мастер РИБ всегда создает новый файл с параметрами по умолчанию. Поэтому данный метод лучше всего работает при ручном формировании образа или конвертации уже созданного (если он успел создаться до возникновения ошибки).

Шаг 3. Создание начального образа на сервере (SQL-вариант)

Это самый надежный и правильный способ для баз объемом более 20-30 Гб. Вместо того чтобы бороться с ограничениями файлового формата, развернем периферийный узел также на SQL-сервере. Проанализируем, как это сделать:

  1. В помощнике создания начального образа выберем вариант размещения «На сервере 1С:Предприятия».
  2. Укажем параметры подключения к новому (пустому) экземпляру базы на SQL-сервере.
  3. В этом случае 1С будет передавать данные напрямую из одной SQL-базы в другую, минуя промежуточный формат .1CD. Ограничение в 4 Гб исчезнет.

Совет: Если бюджет ограничен, для периферийных узлов с небольшим количеством пользователей (до 5) можно использовать лицензию «1С:Предприятие 8.3. Сервер МИНИ», которая стоит значительно дешевле полнофункционального сервера.

Шаг 4. Очистка скрытых данных: История данных и Версионирование

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

Воспользуемся встроенными механизмами платформы для удаления устаревших версий:


// Пример программной очистки истории данных для конкретного типа объектов
ИсторияДанных.Очистить(Метаданные.Документы.Событие, ДатаОчистки);

После программной очистки обязательно выполним «Тестирование и исправление» (ТИИ) с включенным режимом «Сжатие таблиц». В SQL-варианте также крайне полезно выполнить операцию Shrink (сжатие) базы данных и лога транзакций через SQL Management Studio, чтобы освободить место на диске и обновить статистику.

Шаг 5. Вынос файлов в тома хранения

Документы События в 1С:УНФ тяжелые прежде всего из-за вложений (сканы документов, PDF-счета). Если эти файлы хранятся непосредственно в базе данных, они раздувают таблицы до гигантских размеров. Разберем, как это исправить:

  1. Перейдем в раздел «Администрирование» — «Настройки работы с файлами».
  2. Установим флаг «Хранить файлы в томах на диске».
  3. Создадим новый том (укажем путь к сетевой папке или локальному диску сервера).
  4. Запустим стандартную обработку «Перенос файлов в тома».

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

Резюме и рекомендации

Проанализировав проблему, мы пришли к выводу, что ошибка вызвана попыткой уместить 6 Гб данных одной таблицы в 4 Гб лимит файлового формата 1CD.

Наши действия должны быть следующими:

  1. Если периферийный узел будет работать с большим объемом данных, переводим его на SQL (используем Сервер МИНИ).
  2. Если нужно остаться на файловой базе — увеличиваем размер страницы до 64 Кб через cnvdbfl.exe.
  3. Обязательно проверяем настройки версионирования и хранения файлов, вынося тяжелые вложения в тома.
  4. При удалении документов не забываем про полное удаление помеченных объектов и последующее сжатие базы, иначе место в файле .1CD не высвободится для новых записей.

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

← На главную