Восстановление файловой базы данных

1. kushnarenkoa 28.03.19 11:34 Сейчас в теме
Здравствуйте. Следующая проблема:

База данных 1С, запускается без ошибок, но при входе в список документов Реализации вылетает с ошибкой, в тексте которой особо ничего полезного не дано.
Тестирование из конфигуратора дает такую же ошибку. Тестирование chdbfl.exe дает это (без галочки "исправлять"):

Повреждена таблица размещения внутреннего файла <Данные таблицы '_DOCUMENT233'>
Повреждена таблица размещения внутреннего файла <Данные неограниченной длины таблицы '_COMMONSETTINGS'>
Повреждены данные таблицы '_DOCUMENT254'

И это (с галочкой "исправлять"):

Повреждена таблица размещения внутреннего файла <Данные таблицы '_DOCUMENT233'>
Повреждена таблица размещения внутреннего файла <Данные неограниченной длины таблицы '_COMMONSETTINGS'>
Повреждены данные таблицы '_DOCUMENT233'. Восстановлено 3317 из 3466 записей.
Повреждены данные таблицы '_DOCUMENT254'. Восстановлено 3470 из 3471 записей.

После этого база прекрасно работает, но в ней исчезает около сотни документов Реализации.

В Tool1CD в таблице _DOCUMENT254 (это счет-фактуры выданные) последние две записи кривые, с непонятными данными. В таблице _DOCUMENT233 Тоже последние записи кривые, при этом все усложняется тем, что они не хотят нормально читаться: выходит сообщение "Попытка чтения блока за пределами файла". При этом адрес смещения у этих последних строк вообще какой-то непонятный. Такого нет, если смотреть через HEX-редактор.

Возникают следующие гипотезы:
1. Нужно удалить некорректные строки в таблицах
2. Возможно, в заголовке таблицы Реализации указан не верный размер самой таблицы с данными. Возможно, нужно его поправить.

Но вопрос как редактировать БД? Tool1CD и прочие инструменты не работают с базой, так как она в формате 8.3.8. Конвертировать ее не получается - она выдает ошибку. Остается только HEX, но я совершенно не знаю как в нем искать эти самые строки. Понимаю, что где-то есть таблица размещения, где должны быть адреса, но я не смог ее найти.

Опыта в восстановлении у меня совершенно нет, но я честно двое суток нон-стоп пытался разобраться самостоятельно, но, кажется, придется прибегнуть к помощи сообщества.
По теме из базы знаний
Найденные решения
33. vadim1011985 100 31.03.19 19:27 Сейчас в теме
Проблему удалось решить !!
Проблема была в том , что слетел номер страницы таблицы размещения Данная таблица описывалась полной структурой размещения (подробнее можно почитать тут) . Таблица данных имела 2 массив страниц. Ссылка на первый массив была корректной , а вот на второй была неверна и указывала на пустые записи .

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

В результате при прогонке через chdbfl теперь теряется только одна запись
Прикрепленные файлы:
kushnarenkoa; acanta; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. user856012 13 28.03.19 12:28 Сейчас в теме
(1)
После этого база прекрасно работает, но в ней исчезает около сотни документов Реализации.
А если попробовать из битой базы выгрузить эти документы какой-нибудь обработкой? Например, в XML или XLS. А после лечения - загрузить обратно.
15. kushnarenkoa 28.03.19 12:31 Сейчас в теме
(14) Пробовал. Только данные, которые мне нужны - битые. Они отображаются не верно. И нет уверенности, что они не утеряны безвозвратно. Но надеюсь, что проблема только с неправильными размерами.
16. vadim1011985 100 28.03.19 12:44 Сейчас в теме
(15)

1) сделайте 2 копии вашей базы
2) одну из копий прогоните через chdbfl с исправлением
3) откройте 2 файла в HEX и сравните что поменялось (там есть функция сравнить файлы )

после этого надо попытаться выяснить где идет косяк

Еще вариант можно попробовать перейти по смещению последней нормальной записи и посмотреть что идет после этой записи (если мы знаем размер одной записи можно вычислить начало и конец следующих записей)
kushnarenkoa; acanta; +2 Ответить
17. kushnarenkoa 28.03.19 13:11 Сейчас в теме
(16)
после этого надо попытаться выяснить где идет косяк
Да, спасибо, я так уже пробовал. Разница в файлах огромная. Там, видимо, происходит реиндексация и все очень сильно разнится.


(16)
Еще вариант можно попробовать перейти по смещению последней нормальной записи

Так тоже пробовал. Но разве следующая запись в файле идет сразу после предыдущей? Они ведь могут быть вообще разбросаны по базе.
18. vadim1011985 100 28.03.19 13:16 Сейчас в теме
(17) надо по смещениям ориентироваться , возможно что они немного разбросаны , но не думаю что очень сильно, опять же в Tools 1c можно отследить как идут записи (не считая конечно последних битых)
19. kushnarenkoa 28.03.19 13:18 Сейчас в теме
(18) Хорошо, даже если они идут последовательно, что это дает? Допустим, эти данные там есть. Мне их удалять ведь не нужно, мне надо их восстановить
20. vadim1011985 100 28.03.19 13:20 Сейчас в теме
(19) можно сравнить их и понять в чем причина может там будет явный косяк х.з. что
21. kushnarenkoa 28.03.19 13:20 Сейчас в теме
(20) а как понять, что это именно те данные, которые нужны? Как я пойму, что это следующая запись в таблце данных?
22. vadim1011985 100 28.03.19 13:36 Сейчас в теме
(21) в описании tools 1cd смотрим размер записи в данном примере она равняется 185 - переводим в 16- ричную систему получаем B9 (см . описание таблицы)

