суббота, 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


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

56 комментариев:

Анонимный комментирует...

А не проще перед каждым, к примеру 10-ым, стартом программы делать резервную копию базы программно?

eXpRoD комментирует...

МОжно ли поднять базу "с колен" при таких ошибках?
C:\FlylinkDC++\Settings>echo PRAGMA integrity_check; | sqlite3.exe FlylinkDC.s
qlite
*** in database main ***
Page 16522 is never used
wrong # of entries in index i_fly_file_tth_id
wrong # of entries in index iu_fly_file_name

C:\FlylinkDC++\Settings>pause
Для продолжения нажмите любую клавишу . . .

если да то как? базу жалко в ней более 130ТБ отданой статистики

Degit комментирует...
Этот комментарий был удален автором.
Анонимный комментирует...

Возможно же наверно придумать самовостановления базы или сделать не общию базу, а состоящих из подбаз чтоб подменять битую базу рабочей или пересоздавалась автоматом

Анонимный комментирует...

Возможно же наверно придумать самовостановления базы или сделать не общию базу, а состоящих из подбаз чтоб подменять битую базу рабочей или пересоздавалась автоматом
да гавно этот sql-ite!
в нормальных СУБД коррупция базы - экстраординарный, невозможный случай. а у sq-lite - обычное дело

Анонимный комментирует...

[14:30:22] * Rei ratio: (Uploaded: 2,64 МБ | Downloaded: 0 Б)

рейтинг пропал вообще даже непоказывает

пожалуйста исправтие

Pavel Pimenov комментирует...

> да гавно этот sql-ite!
> в нормальных СУБД коррупция базы - > экстраординарный, невозможный
> случай. а у sq-lite - обычное дело

Идеальных БД не существует. и любая база может быть разрушена.
Как вы думаете, зачем оракл придумал стендбай?

Анонимный комментирует...

надо сделать резервное хранилище и туда сливать 1 раз в неделю)по умолчанию, кому не нравиться - в настройках менять) всю инфу. Хранилище - к примеру совместимый формат с CSV,DB2...4,XML - в общем любой другой

Анонимный комментирует...

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


А самое главное - очередь скачивания забыли.
Подскажите пожалуйста программу через которую можно редактировать эту базу. Sqlite manager для Firefox не открывает её.

Анонимный комментирует...

http://www.mysql.ru/download/

Анонимный комментирует...

Уже и база версия Version 3.7.3, а мы сидим на Version 3.7.2

Анонимный комментирует...

3.7.3 вышел только вчера
http://www.sqlite.org/news.html

Анонимный комментирует...

3.7.3 вышел только вчера
http://www.sqlite.org/news.html

Значит, ждём новой бетки :)

avmaksimov комментирует...

Я тоже согласен, что число падений на SQLite невообразимо больше, чем с тем же Firebird'ом...

С другой стороны, я не понимаю, зачем делается копия всех настроек программы, кроме базы данных!? Притом быть может эти резервные копии зиповать и оставлять только 10 последних рабочих!?
Я батник менял как надо, но вот беда, после установки новой версии он затирается :(.

Ну и можно предложить при запуске проверять корректность базы и при невозможности восстанавливать последнюю рабочую копию.

Анонимный комментирует...

Возможно пригодится для разработчиков софта http://binural.org/soft/programming/1147926507-intel-parallel-studio-2011.html

Elle Solomina комментирует...

дополнение при удалении базы потеряется и очередь скачивания.

Анонимный комментирует...

Установил на win 7 FlylinkDC++ x64 во время запуска выводится ошибка о повреждении файла sql. Обошол эту проблему разрешением полного достопа юзера к директории программы. P.S. может кому пригодится... и еще win живет своей жизнью, проверяйте разрешения на доступ к директории программ...

Анонимный комментирует...

У меня выдавало что то типа этого "SQLite: CFlylinkDBManager::CFlylinkDBManagerdatabase disk image is malformed". При этом FlyLinkDC++(r402) не запускался. Вылечил удалением файла FlylinkDC_log.sqlite. При этом потерял всего лишь историю чата/переговоров с юзерами. Очередь закачки не измеилась и даже не перехешировалась, статистика отданного/скачанного, подсветка того что у кого-то скачал или от меня скачали работает. Так что отделался легким испугом

Анонимный комментирует...

Создайте cmd- или bat-файл, скопируйте в него ниже приведенный код, поправьте ОБЯЗАТЕЛЬНО переменные Arxivator, PathFly. По своему вкусу можете поправить и BackUpFiles, NameArx. Пользуйтесь, предварительно выгрузив FlylinkDC++ и т.п. ботву. У меня подобный cmd-шник создан был для uTorrent, когда чуть не потерял все данные по закачкам. Не знал, что и для Fly-я данные тоже надо бэкапить :) Сообщение "7 апреля 2011 г. 9:33" также мое.

