суббота, 9 октября 2010 г.

Проверка целостности FlylinkDC.sqlite

Привет.

      Клиенты FlylinkDC++ и StrongDC++ sqlite используют для хранения базу данных SQLite
к сожалению  некоторых случаях  (сбой по питанию,"синий экрана смерти" и т.п.) возможно повреждение FlylinkDC.sqlite
В этом случае DC++ не может функционировать нормально и в системном логе выводятся сообщения вида "SQLite - xxx  - SQL logic error or missing database "

Самое простое лечение - "хирургическое"
  • Закрываем программу
  • Удаляем файл FlylinkDC.sqlite
  • Запускаем программу

В этом случае база данных пересоздается автоматически но теряется информация:
  • О скачанных файлах (не подкрашивается цветом - вы уже качали это файл );
  • "Рейтинг" скачано/отдано;
  • TTH всех файлов (выполняется полное перехэширование).
  • Заигноренные юзеры;
  • Информация о последних IP с привязкой к пользователям.
Для диагностики повреждения файла можно воспользоваться "программой"

http://flylinkdc.googlecode.com/files/check-flylinkdc-sqlite.zip

Инструкция
  •  Распаковываем архив в каталог ...\FlylinkDC++\Settings
  •  Запускаем  check_flylinkdc_sqlite.bat
Если ваша база данных повреждена выводится сообщение вида:
echo PRAGMA integrity_check;   | sqlite3.exe FlylinkDC.sqlite
wrong # of entries in index sqlite_autoindex_fly_tth_1
wrong # of entries in index iu_fly_ratio
rowid 3786 missing from index iu_fly_dic_name
wrong # of entries in index iu_fly_dic_name
 
Если все нормально, то пишется "Ok "
echo PRAGMA integrity_check;   | sqlite3.exe FlylinkDC.sqlite
ok

p.s
(c) идея батника SMT + Karumo http://livedc.ucoz.ru/forum/2-6-6863-16-1286467870

upd: 16.03.2013
Добавлено способ восстановления
все делается проще с помощью той же sqlite3.exe
1 делаете резервную копию FlylinkDC.sqlite
2 в cmd переходим в каталог с поломаным FlylinkDC.sqlite
3 echo .dump | sqlite3.exe FlylinkDC.sqlite > FlylinkDC.sql
4 del FlylinkDC.sqlite
5 sqlite3.exe -init FlylinkDC.sql FlylinkDC.sqlite
6 проверяем
pragma integrity_check;
7 выходим .quit


Сам не проверял - нет битой базы.
теоретически если испорчены индексы то ничего вообще не потеряется
если задеты таблицы то тут будет нарушение целостности.
   

Отправить комментарий