Каждый администратор и программист 1С рано или поздно сталкивается с критическими сбоями файловых баз данных. Одним из наиболее неприятных сюрпризов является внезапное появление ошибки «Файл базы данных поврежден» во время выполнения регламентных и ресурсоемких процедур. Чаще всего этот сбой застает пользователей врасплох в самый ответственный период — во время проведения процедуры «Закрытие месяца» или при формировании тяжелых отчетов, таких как Оборотно-сальдовая ведомость (ОСВ).
В этой статье мы подробно проанализируем, почему возникает данная проблема в конфигурации 1С:Комплексная автоматизация (и других решениях на платформе 1С:Предприятие 8.3), как локализовать неисправность, восстановить работоспособность базы данных и настроить систему так, чтобы предотвратить появление подобных ошибок в будущем.
Для начала разберем внутреннее устройство файловой базы данных 1С (формат 1Cv8.1CD). Исторически этот формат имеет страничную организацию. Каждая таблица внутри файла базы данных имеет строго определенный лимит на физический размер. В стандартном режиме работы размер одной таблицы или ее индекса не может превышать 4 Гб.
В современных типовых конфигурациях 1С, созданных на базе Библиотеки стандартных подсистем (БСП), по умолчанию включена подсистема оценки производительности по методологии APDEX. Данный механизм предназначен для непрерывной фиксации времени выполнения различных ключевых операций пользователей (проведение документов, открытие форм, расчет себестоимости). Все эти метрики записываются в независимый регистр сведений ЗамерыВремени.
При активной работе большого количества пользователей или при выполнении объемных регламентных операций этот регистр стремительно разрастается. Со временем объем данных в таблице регистра ЗамерыВремени (или в таблице ее индексов) приближается к критическому порогу в 4 Гб. Как только этот лимит превышен:
Tools-1CD) при этом сигнализируют об ошибке: «длина таблицы не кратна длине записи».Многие специалисты при возникновении ошибок целостности базы данных сразу запускают стандартную утилиту проверки chdbfl.exe. Однако в данном случае она оказывается бесполезной. Утилита chdbfl.exe предназначена для исправления логических и простых физических повреждений заголовков страниц и таблиц, но она не способна решить проблему переполнения максимального объема таблицы файловой базы. Она просто не умеет сжимать или усекать таблицы, размер которых вышел за технологические рамки СУБД 1С.
Если вы столкнулись с этой ошибкой, не паникуйте. Существует несколько эффективных способов вернуть базу к жизни в зависимости от степени повреждения файла. Перед началом любых манипуляций обязательно создайте резервную копию файла базы данных 1Cv8.1CD!
Если база данных еще запускается в пользовательском режиме или в режиме Конфигуратора, мы можем очистить переполненный регистр программно. Поскольку данные замеров производительности являются второстепенными и никак не влияют на финансовый, налоговый или складской учет, их полное удаление абсолютно безопасно для системы.
Для этого нам понадобится написать простую внешнюю обработку. Давайте рассмотрим пример кода, который быстро и эффективно очищает регистр сведений ЗамерыВремени:
// Создаем пустой набор записей для регистра сведений
НаборЗаписей = РегистрыСведений.ЗамерыВремени.СоздатьНаборЗаписей();
// Записываем пустой набор с флагом замещения существующих данных
НаборЗаписей.Записать(Истина);
Сообщить("Регистр 'Замеры времени' успешно очищен!");
Этот код мгновенно очищает все записи в регистре. Аналогичную операцию при необходимости следует провести для других вспомогательных регистров оценки производительности, таких как ЗамерыВремениТехнологические или ЗамерыКомментарииСтатистики.
Что делать, если база данных повреждена настолько, что вылетает с ошибкой сразу при попытке запуска в любом режиме? В таком случае нам поможет утилита изменения параметров базы данных CNVDBFL.EXE, которая поставляется вместе с платформой 1С.
Начиная с версии платформы 8.3.8, разработчики добавили возможность увеличивать размер страницы файла 1Cv8.1CD с дефолтных 4 Кб до 8, 16, 32 или 64 Кб. Увеличение размера страницы до 64 Кб автоматически поднимает лимит максимального размера одной таблицы до 6 Гб и более. Это позволит нам запустить базу и произвести очистку.
Выполним конвертацию по шагам:
C:\Program Files\1cv8\8.3.XX.XXXX\bin\).
cnvdbfl.exe -c -p 64k "C:\ПутьКВашейБазе\1Cv8.1CD"
После успешного завершения процесса конвертации физические ограничения таблицы будут расширены, база данных откроется без ошибок, и вы сможете запустить обработку очистки регистра из первого способа.
Этот метод является самым надежным, если файл базы данных имеет сложные повреждения структуры, мешающие работе утилит конвертации в файловом режиме. В промышленных СУБД (MS SQL Server, PostgreSQL, IBM DB2) нет жесткого ограничения в 4 Гб на одну таблицу.
Рассмотрим алгоритм действий:
.dt). Если выгрузка через Конфигуратор не проходит, выполните резервное копирование самого файла базы..dt. Серверная СУБД успешно примет данные, даже если размер регистра превышает 4 Гб, так как ограничения файлового формата здесь не действуют.ЗамерыВремени с помощью внешней обработки..dt и разверните ее в файловом режиме на рабочем компьютере.Важный нюанс! Простое удаление записей из регистра сведений очищает информацию только на логическом уровне. Физически место на жестком диске внутри файла 1Cv8.1CD останется зарезервированным, и размер файла базы данных не уменьшится. Чтобы вернуть неиспользуемое пространство операционной системе и физически уменьшить размер таблиц, необходимо выполнить процедуру сжатия.
Давайте разберем, как выполнить сжатие таблиц информационной базы:
После выполнения сжатия размер файла базы данных существенно уменьшится, производительность операций вырастет, а риск повторного повреждения структуры снизится.
Чтобы избежать повторного переполнения базы данных и возникновения ошибок при закрытии месяца в будущем, необходимо настроить механизмы автоматического обслуживания системы.
Проанализируем профилактические меры, которые следует внедрить:
Администрирование — Общие настройки — Оценка производительности и снимите флажок «Выполнять замеры производительности» (или аналогичный пункт настройки в вашей версии БСП).1С:Комплексная автоматизация 2 уже встроен штатный механизм автоматической очистки устаревших данных. Убедитесь, что регламентное задание «Очистка регистров замеров времени» включено в расписании и выполняется регулярно (например, раз в неделю во внерабочее время).Следуя этим простым рекомендациям, вы обеспечите стабильную и быструю работу вашей информационной базы, а процедура закрытия месяца больше не будет омрачена внезапными сбоями СУБД.