@echo off
cls
set Arxivator=F:\Program Files\WinRAR\winrar.exe
set PathFly=F:\Program Files\FlylinkDC++
set BackUpFiles=*sqlite*
set NameArx=fly_

rem Arxivator - папка с архиватором WinRAR
rem PathFly - папка с установленным FlylinkDC++
rem BackUpFiles - маска файлов, что мы хотим сохранить, заархивировать
rem NameArx - имя архива (к нему автоматом добавится дата и время создания архива)


"%Arxivator%" a -m5 -md4096 -s -ep1 -agYYYY-MM-DD_HH-MM -t %NameArx% "%PathFly%\Settings\%BackUpFiles%"

set Arxivator=
set PathFly=
set BackUpFiles=
set NameArx=

BBK комментирует...

Народ помогите решить проблему.
Операционка: Windows 7 x64.
Скачал FlylinkDC++ для 64 битной 7.
А он не запускается с вот такой ошибкой: http://i062.radikal.ru/1105/b5/3b67d737a3f1.jpg
Базы дданых удалены давно, 3 раза переустанавливал саму прогу, чистил реестр и ничего не помогло с продействованого.

Анонимный комментирует...

После свежей установки r404 x64 и последующем запуске выскочило окно с кряказябрами, хорошо хоть ссылка сюда была видна. В общем помогло установка прав полного доступа на директорию C:\Program Files\FlylinkDC++\Settings для группы "Пользователи". Ещё очень смущает путь установки программы по-умолчанию в корневую директорию C: . Пользуют все-таки программу большой частью обычные пользователи, а тут вот эти закидоны программерские ..

Анонимный комментирует...

Не запускается, посоветуйте что-нибудь. ошибка: SQLite:CFlylinkDBManager:CFlylinkDBManagerunable to open database

Анонимный комментирует...

Ошибка базы данных FlylinkDC.sqlite!


SQLite-LoadPathCache: SQL Logic error or missing database
Вероятно,файл базы данных FlylinkDC.sqlite поврежден.
Вариант решения проблемы:


*Провести диагностику и ремонт файла по инструкции
http://flylinkdc.ru/2010/10/flylinkdcsqlite.html
После переустоновки даже пишит.Вроде полностья удалял

Анонимный комментирует...

"помогло установка прав полного доступа на директорию C:\Program Files\FlylinkDC++\Settings для группы "Пользователи"

Спасибо!

Виталий комментирует...

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

Анонимный комментирует...

У меня пишет Провести диагностику и ремонт файла по инструкции
http://flylinkdc.ru/2010/10/flylinkdcsqlite.html-Выход нашел ремонтом этого файла.Устанавливаете Mozilla Firefox,скачиваете прогу sqlite-manager,после закидываете в мозиллу,появляется в инструментах мозилы вкладка sqlite-manager,далее указываете flylinkdcsqlite в папке флинки и открываете его.далее в таблице удаляете таблицу fly_path,а fly_hash_block и fly_hash переменовываете после закрытия sqlite-manager запускайте флинки и все.Если чего не понятно то подскажу.

Анонимный комментирует...

"помогло установка прав полного доступа на директорию C:\Program Files\FlylinkDC++\Settings для группы "Пользователи"

Спасибо! +1

Анонимный комментирует...

пришлось переименовать старый файл FlylinkDC.sqlite, при запуске FlyLink создался новый, c помощью SQLite Manager выгрузил из старой базы (закладка SQL с опциями CreateTable и Begin Transaction/Commit) таблицу fly_queue, удалил в новой базе таблицу fly_queue, загрузил (закладка SQL с опцией Begin Transaction/Commit) в новую то, что выгрузил из старой, запустил FlyLink, очередь скачивания появилась

Анонимный комментирует...

ОБАЛДЕТЬ
Следуйте инструкциям восстановления, звучит как издевательство (инструкций восстановления нет)
почему нельзя было в программе реализовать архивацию? жалко очередь скачивания, и закачанные файлы

Syn комментирует...

Как можно выделить из FlylinkDC.s
qlite список закачек. Уже второй раз после некорректрого закрытия не открывается очередь скачивания. Запускаешь Flylinc все нормально, при клике на иконке списка закачек вешает программу напроч.

Pavel Pimenov комментирует...

Пришлите мне файлик FlylinkDC.sqlite для анализа?

oleg_moscow комментирует...

Вранье у меня нету FlylinkDC.sqlite в корневой папке! и нету папки Settings (\FlylinkDC++\Settings) ( показывать скрытые файлы и папки галочка стоит в настройках )

oleg_moscow комментирует...

Вранье у меня нету FlylinkDC.sqlite в корневой папке! и нету папки Settings (\FlylinkDC++\Settings) ( показывать скрытые файлы и папки галочка стоит в настройках )

