Обновление конфигурации 1С — ресурсоемкий процесс, при котором платформа выполняет реструктуризацию данных. Если во время этой процедуры на носителе заканчивается свободное место, запись аварийно прерывается. Штатная утилита проверки chdbfl.exe в таких ситуациях выдает фатальные ошибки: Поврежден заголовок файла базы данных или Повреждено содержимое внутреннего файла, заявляя, что восстановление невозможно. Разберем детально, почему это происходит и как восстановить работоспособность базы данных на уровне внутренней структуры файла 1Cv8.1CD.
Проанализируем техническую сторону сбоя. При реструктуризации платформе 1С требуется пространство, значительно превышающее исходный размер информационной базы:
1Cv8.1CD не может преодолеть этот порог, и операционная система принудительно обрывает запись.free) и физический размер файла перестают соответствовать друг другу. Заголовок файла базы указывает на некорректные смещения, что делает невозможным стандартное открытие базы платформой.Когда chdbfl.exe сообщает о повреждении заголовка, в первую очередь проверим первые страницы файла с помощью шестнадцатеричного редактора (Hex-редактора). Рассмотрим структуру начала файла базы:
1Cv8.1CD в Hex-редакторе. Ни в коем случае не проводим манипуляции с оригиналом.1CDBMSV8. Если в начале файла находятся нули или мусорные байты, заголовок поврежден.0x08) и размер страницы (смещение 0x0C). Стандартный размер страницы базы составляет 4096 байт (0x00 0x10 0x00 0x00).После того как файл начинает читаться специализированными утилитами (такими как Tool_1CD), необходимо привести схему данных к непротиворечивому состоянию. Разберем по шагам, как устранить последствия незавершенной реструктуризации:
1Cv8.1CD и переходим к списку таблиц._NG и _OG. Наличие таких таблиц говорит о том, что процесс переноса данных не был завершен._NG заполнена частично), рабочей остается старая таблица (_OG или таблица с базовым именем). Удаляем ссылки на незавершенные таблицы _NG из корневого объекта.В процессе обновления изменения метаданных сохраняются во временной системной таблице CONFIGSAVE, которая заменяет основную таблицу CONFIG только после успешного завершения всех этапов. При аварии база зависает в переходном состоянии.
CONFIGSAVE, удаляем ссылки на нее в корневом объекте, возвращая базу к конфигурации до начала обновления.CONFIG, но конфигурация была типовой (без доработок), восстановим структуру метаданных из файла поставщика .cf соответствующего исходного релиза. Для этого таблицы конфигурации (файлы записей, индексов и BLOB) переносятся из чистой типовой базы в восстанавливаемую.При падении в момент реструктуризации список свободных блоков базы (free) гарантированно содержит недостоверные данные: блоки частично удаленных таблиц могли попасть в список свободных, а ссылки в корневом объекте не успели обновиться. Попытка вручную вычищать пересечения ссылок не требуется. Рассмотрим правильный алгоритм синхронизации пространства:
После физической сборки обновленного файла базы данных обязательно исключим влияние поврежденных временных файлов платформы на клиентском компьютере:
%LOCALAPPDATA%\1C\
%APPDATA%\1C\
chdbfl.exe (теперь она должна завершаться без ошибок) или запустив пакетное тестирование через командную строку:
1cv8.exe DESIGNER /F "C:\Bases\BaseName" /IBCheckAndRepair -ReIndex -LogIntegrity -RecalcTotals -ClearTableRefs
.dt или копирование файла 1Cv8.1CD на надежный диск) и только после этого повторяем обновление конфигурации на диске с достаточным объемом свободного пространства.