Восстановление убитого кэша Беркли (BerkeleyDB)

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

T_Im писал(а):Файл 621.324.sdb 270М, если надо - могу выложить.

Давайте, только заархивируйте его предварительно.
T_Im
Постигающий Дао
Сообщения: 112
Зарегистрирован: 04 янв 2009, 21:52
Благодарил (а): 14 раз
Поблагодарили: 23 раза

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение T_Im »

zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

Попробуйте сделать так:

Код: Выделить всё

db_dump -R -f dump.txt 621.324.sdb.bad

Потом открыть dump.txt в hex-редакторе или блокнотом (но файл будет около полугигабайта, так что не всякий блокнот и справится) и удалить оттуда первые две строки, чтобы файл начинался с

Код: Выделить всё

VERSION=3
format=bytevalue
type=btree
HEADER=END

и далее там будут циферки.

Затем, нужно сохранить изменения и выполнить команду:

Код: Выделить всё

db_load -f dump.txt 621.324.sdb

У меня оно таким макаром восстановило файл, но что там внутри получилось и рабочий ли он - нужно проверять. Шпулять по инету 200Мб как-то не охота, попробуйте сделать, как описано выше.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

Или даже можно вот такой заголовок сделать:

Код: Выделить всё

VERSION=3
format=bytevalue
database=
type=btree
db_pagesize=1024
HEADER=END

а то оно по-умолчанию делает pagesize=16k:

Код: Выделить всё

d:\bin53>db_stat -d 621.324.sdb
Mon Oct 22 00:05:13 2012        Local time
53162   Btree magic number
9       Btree version number
Little-endian   Byte order
        Flags
2       Minimum keys per-page
16384   Underlying database page size
4079    Overflow key/data size
2       Number of levels in the tree
23146   Number of unique keys in the tree
23146   Number of data items in the tree
1       Number of tree internal pages
13924   Number of bytes free in tree internal pages (15% ff)
111     Number of tree leaf pages
742006  Number of bytes free in tree leaf pages (59% ff)
0       Number of tree duplicate pages
0       Number of bytes free in tree duplicate pages (0% ff)
23075   Number of tree overflow pages
119M    Number of bytes free in tree overflow pages (68% ff)
0       Number of empty pages
0       Number of pages on the free list

Кстати, судя по выводу db_stat в восстановленном кэше лежит 23146 тайл.
T_Im
Постигающий Дао
Сообщения: 112
Зарегистрирован: 04 янв 2009, 21:52
Благодарил (а): 14 раз
Поблагодарили: 23 раза

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение T_Im »

Спасибо, попробовал восстановится указанным способом, но база все равно получилась с ошибками.
При просмотре нормальные тайлы перемежаются хаотично неотображаемыми с надписью "Error [BerkeleyDB]: Bad magic value (UNKN)".

Может есть какой способ распаковать содержимое базы в виде файлов?
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

T_Im писал(а):При просмотре нормальные тайлы перемежаются хаотично неотображаемыми с надписью "Error [BerkeleyDB]: Bad magic value (UNKN)".

Это скорее всего из-за того, что использовалось максимально-агрессивное восстановление (ключ -R). Менее агрессивный метод (-r) в этой версии библиотеки почему-то не работает. Попробуйте на более новой версии из аттача.
Т.е. нужно распаковать архив в любое место (только не в папку с САС - с этой версией он работать не будет) и выполнить команду:

Код: Выделить всё

db_dump -r -f dump.txt 621.324.sdb.bad

ну и далее, как и прошлый раз.

BerkeleyDB.v5.3.xx.7z

T_Im писал(а):Может есть какой способ распаковать содержимое базы в виде файлов?

Можно попробовать натравить менеджер кэша (Операции - Управление кэшем) и сконвертировать в тайловый формат. Или через операции с выделенной областью - Скопировать.
T_Im
Постигающий Дао
Сообщения: 112
Зарегистрирован: 04 янв 2009, 21:52
Благодарил (а): 14 раз
Поблагодарили: 23 раза

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение T_Im »

Теперь сработало. По крайней мере нету такого большого количества битых тайлов. Возможно, где то они остались, т.к. на 2/3 стопорится построение карты заполнения, но, думаю, уже можно будет по выделению экспортировать в другую базу большую часть содержимого.
(во вложении для работы утилит нехватает msvcp100.dll msvcr100.dll - взял их из папки САС)
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

Обновил утилиту: sdb_util_1.0.2.4.7z

Обновление связано с устранением бага, когда утилиты отказывались работать, если в пути к кэшу встречались русские символы (или любые другие не-латинские) или пробелы.

Кстати говоря, если напрямую из консоли натравить какую-нибудь утилиту (тот же db_verify) на кэш с русским путём, то она откажется работать.
T_Im
Постигающий Дао
Сообщения: 112
Зарегистрирован: 04 янв 2009, 21:52
Благодарил (а): 14 раз
Поблагодарили: 23 раза

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение T_Im »

Небольшой баг (sdb_util_1.0.2.4.7z): если в режиме "Reset LSN [cmd: db_load -r lsn]" нажать "Abort", то удаляются Env папки у всех кешей из выбранной папки проверки, том числе и у непроверенных.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Восстановление убитого кэша Беркли (BerkeleyDB)

Сообщение zed »

Баг-трекер для утилитки тут: https://bitbucket.org/zedxxx/sdb_util/issues - о замеченных багах можно писать сразу туда.
Ответить

Вернуться в «SAS.Планета»