Alex Dancer комментирует...

О том, что база данных повреждена, я знаю и без предлагаемой программы. Вы лучше скажите как исправить базу.
Исходные данные:
Windows XP-SP3
FlyLink r5.01-beta52-build-8521
Флайлинк хешировал данные, в это время выключили свет, комп естественно вырубился.
При следующем запуске программы флай выдал ошибку: "Ошибка базы данных FlylinkDC.sqlite!
SQLite- LoadDir: SQL logic error or missing database Вероятно, файл базы данных FlylinkDC.sqlite поврежден.
Вариант решения проблемы:
* Провести диагностику и ремонт файла по инструкции http://flylinkdc.ru/2010/10/flylinkdcsqlite.html"

Зашёл на страницу... и что... где же сами инструкции по РЕМОНТУ???? Не понятно.

Диагностика батником выдала следующее: "
C:\Program Files\FlylinkDC++\Settings\check-flylinkdc-sqlite>echo PRAGMA integrity_check; | sqlite3.exe FlylinkDC.sqlite
*** in database main ***
On tree page 4909 cell 12: Rowid 39918 out of order (min less than parent min of 39984)
On tree page 2436 cell 1: Rowid 40034 out of order (max larger than parent max of 40023)
On tree page 8193 cell 6: Rowid 40024 out of order (min less than parent min of 40034)
On tree page 5932 cell 2: Rowid 40054 out of order (min less than parent min of 40083)
On tree page 7021 cell 1: Rowid 40107 out of order (max larger than parent max of 40095)
On tree page 7466 cell 346: 2nd reference to page 9129
On tree page 7466 cell 346: Child page depth differs
On page 7466 at right child: 2nd reference to page 9171
On tree page 6056 cell 97: 2nd reference to page 8413
On tree page 6056 cell 97: Child page depth differs
On tree page 6056 cell 98: 2nd reference to page 8408
On tree page 6056 cell 99: Child page depth differs
Page 4547 is never used
Page 7577 is never used
Page 8752 is never used
Page 8787 is never used
Page 9149 is never used
wrong # of entries in index sqlite_autoindex_fly_hash_1
Error: near line 1: database disk image is malformed

C:\Program Files\FlylinkDC++\Settings\check-flylinkdc-sqlite>pause
Для продолжения нажмите любую клавишу . . ."

Спасайте, в базе данных информация за полгода.

kukurooza комментирует...

Здравствуйте. я сделал как сказано, удалил файл FlylinkDC.sqlite. Программа не запускается пишет ту же самую ошибку. Так же скачал программу по ссылке http://flylinkdc.googlecode.com/files/c ... sqlite.zip, проверил - пишется "ОК", я так понял что файл в порядке. Скажите пожалуйста, в чем проблема?

Pavel Pimenov комментирует...

поищите по диску сколько у вас FlylinkDC.sqlite ?

kukurooza комментирует...

я нашел только в C/Program files (x86)/Settings и там был FlylinkDC.sqlite и FlylinkDC_log.sqlite. А где еще можно поискать? и как искать? через поиск не ищет. Думаете могут быть еще FlylinkDC.sqlite ?

Pavel Pimenov комментирует...

1. какая версия флая у вас стоит?
2. поищите по всему диску.

kukurooza комментирует...

как я понял у меня r500-beta123, хотя могу ошибаться, не знаю как посмотреть точно. Так по всему диску это можно неделю потратить искать, но все же попробую. Проще нет решений? может просто флай переустановить или не поможет?

Pavel Pimenov комментирует...

Значит у вас хранится файл в профиле.
конечно поставьте нормальную версию
или r500-релиз
или r501-beta69

kukurooza комментирует...

Спасибо. Переустановил программу. все заработало.

Анонимный комментирует...

FlylinkDC++ выдает эту ошибку SQLite - grtDIC_ID: database disk image is malformed Probdbly,the database File FlylinkDC.

Анонимный комментирует...

FlylinkDC++ выдает эту ошибку SQLite - grtDIC_ID: database disk image is malformed Probdbly,the database File FlylinkDC.
Probdbly,the database File FlylinkDC.sqlite is corrupted.
Solution to the problem:
flylinkdc.blogspot.com/2010/10/flylinkdc...
*To diagnose and repair the file according to instructions

Анонимный комментирует...

(в очередной раз...) SQLite испортил всю свою базу,
- много часов добавлений книг и видео которые решил скачать попозже [из-за нехватки места на диске]
- в этот раз ещё ладно, почти всё было скачано, но вот в прошлый - из-за вас козлов-разрабов...
--
PS: нах. этот тупой SQLite
верните .XML+.BAK, как в том же (родоночальнике) StrongDC++...

Анонимный комментирует...

