Работа с файловыми базами данных DBF в платформе 1С:Предприятие 7.7 рано или поздно приводит к ситуации, когда наиболее нагруженные таблицы (чаще всего это регистр партий — файлы RA*.DBF и RG*.DBF) приближаются к критическому объему. В этой статье мы подробно проанализируем риски преодоления порога в 2 ГБ, разберем причины лавинообразного роста файлов и рассмотрим проверенные практические методы решения этой проблемы.
Для начала разберем природу ограничений файлового формата DBF и СУБД CodeBase, на которой работает 1С 7.7. Многие системные администраторы ошибочно полагают, что использование различных патчей операционной системы решает все проблемы с размером базы. Это не так.
Существует несколько жестких лимитов, о которых нужно знать:
CodeBase Error -120, -70 или -110)..DBF вырастет до 2 ГБ. Индексный файл .CDX из-за большого количества измерений и реквизитов регистра растет гораздо быстрее. Превышение лимита в 2 ГБ индексным файлом приводит к точно такому же фатальному падению системы.BIN платформы, предназначены только для обхода проблем с блокировками файлов в многопользовательском режиме («ошибка сетевого гигабайта»). На физическое ограничение размера файла в 2 ГБ они никак не влияют.1Cv77.dat, если его размер (или размер итогового архива) превышает 2 ГБ. Выгрузка будет прерываться с ошибкой, либо сформирует «битый» архив.Давайте подробно рассмотрим четыре основных способа решения проблемы переполнения регистра.
Если свертка базы по каким-то причинам нежелательна, а переходить на SQL прямо сейчас нет возможности, мы можем существенно уменьшить физический размер таблиц за счет оптимизации метаданных.
Проанализируем структуру регистра партий в Конфигураторе. В типовых конфигурациях «Торговля и Склад» этот регистр часто перегружен избыточными измерениями и излишней разрядностью ресурсов:
Фирма.Склад.ЦенаПрод (Цена продажи) — его удаление даст колоссальную экономию места.Важно: При изменении структуры метаданных в распределенной информационной базе (УРБД) стандартная реструктуризация в Центральной Базе (ЦБ) породит огромный файл обмена для периферийных баз (ПБ), который может просто не загрузиться. Чтобы этого избежать, используем следующий алгоритм обхода:
1Cv7.md и 1Cv7.dd..md и .dd) в рабочей базе «на горячую».RA*.dbf и RG*.dbf приводим к новому формату с помощью любого стороннего DBF-редактора, поддерживающего групповые операции (либо программно), изменив длину соответствующих колонок.1Supdts.dbf перед возобновлением обменов, чтобы исключить передачу гигантского пакета реструктуризации. На периферийных базах операцию изменения структуры DBF и замены MD проводим аналогично вручную.Свертка базы — самый надежный способ радикально уменьшить размер таблиц движений (RA*). Однако при ее выполнении на больших базах администраторы часто совершают критическую ошибку, из-за которой база аварийно падает прямо во время процесса свертки.
Дело в том, что при удалении или пометке на удаление документов за прошлые периоды платформа начинает лавинообразно пересчитывать итоги по регистрам за каждый месяц. Из-за этого файлы итогов RG*.dbf начинают стремительно раздуваться и переполняют лимит в 2 ГБ еще до окончания работы обработки.
Разберем правильный, безопасный алгоритм свертки:
WRAP.ert), которая формирует документы ввода остатков на дату свертки (например, 01.01.2018) и удаляет старые документы движения. Процесс пройдет значительно быстрее и без риска переполнения файлов RG*.Дополнительно для уменьшения объема таблицы итогов RG*.dbf рекомендуется использовать специализированные внешние обработки (например, популярное решение «Шишки для мартышки»), которые находят и вычищают из таблиц итогов «нулевые остатки» — записи, по которым когда-то было движение, но текущий итог равен нулю. В штатном режиме 1С 7.7 продолжает тащить эти пустые строки из периода в период, раздувая базу.
Если бизнес-требования обязывают хранить всю историю за 5 и более лет без свертки, единственным долгосрочным решением является перенос базы на MS SQL Server.
Существует миф, что в SQL-версии 1С 7.7 таблицы движений также ограничены лимитом в 2 ГБ. Это технически неверно. В SQL-режиме хранением данных полностью управляет СУБД MS SQL, и размеры таблиц могут составлять сотни гигабайт. Лимит в 2 ГБ может коснуться только временных таблиц в системной базе tempdb при некорректно написанных прямых запросах, либо при полном исчерпании места на жестком диске сервера.
Разберем особенности миграции крупной DBF-базы на SQL:
unload_dat_fix.dll (или сторонние решения, такие как утилита configspy). Они позволяют выгружать данные напрямую в несжатый файл romix.dat без ограничений по размеру.BkEnd.dll), а также использовать модифицированный дистрибутив инсталлятора, совместимый с x64-системами.Если переход на полноценный SQL-сервер затруднен из-за отсутствия квалифицированного администратора базы данных или сложностей настройки, промежуточным решением может стать использование Advantage Database Server (ADS).
Этот программный продукт заменяет стандартный движок баз данных 1С (путем подмены библиотеки dbeng32.dll в каталоге программы) и переводит файловую базу в клиент-серверный режим работы с файлами формата FoxPro. Основное преимущество ADS в контексте нашей проблемы — расширение физического лимита размера DBF-файлов с 2 ГБ до 4 ГБ. Это позволит выиграть еще несколько лет стабильной работы информационной базы для подготовки к плановому переходу на современную платформу «1С:Предприятие 8».