Как восстановить базу 1С, если при обновлении закончилось место на диске и файл 1CD поврежден?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Обновление конфигурации 1С — ресурсоемкий процесс, при котором платформа выполняет реструктуризацию данных. Если во время этой процедуры на носителе заканчивается свободное место, запись аварийно прерывается. Штатная утилита проверки chdbfl.exe в таких ситуациях выдает фатальные ошибки: Поврежден заголовок файла базы данных или Повреждено содержимое внутреннего файла, заявляя, что восстановление невозможно. Разберем детально, почему это происходит и как восстановить работоспособность базы данных на уровне внутренней структуры файла 1Cv8.1CD.

Выясним причину повреждения: что происходит при нехватке места

Проанализируем техническую сторону сбоя. При реструктуризации платформе 1С требуется пространство, значительно превышающее исходный размер информационной базы:

  1. Лимит файловой системы: Если база размещена на съемном накопителе с файловой системой FAT32, максимальный размер одного файла не может превышать 4 ГБ. Даже при наличии свободного места файл 1Cv8.1CD не может преодолеть этот порог, и операционная система принудительно обрывает запись.
  2. Механизм реструктуризации: Платформа не изменяет исходные таблицы напрямую. Для каждого изменяемого объекта метаданных создается новая временная таблица с обновленной структурой. Затем данные построчно переносятся из старой таблицы в новую, после чего старая таблица помечается на удаление. В этот момент размер базы может временно возрастать в 2–3 раза.
  3. Появление дублирующих таблиц: Если питание отключилось или закончилось дисковое пространство, в базе одновременно остаются старые и недописанные новые таблицы. Признаком таких промежуточных таблиц являются системные суффиксы NG (New Generation) или OG (Old Generation) в их наименованиях.
  4. Рассинхронизация заголовков и карты блоков: Прерывание записи приводит к тому, что корневой объект базы данных, дерево свободных блоков (список free) и физический размер файла перестают соответствовать друг другу. Заголовок файла базы указывает на некорректные смещения, что делает невозможным стандартное открытие базы платформой.

Шаг 1. Восстановление сигнатуры и заголовка файла 1CD

Когда chdbfl.exe сообщает о повреждении заголовка, в первую очередь проверим первые страницы файла с помощью шестнадцатеричного редактора (Hex-редактора). Рассмотрим структуру начала файла базы:

  1. Откроем копию поврежденного файла 1Cv8.1CD в Hex-редакторе. Ни в коем случае не проводим манипуляции с оригиналом.
  2. Проверим первые 8 байт файла: они должны содержать сигнатуру 1CDBMSV8. Если в начале файла находятся нули или мусорные байты, заголовок поврежден.
  3. Сверим байты версии базы данных (смещение 0x08) и размер страницы (смещение 0x0C). Стандартный размер страницы базы составляет 4096 байт (0x00 0x10 0x00 0x00).
  4. Заполним поврежденный заголовок корректными байтами по образцу заведомо исправной пустой базы, созданной на той же версии платформы. Это позволит низкоуровневым утилитам и платформе 1С распознать контейнер базы и перейти к обработке внутренних таблиц.

Шаг 2. Исправление корневого объекта и удаление временных таблиц NG и OG

После того как файл начинает читаться специализированными утилитами (такими как Tool_1CD), необходимо привести схему данных к непротиворечивому состоянию. Разберем по шагам, как устранить последствия незавершенной реструктуризации:

  1. Открываем файл базы в утилите анализа структуры 1Cv8.1CD и переходим к списку таблиц.
  2. Находим таблицы с суффиксами _NG и _OG. Наличие таких таблиц говорит о том, что процесс переноса данных не был завершен.
  3. Если перенос данных в новую таблицу прервался на середине (таблица _NG заполнена частично), рабочей остается старая таблица (_OG или таблица с базовым именем). Удаляем ссылки на незавершенные таблицы _NG из корневого объекта.
  4. Возвращаем оригинальным таблицам их штатные имена, убирая технические суффиксы, и корректируем описание структуры в корневом объекте базы данных.

Шаг 3. Восстановление конфигурации: очистка CONFIGSAVE и замена CONFIG

В процессе обновления изменения метаданных сохраняются во временной системной таблице CONFIGSAVE, которая заменяет основную таблицу CONFIG только после успешного завершения всех этапов. При аварии база зависает в переходном состоянии.

  1. Проанализируем состояние системных таблиц. Если повреждена таблица CONFIGSAVE, удаляем ссылки на нее в корневом объекте, возвращая базу к конфигурации до начала обновления.
  2. Если повреждения затронули основную таблицу метаданных CONFIG, но конфигурация была типовой (без доработок), восстановим структуру метаданных из файла поставщика .cf соответствующего исходного релиза. Для этого таблицы конфигурации (файлы записей, индексов и BLOB) переносятся из чистой типовой базы в восстанавливаемую.

Шаг 4. Сжатие таблиц для очистки карты свободных блоков (Free)

При падении в момент реструктуризации список свободных блоков базы (free) гарантированно содержит недостоверные данные: блоки частично удаленных таблиц могли попасть в список свободных, а ссылки в корневом объекте не успели обновиться. Попытка вручную вычищать пересечения ссылок не требуется. Рассмотрим правильный алгоритм синхронизации пространства:

  1. Как только корневой объект скорректирован и база начинает успешно запускаться в режиме Конфигуратор, не выполняем никаких операций с данными в пользовательском режиме.
  2. Открываем меню Администрирование → Тестирование и исправление...
  3. Снимаем все флажки и оставляем включенной исключительно одну опцию: Сжатие таблиц информационной базы.
  4. Запускаем процесс. В ходе сжатия платформа 1С последовательно переносит все реальные данные в новый файл базы данных, заново перестраивая внутренние цепочки блоков. В результате файл списка свободных блоков полностью очищается, все зависшие и фантомные страницы удаляются физически.

Шаг 5. Очистка кэша и финальная проверка целостности

После физической сборки обновленного файла базы данных обязательно исключим влияние поврежденных временных файлов платформы на клиентском компьютере:

  1. Очищаем локальный кэш конфигураций. Для этого удаляем содержимое каталогов временных файлов пользователя:
    
    %LOCALAPPDATA%\1C\
    %APPDATA%\1C\
    
  2. Выполняем полный цикл проверки целостности информационной базы с помощью утилиты chdbfl.exe (теперь она должна завершаться без ошибок) или запустив пакетное тестирование через командную строку:
    
    1cv8.exe DESIGNER /F "C:\Bases\BaseName" /IBCheckAndRepair -ReIndex -LogIntegrity -RecalcTotals -ClearTableRefs
    
  3. После успешного входа в базу и контроля сохранности данных создаем полную резервную копию базы данных штатными средствами (выгрузка в .dt или копирование файла 1Cv8.1CD на надежный диск) и только после этого повторяем обновление конфигурации на диске с достаточным объемом свободного пространства.
← На главную