PS: а, ещё он имеет привычку c не-100% вероятностью при запуске/обновлении (т.е.с рандом эффектом) портится при превышении нек.числа записей в БД...
Помню как то пришлось удалять и закачивать файлы, для освобождения места в БД - под добавляемые.
Притом база была не то чтобы большая, где то 150MB всего, особенно в сравнении с тем сколько флай жрёт (иногда) в RAM...
Одним словом - в топку SQLite !

Анонимный комментирует...

PSS: это я к тому что даже
SQLite + .BAK
- не полноценное из-за
глючности решение.

Анонимный комментирует...

PS:
+Оптимизацию:
а) чтобы небыло STALLs при добавлении - файлы добавлять в конец существующей базы,
без копирования файла-базы, и соответственно без создания .BAK-файла (его созд.только при старте)
PS: а, ещё лучше - в доп.файлы с индексом в имени - в сл.вылета ОС - потеряется(либо же обнулится - на FAT разделах) только последнее добавление набора файлов

b) чтобы небыло STALLs при массовом удалении [по завершении скачивания] - аналогично, но установив поле ForDelete=True.


PS: LastIP & статистику-скачек другими - хр.в отд.XML файл-базах,
+всё по аналогии
PS: А, для ускорения(тем более для владельцев древних компов, в принципе так же и современных - при одновр.нагрузке их другими программами/играми)
- галочку отключения этой "нуочень полезной функции", (порой)круто тормозящей все дисковые операции и потому вообще реакцию ОС...
Я уж не говорю подозрительной - с точки зрения ведения слежки/логирования за другими пользователя самим пользователем и тем более возможной утечки этого лога, другими...

PS: добавления файлов(в отл.от всего остального) должно сопровождаться FLUSH на ур.ОС, равно как и перед закрытием .BAK файла.

PS: Когда кол-во "ИНДЕКСНЫХ"-файлов превысит скажем сотню(чтобы файловая система не тормозила из-за тормознутости их поиска в каталоге) - автообновление базы,с созданием её .BAK файла понятно.
PSS: "индексные"-файлы с базой, для удобства, расп.в отд.подкаталоге.
PSS: Причём для ускорения диск.оп. - их лучше реал-ть предсоздаваемыми-при-старте; каждый размером в 32kB(усл.говоря 100+ записей файлов), которые при необх.можно увеличить(при старте затем уменьшить). В начале каждого - признак занятости и одновременно просто валидности сод-го +с уч.что начиная с хп запись может идти непоследовательно, и чтобы не делать тормозный ОС Flush для таких файлов - к каждому полю добавить поле (цикличного)индекса, номер же первого и последнего в начале файле (согласующийся с др.файлами) и будет признак занятости и одновременно просто валидности, если он непоследователен или внутри индексация нарушена - "индексный" файл бит или недозаписан, равно как отсутствует или нулевого размера. Кстати следующий файл может быть валидным, как раз из-за непосл.записи и WriteDelay. При компановке - эти значения обнулять.

Анонимный комментирует...

я ничего не понял... как устранить ошибку.

Анонимный комментирует...

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

смысл в том чтобы сделать dump/load базы (обычная процедура для бд)

странно что аффтор про это не написал

Pavel Pimenov комментирует...

Спасибо.
аффтор добавил вашу версию в топик. :)

Анонимный комментирует...

нз) зате меня просто "Ваше Величетво Администратор Баз Данных" )))

Анонимный комментирует...

завите *
пардон

Pavel Pimenov комментирует...

может тогда - зовите? )
ну и в величестве ошибка :)

Анонимный комментирует...

Здравствуйте! Есть некоторая проблема, суть которой опишу ниже.
Год назад начал качать кучу файлов для изучения иностранного языка с различных хабов, общий объём для скачки был порядка 100Гб. Качал около полугода со скоростью инет соединения 4 мбит/с. Скачалась примерно половина от запланированного(много отдельных файлов по различным пользователям). Вообщем, суть в чём, была одна причина, по которой моя ОС частично накрылась. Кое-как реанимировал, 90% программ оказались нерабочими, пришлось переставлять, тоже самое произошло и с Стронгом-лайт. Расстроился, удалил, реестр подчистил. Поставил GreyLink_0.58_64-bit, но заново перекачивать файлы не стал(буду обновлять ОС до Win 8, потом начну заново, хоть и геморно). Недавно порылся на системном диске и случайно обнаружил папку SSQLite++CrashDump, а там файл около 140 Мб с таким же названием. Вот думаю чудо!!! Неужели возможно имплантировать старую БД в новую(или заменить вообще). Расширение данного файла БД *.dmp
Подскажите спецы, это возможно?

Pavel Pimenov комментирует...

Привет.
нет .dmp файл это дамп падения стронга-дайт
базу данных от туда не достать
у базы имя *.sqlite

Анонимный комментирует...

Понял. Печально...
Спасибо за ответ!