Нередко системные администраторы и разработчики сталкиваются с ситуацией, когда файловая информационная база 1С (файл 1CV8.1CD) перестает открываться как в режиме «1С:Предприятие», так и в конфигураторе, выдавая критическое сообщение: «Информационная база разрушена». При этом штатная утилита проверки chdbfl.exe рапортует об отсутствии каких-либо ошибок, а просмотр через низкоуровневые редакторы показывает, что физически таблицы с данными находятся на месте. Разберем детально, почему возникает такое поведение, как устроена внутренняя структура базы и какими путями можно восстановить работоспособность системы при отсутствии свежей резервной копии.
Проанализируем специфику работы штатной утилиты. Программа chdbfl.exe выполняет проверку исключительно на физическом уровне: она валидирует целостность страниц файла, заголовков таблиц, цепочек блоков размещения и B-деревьев индексов. Она не контролирует логическую целостность метаданных и корректность схемы реляционных связей (механизма SDBL).
Для корректного старта платформа 1С проверяет обязательное наличие и наполненность базового набора системных таблиц:
Config — основная конфигурация базы;ConfigSave — сохраненная, но еще не примененная конфигурация;Files — служебные системные файлы и настройки;Params — параметры информационной базы;_YearOffset — смещение дат;DBSchema — схема базы данных.Если таблица DBSchema отсутствует, полностью очищена (размер BLOB-данных равен нулю) или содержит некорректные данные при отсутствии страховочной таблицы DBSchemaOG, платформа прерывает запуск и сообщает о разрушении базы. Для chdbfl.exe пустая таблица DBSchema — это абсолютно валидный физический объект, поэтому утилита и не фиксирует повреждений.
Очистка данных в таблице DBSchema чаще всего происходит в результате аварийного обрыва процесса реструктуризации базы данных (при динамическом обновлении, сбое питания, нехватке оперативной памяти или разрыве связи с сетевой папкой, где лежит файл базы). Платформа инициирует сброс схемы для ее перезаписи, но процесс прерывается до фиксации новых метаданных.
Попытка просто скопировать таблицу DBSchema из другой рабочей базы (даже на аналогичном релизе конфигурации) практически никогда не приводит к успеху. В таблице DBSchema содержится внутреннее описание соответствия логических объектов метаданных их физическим таблицам в СУБД (имена вида _ReferenceX, _DocumentX, ConstX, типы полей, смещения и внутренние идентификаторы). Эти числовые суффиксы присваиваются объектам динамически по мере их создания непосредственно в конкретной информационной базе. Подмена схемы из другой базы неизбежно приводит к ошибкам вида «В схеме базы данных нет таблицы с именем ConstXXXXX», ошибкам формата потока или аварийному завершению платформы с формированием дампа памяти.
Прежде чем приступать к низкоуровневой реконструкции файла, проверим типовые места, где платформа могла оставить резервную информацию:
1Cv8tmp.1CD. Иногда он содержит неповрежденную исходную базу до момента применения обновления. Обязательно сохраните его копию.%TEMP% и %APPDATA% локальных пользователей, выполнявших запуск.Если повреждение произошло именно при обновлении, в базе могут остаться «зависшие» данные незавершенной реструктуризации. Проанализируем состояние базы через специализированные утилиты чтения формата 1CD (например, Tool_1CD):
1CV8.1CD. Все манипуляции выполняем только с дубликатом.CONFIGSAVE, DBChanges и DBSchemaOG.CONFIGSAVE содержит данные, платформа считает, что процесс реструктуризации не завершен, и пытается применить изменения поверх поврежденной схемы. В ряде ситуаций очистка таблицы CONFIGSAVE снимает флаг незавершенного обновления и дает возможность запустить конфигуратор для последующего тестирования.Когда таблица DBSchema утрачена полностью, а подмена схемы из старого архива вызывает ошибки несоответствия полей и таблиц (например, ошибки по константам ConstX), наиболее надежным путем является выгрузка таблиц данных напрямую в чистую рабочую базу.
Разберем последовательность действий:
Config не пострадала, из поврежденного файла 1CV8.1CD через низкоуровневые утилиты можно извлечь исходную конфигурацию базы данных (файл поставки .cf). Это гарантирует, что структура метаданных новой базы будет абсолютно идентична поврежденной, включая все добавленные реквизиты..cf. Выполним первый запуск в режиме предприятия, чтобы платформа корректно инициализировала системные константы и служебные параметры.1CD (например, Tool_1CD и библиотеки программного доступа к базам 1С), выполняем перенос физических таблиц прикладных данных из поврежденной базы в чистую. Системные таблицы (Config, ConfigSave, Params, Files, DBSchema) переносить нельзя — переносятся только таблицы справочников, документов, регистров и периодических сведений.Реструктуризация таблиц информационной базы и Проверка ссылочной целостности.Если для восстановления применяется вариант с подгрузкой схемы из предыдущего архива, неизбежно возникнут ошибки отсутствия новых физических таблиц (например, добавленной константы или регистра). Выясним, как их локализовать:
EXCP и фильтрацией по контексту DBV8DBEng или SDBL. Это позволяет увидеть точное имя системного объекта, на чтении которого поток прерывается аварийно.Конфигурация -> Обновить конфигурацию базы данных.