Файл базы данных поврежден. Повреждено содержимое внутреннего файла "Описание базы данных"
Михаил MBX"Не всё пропало" или Методика восстановления файловой базы, когда CHDBFL разводит руками
Привет!
Предыстория
В конце октября 2022 поступила задача на восстановление файловой базы, которая была разрушена в процессе обновления конфигурации ИБ с долгой реструктуризацией, прерванной аварийно... :/

CHDBFL после быстрой неуспешной попытки, сказал что "на этом его полномочия всё"

Танцы под музыку
1. Tool_1CD при открытии повреждённой базы выдал кучу ошибок
(эта утилита и другие из следующих шагов подробно рассмотрены ТУТ)

2. restoration-base-1c8 у меня не взлетел, "Некорректная работа компоненты с памятью"

Так и не понял в чём причина, ни обойти, ни решить проблему не удалось
3. Попробовал вариацию на базе 1CDLib , была надежда на кнопку "Исправить заголовок БД" , но эффекта не дало
4. Решил вернуться к базовому исходному оригинальному варианту 1CDLib - и ЭТО ДАЛО СВОИ ПЛОДЫ!
Методика по шагам ниже
Требования
Для восстановления повреждённой базы обязательно понадобится рабочая копия повреждённой базы, этой или какой-то похожей. В моём случае была повреждена филиальная база сети РИБ, а для восстановления была использована копия другого узла РИБ месячной давности. То есть копия нужна, не обязательно прям от этой базы, но чем "ближе" она будет по дате и чем меньше будет конфигурационных структурных изменений по сравнению с разрушенной базой - тем выше процент восстановленных данных.
Предполагаю, что возможно подойдёт и пустая база в качестве донора, в которую предварительно был загружен CF от разрушенной базы (его можно получить, например, из Tool_1CD либо опять же из какой-то похожей базы, но скорей всего в этом случае процент восстановленных данных будет минимальный)
Отказ от ответственности
Операция рискованная, выполняем только в крайнем случае, когда никаких других вариантов не осталось, делаем всё на свой страх и риск, автор статьи описывает исключительно свой реальный опыт, но ничего никому не рекомендует и не отвечает ни за какие последствия
По порядку
- Убеждаемся, что есть архив убитой базы. Сделать его лучше еще ДО запуска CHDBFL
- Готовим базы: в один каталог кладём "убитого" пациента, в другой разворачиваем рабочую копию
- Запускаем 1С (любую базу, можно вообще какую-то третью)
Выгружаем с помощью 1CDLib всё из битой, но ценной базы (шаги 1 и 2)

В каталоге с базой появляется подкаталог с данными повреждённой базы, выгруженными во вложенные подкаталоги-файлы

4. Аналогично выгружаем всё из базы донора (тоже пока только шаги 1 и 2)
5. Далее здесь же для базы-донора выполняем шаг 3, очищаем всё в работающем архиве, куда дальше будем накатывать нужные данные из битой базы
6. Теперь не закрывая обработку делаем важный шаг в Проводнике: Из каталога убитой базы переносим (обязательно с заменой) в каталог донора, всё кроме служебных таблиц, то есть выделяем для копирования/переноса каталоги с таблицами, которые начинаются с подчёркивания, остальные не надо. В моём случае я переносил всё, кроме этих (см скриншот)

7. Обязательно с заменой вставляем вырезанное в подкаталог базы-донора

8. Возвращаемся в 1С и дожидаемся завершения удаления таблиц из базы-донора, то есть ждём завершения пункта 5 данного списка
9. Когда каталоги объединены и данные из донора удалятся - нажимаем "Шаг 4. Восстановить" в том же сеансе
10. Если всё сделали правильно - загрузка в базу должна пройти без ошибок
11. После этого у меня открылся конфигуратор без ошибок, даже CHDBFL запускать не пришлось
12. Но Предприятие не запустилось, вылезла ошибка типа "Не найдено поле Т1._Fld1234"
13. Здесь мне помогло выгрузить базу в DT, и потом загрузить обратно, надеюсь, и у вас так же пройдёт
14. Вауля, открывается и конфигуратор, и "предприятие", нужные для нас данные оказались на месте, база снова в строю, проблем пока (уже месяц прошёл) не замечено! База работает, обновляется с реструктуризацией и тд
Благодарности
Авторам всех перечисленных разработок, в особенности 1CDLib как инструменту, который таки сработал и спас наши данные!
А также светлая память Валерию "awa" Агееву , без которого, возможно, и не было бы всех этих методов восстановления...
Спасибо за прочтение! Всем мира! Здоровья вам и вашим базам! <3
2022-11-19