чтобы получить начало послед. . записи прибавим B9 к смещению к предпоследней - можешь проверить ))) AE01ABF6 + B9 = AE01ACAF (см. расчет записи)

столбец file offset в tools 1cd отсортирован по возрастанию
Прикрепленные файлы:
24. kushnarenkoa 28.03.19 13:56 Сейчас в теме
(22) Вот это было очень полезно. Спасибо за наводку, отпишусь
25. vadim1011985 100 28.03.19 14:21 Сейчас в теме
(24) Есть еще один лайф хак , правда не знаю будет ли он работоспособный в вашем случае

Tools 1cd для 8.3.8 не совсем не работоспособный ,выбрать нужную таблицу и через меню файл можно выгрузить файлы с данными (decr, data,index,blob) и открыть в Hex так вы получить все записи таблицы с данными , по которым можно искать в основной базе
Прикрепленные файлы:
28. kushnarenkoa 28.03.19 16:43 Сейчас в теме
(25) Сохранил таблицу data, открыл в HEX. Я правильно понимаю, что в ней данные именно по порядку должны идти? И это по сути те же самые данные, которые мы можем увидеть в HEX самой базы данных?
30. vadim1011985 100 28.03.19 16:46 Сейчас в теме
(28) там идут все записи этой таблицы

Порядок - нужно смотреть - может и нарушен .

И это по сути те же самые данные, которые мы можем увидеть в HEX самой базы данных


Да , я проверил у себя , выделял полностью данные записи и искал в базе - записи находились
26. kushnarenkoa 28.03.19 16:40 Сейчас в теме
(22) все-таки не подряд идут записи...
27. vadim1011985 100 28.03.19 16:42 Сейчас в теме
(26) выложите вашу базу - гляну
29. kushnarenkoa 28.03.19 16:45 Сейчас в теме
31. vadim1011985 100 28.03.19 16:46 Сейчас в теме
(29) можно тут , можно на почту - vadim1985@yandex.ru
32. kushnarenkoa 28.03.19 16:58 Сейчас в теме
23. vadim1011985 100 28.03.19 13:45 Сейчас в теме
(21) сравните записи , может увидите отличие
2. YannikAlx 43 28.03.19 11:47 Сейчас в теме
Лучше бы развивали опыт Обязательного ежедневного создания архива базы...
Тогда опыт по восстановлению испорченной базы в принципе не нужен!
4. kushnarenkoa 28.03.19 11:57 Сейчас в теме
(2) а есть что по делу сказать? я не занимался администрированием этой базы
3. SaschaL 28.03.19 11:56 Сейчас в теме
а старых архивов нет! Просто проще взять старый архив и внести недостающие документы
6. kushnarenkoa 28.03.19 11:58 Сейчас в теме
(3) нет, старых архивов нет
5. SaschaL 28.03.19 11:57 Сейчас в теме
Tool1CD - данная программа уже дано не дает возможности редактировать файловые базы, она если не ошибаюсь даже уже не поддерживается и следовательно не дорабатывается, а структура базы меняется от релиза к релизу.
7. kushnarenkoa 28.03.19 11:59 Сейчас в теме
(5) об этом я вкратце уже сказал в самом посте. Если бы базу можно было сконвертировать, она бы нормально отработала
8. SaschaL 28.03.19 12:01 Сейчас в теме
chdbfl.exe от самой 1С не пробовали попробуйте запустить с галочкой исправлять.

А в конфигураторе вообще есть возможность запуститься?
9. kushnarenkoa 28.03.19 12:02 Сейчас в теме
(8) прочтите пост, пожалуйста, там все это написано
10. SaschaL 28.03.19 12:06 Сейчас в теме
НЕХ редактором мне кажется нереально найти битые строки.
Если сделать тестирование и исправление стандартными средствами то думаю он просто почистит таблицы базы.
Хотя как вариант можно попробовать это сделать, вдруг он битые ссылки на документы почистит
11. acanta 28.03.19 12:09 Сейчас в теме
(10) битые ссылки можно восстановить обработкой, а при тестировании не заказывать очистку ссылок.
13. kushnarenkoa 28.03.19 12:14 Сейчас в теме
(11) тестирование из конфигуратора не работает. В chdbfl нет возможности "не заказывать очистку ссылок". И это вообще никак не относится к этой конкретной проблеме. Тут беда не в битых ссылках
12. kushnarenkoa 28.03.19 12:12 Сейчас в теме
(10) с чего вы взяли, что проблема вообще в битых ссылках?
33. vadim1011985 100 31.03.19 19:27 Сейчас в теме
Проблему удалось решить !!
Проблема была в том , что слетел номер страницы таблицы размещения Данная таблица описывалась полной структурой размещения (подробнее можно почитать тут) . Таблица данных имела 2 массив страниц. Ссылка на первый массив была корректной , а вот на второй была неверна и указывала на пустые записи .

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

В результате при прогонке через chdbfl теперь теряется только одна запись
Прикрепленные файлы:
kushnarenkoa; acanta; +2 Ответить
34. kushnarenkoa 02.04.19 13:13 Сейчас в теме
(33) Огромное спасибо Вадиму! Постараюсь в течение месяца написать подробную статью на тему решения этой ошибки
35. vadim1011985 100 02.04.19 13:27 Сейчас в теме
(34) Я еще ради интереса посмотрел таблицу счетов- фактур , там такая же беда с адресом последней записи , поправляется аналогично
36. kushnarenkoa 02.04.19 14:43 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот