При работе с распределенными информационными базами (РИБ) системные администраторы и программисты часто сталкиваются с ситуацией, когда центральная база успешно функционирует на MS SQL Server или PostgreSQL, но при попытке создать начальный образ для периферийного узла система выдает ошибку: «Превышен максимальный размер внутреннего файла». Проблема кажется парадоксальной, ведь в SQL-версии нет жестких лимитов на размер таблиц в 4 Гб. Однако корень проблемы кроется в том, что по умолчанию 1С пытается сформировать начальный образ в виде файловой базы .1CD, которая наследует все ограничения старого формата данных.
В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать структуру хранения данных и какими способами можно обойти лимит в 4 Гб, сохранив работоспособность системы.
Разберем ситуацию: ваша база 1С:Управление нашей фирмой весит 30 Гб и работает в клиент-серверном режиме. Когда вы запускаете мастер создания начального образа РИБ, платформа начинает выгружать данные. Если выбран вариант создания образа «В файловом варианте», система генерирует файл 1Cv8.1CD. В этом формате любая таблица (данные или индексы) по умолчанию не может превышать 4 Гб из-за фиксированного размера страницы данных в 8 Кб.
Даже если вы удалили документы за несколько лет, физический размер таблиц в файловой базе может не уменьшиться автоматически. Рассмотрим, почему стандартные действия (ТИИ, Сжатие, Выгрузка в DT) часто не приносят результата в этом случае.
Прежде чем что-то удалять, нам необходимо точно определить, какая именно таблица вызывает сбой. Зачастую это не сами документы, а их вложения или история изменений. Для этого проанализируем структуру базы данных. Мы можем воспользоваться программным методом для сопоставления имен таблиц SQL с объектами метаданных 1С.
Выполним следующий код в консоли кода или обработке:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
Если СтрокаТаблицы.ИмяТаблицыХранения = "Имя_Проблемной_Таблицы_Из_СУБД" Тогда
Сообщить("Объект метаданных: " + СтрокаТаблицы.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
Проанализируем ситуацию, описанную в теме: автор нашел, что документы События (электронные письма) занимают 6 Гб. Важно понимать, что в 1С данные могут храниться не только в основной таблице документа _DocumentXXX, но и в таблицах дополнительных сведений, табличных частях или регистрах сведений, связанных с этими объектами.
Если нам критически важно оставить периферийный узел в файловом варианте, мы можем воспользоваться штатной возможностью платформы 8.3.8 и выше — изменением размера страницы данных. Увеличение размера страницы с 8 Кб до 64 Кб позволяет расширить лимит одной таблицы до 32–64 Гб.
Рассмотрим алгоритм действий:
bin установленной платформы утилиту cnvdbfl.exe.Это самый надежный и правильный способ для баз объемом более 20-30 Гб. Вместо того чтобы бороться с ограничениями файлового формата, развернем периферийный узел также на SQL-сервере. Проанализируем, как это сделать:
.1CD. Ограничение в 4 Гб исчезнет.Совет: Если бюджет ограничен, для периферийных узлов с небольшим количеством пользователей (до 5) можно использовать лицензию «1С:Предприятие 8.3. Сервер МИНИ», которая стоит значительно дешевле полнофункционального сервера.
Часто удаление самих документов События не помогает, потому что данные остаются в системных таблицах версионирования. Если в вашей конфигурации включена «История данных», то каждое изменение письма сохраняется. Посмотрим на метод очистки этих данных:
Воспользуемся встроенными механизмами платформы для удаления устаревших версий:
// Пример программной очистки истории данных для конкретного типа объектов
ИсторияДанных.Очистить(Метаданные.Документы.Событие, ДатаОчистки);
После программной очистки обязательно выполним «Тестирование и исправление» (ТИИ) с включенным режимом «Сжатие таблиц». В SQL-варианте также крайне полезно выполнить операцию Shrink (сжатие) базы данных и лога транзакций через SQL Management Studio, чтобы освободить место на диске и обновить статистику.
Документы События в 1С:УНФ тяжелые прежде всего из-за вложений (сканы документов, PDF-счета). Если эти файлы хранятся непосредственно в базе данных, они раздувают таблицы до гигантских размеров. Разберем, как это исправить:
После этой процедуры двоичные данные будут удалены из базы, а в таблицах останутся только ссылки на файлы. Это радикально уменьшит размер базы и позволит избежать ошибки «Превышен максимальный размер внутреннего файла» при создании образа.
Проанализировав проблему, мы пришли к выводу, что ошибка вызвана попыткой уместить 6 Гб данных одной таблицы в 4 Гб лимит файлового формата 1CD.
Наши действия должны быть следующими:
cnvdbfl.exe..1CD не высвободится для новых записей.Следуя этим шагам, мы сможем успешно создать распределенную сеть узлов даже для очень крупных баз данных.