При обслуживании файловых баз данных «1С:Предприятие 8» (особенно часто это происходит с конфигурацией «Бухгалтерия предприятия 3.0») администраторы и программисты регулярно сталкиваются с удивительным явлением. База данных, которая на диске занимала 20 Гб, после стандартной процедуры выгрузки в файл резервной копии .dt и последующей загрузки в новую чистую базу внезапно уменьшается до 5 Гб. При этом стандартное «Тестирование и исправление» (ТиИ) со сжатием таблиц до этого не давало практически никакого эффекта.
В этой статье мы подробно разберем внутреннее устройство файловой СУБД 1С формата .1CD, выясним физические причины такого резкого сжатия, проанализируем, не потерялись ли важные данные в процессе переноса, и рассмотрим потенциальные риски работы в «похудевшей» копии.
Чтобы понять, куда делись 15 Гб объема, нам необходимо заглянуть под капот файловой СУБД 1С. Файл 1Cv8.1CD имеет сложную внутреннюю структуру, состоящую из страниц фиксированного размера (обычно это 4 Кб или 8 Кб). Работа с этими страницами подчиняется строгим законам оптимизации быстродействия, из-за чего и возникает избыточный объем.
Рассмотрим подробнее три главные причины «раздувания» базы:
1Cv8.1CD они не стираются. Операционная система не умеет динамически уменьшать размер занятого файла на диске без полной перезаписи. Платформа 1С просто помечает освободившиеся страницы данных как «свободные» для последующей записи. При создании новых документов СУБД старается использовать эти пустые страницы, но из-за сильной фрагментации это удается далеко не всегда. В результате файл постоянно растет вширь, накапливая пустые пространства.Давайте проанализируем, почему выгрузка в .dt и последующая загрузка творят «чудеса» со сжатием. Дело в том, что файл .dt — это не побитовый образ базы данных. Это логический архив, который содержит только чистые данные таблиц и схему конфигурации. В него не попадают «пустые» страницы, временные таблицы транзакций и индексы.
Когда мы загружаем .dt обратно в пустую базу данных:
1Cv8.1CD создается на диске абсолютно заново с нулевого размера.Естественный страх любого бухгалтера или администратора при уменьшении базы в 4 раза — «мы потеряли документы!». Спешим вас успокоить: учетные данные (документы, справочники, проводки, регистры сведений и накопления) при этой процедуре пострадать не могут. Однако кое-что действительно удаляется навсегда.
Давайте разберем, что именно исчезло из новой базы:
.dt. Журнал регистрации физически хранится вне файла базы данных 1Cv8.1CD — он находится в каталоге 1Cv8Log в папке с базой данных. Если вы загрузили .dt в абсолютно новый пустой каталог, ваш журнал регистрации в новой информационной базе окажется абсолютно чистым. Вы потеряете историю того, кто и когда изменял документы в прошлом..dt мог их просто проигнорировать. С одной стороны, база очистилась от мусора. С другой стороны — эти скрытые ошибки теперь зафиксированы физически.Работать в оптимизированной базе размером 5 Гб можно и нужно. В большинстве случаев пользователи заметят лишь существенный прирост производительности из-за отсутствия фрагментации индексов. Тем не менее, перед запуском пользователей в новую базу необходимо выполнить ряд проверок, чтобы исключить редкие, но неприятные проблемы.
Проанализируем потенциальные риски и способы их минимизации:
Риск 1. Появление «битых» ссылок. Если при выгрузке платформе пришлось отсечь поврежденные объекты, в новой базе вы можете столкнуться с элементами, содержащими надпись <Объект не найден>. Обязательно запустите встроенную проверку логической целостности.
Риск 2. Расхождение бухгалтерских итогов. Из-за сбоев в индексах старой базы таблицы итогов могли рассчитываться некорректно. После перестроения таблиц в новой базе остатки по счетам могут теоретически измениться (стать правильными, но не совпадать со старыми отчетами).
Риск 3. База быстро вернется к прежнему объему. Помните, что сжатие — это временный эффект. Как только начнется активный документооборот, платформа снова зарезервирует свободные страницы под новые транзакции. База быстро подрастет на несколько гигабайт, и это абсолютно нормальный рабочий процесс файловой СУБД.
Выполняйте процедуру оптимизации по нашему проверенному алгоритму, чтобы гарантировать сохранность данных и истории работы пользователей:
Перед началом любых работ обязательно завершите все сеансы пользователей. Сделайте физическую копию всей папки с базой данных (скопируйте файл 1Cv8.1CD средствами Windows). Это ваша главная страховка.
Запустите Конфигуратор исходной базы, перейдите в меню Администрирование — Выгрузить информационную базу... и сохраните файл .dt. После этого создайте на диске новую пустую папку (например, C:\1C_Bases\BP_Optimized), добавьте ее в список баз и запустите ее Конфигуратор. Выберите пункт Администрирование — Загрузить информационную базу... и укажите сохраненный ранее файл .dt.
Чтобы не потерять историю действий пользователей, перенесите журнал регистрации вручную. Для этого перейдите в каталог старой базы, найдите там папку 1Cv8Log и скопируйте ее целиком в каталог новой оптимизированной базы с заменой файлов. Структура каталога должна выглядеть следующим образом:
C:\1C_Bases\BP_Optimized\
├── 1Cv8.1CD (новый сжатый файл базы данных)
└── 1Cv8Log\ (скопированная папка с историей действий)
├── 1Cv8.lgf
└── 1Cv8.lgp
Запустите новую базу в режиме Конфигуратора и выполните процедуру тестирования для выявления скрытых проблем. Перейдите в меню Администрирование — Тестирование и исправление.... Настройте параметры так, как показано ниже:
После успешного прохождения теста запустите обе базы (старую и новую) в пользовательском режиме предприятия и сформируйте Оборотно-сальдовую ведомость (ОСВ) за весь период работы до копейки. Сверьте показатели активов, обязательств и капитала. Если данные полностью идентичны — процедура оптимизации прошла успешно и новую базу можно отдавать в работу пользователям.
Выгрузка и загрузка через .dt таит в себе скрытую опасность: если база данных имеет физические повреждения таблиц на низком уровне, выгрузка может пройти успешно, а вот загрузить такой файл обратно платформа откажется из-за критической ошибки формата потока. В таком случае вы рискуете остаться с нерабочим архивом.
Чтобы дефрагментировать базу максимально безопасно, мы рекомендуем использовать альтернативный путь без промежуточного создания логического файла .dt:
chdbfl.exe (она находится в каталоге установленной платформы, например C:\Program Files\1cv8\8.3.XX.XXX\bin\). Укажите ваш файл 1Cv8.1CD, поставьте галочку "Исправлять обнаруженные ошибки" и выполните проверку. Это устранит физические повреждения страниц.