Сайт контента для вас!

Пятница, 19 Апреля 2024, 22:57:50
Приветствую Вас Гость
Главная Регистрация Вход RSS
Категории раздела
Мои статьи [2]
телефны,смартфоны,кпк и прочая аппаротура [9]
Новости [9]
Игры [8]
музыка [0]
Видео [0]
Проекты [2]
космос [0]
события [1]
примеры кодов [3]
прочее [0]
другое [0]
программирование [0]
софт [1]
Мини профиль
Личных сообщений:
Вы вошли как: Гость
IP : 3.16.83.150
Профиль
Личные сообщения

Выход
Наш опрос
Самый достойный производитель мобильных игр !
Всего ответов: 4
ТОПы онлайн игр!
game100rus.com
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • WMmail.ru - заработай на чтении писем!
  • МЕТЕОНОВА-ПОГОДА
  • Сайт на котором вы сейчас!
  • Яндекс
  • Дом аниме
  • Наш проект Kontent Software
  • Реклама
    Этот сайт защищен «Site Guard» Survarium WoWeb.ru - портал для веб-мастера Top-uCoz Graffiti Decorations(R) Studio (TM) Site Promoter Graffiti Decorations(R) Studio (TM) Site Promoter Красивые картинки, анимационные картинки, картинки про любовь, рамки для фотошоп Анализ сайтов, проверка тиц, pr Анализ сайтов, проверка тиц, pr
    Топ наград

    Каталог статей


    Главная » Статьи » разные статьи на разные темы » софт

    Восстановление битой истории Skype (main.db)

    Автор статьи KIVagant

    источник habrahabr.ru


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

    Предыстория


    Переустановил ОС Win7, установил skype (6-й), привычно скопировал всю папку профиля из старого:
    %AppData%\Roaming\Skype\мой_профиль\
    в новое место.

    Запускаю скайп и вдруг он виснет на автовходе. После повторного запуска вижу приглашение войти. Вхожу — все контакты на месте, а сообщений — практически нигде нет. Только в некоторых групповых чатах сохранились. Вся личная переписка, коей скопилось немало — исчезла. Проделал N(^k) попыток копировать базу данных, удаляя файлы блокировок, is-corrupt и прочие. Скайп ругается, что с базой проблемы, затем просит перезайти — после чего сообщений нет.
    Погуглив, нашел хабро-посты про экспорт сообщений, угон аккаунтов и т.п. Ага, значит sqlite! Это обнадёживает.

    Инструменты и материалы
    Вам понадобится:
    • уцелевшая копия базы main.db до того, как её «открыл» новый скайп, начисто затерев данные (или возьмите файл main.corrupt, если копии не оказалось)
    • SQLite Manager
    • sqlite3 command line (оптимально — работать в ней под *nix)
    • Notepad++ или любой другой редактор, который не гробит UTF-8 файлы.
    • *nix shell (какой-нибудь сервер с linux/ubuntu/..., т.к. самый важный последний шаг под виндоуз может не сработать)


    Анализируем базу


    Информация для админов, программистов и опытных пользователей
    1. Качаем SQLite Manager (спасибо за ссылку, minamoto).

    2. Открываем файл main.db (около 150 мегабайт у меня).

    3. База данных — Проверка целостности — Полная проверка.

    Проверка целостности базы данных с помощью «PRAGMA integrity_check».
    Результат: НЕ УСПЕШНО. Чтобы увидеть ошибки, выполните оператор «PRAGMA integrity_check» во вкладке «Выполнить запрос».


    4. Выполняю указанную команду, получаю много страшных буков:

    "*** in database main ***
    On tree page 5482 cell 13: Rowid 262638 out of order (max larger than parent max of 255232)
    On tree page 22553 cell 8: Rowid 255233 out of order (min less than parent min of 262638)
    On tree page 5601 cell 10: Rowid 270500 out of order (max larger than parent max of 255358)
    On tree page 9610 cell 10: Rowid 255359 out of order (min less than parent min of 270500)
    On tree page 25320 cell 145: 2nd reference to page 5482
    On tree page 25320 cell 145: Child page depth differs
    On tree page 25320 cell 146: Child page depth differs
    On tree page 25827 cell 290: 2nd reference to page 5601
    On tree page 25827 cell 290: Child page depth differs
    On tree page 25827 cell 291: Child page depth differs
    On tree page 8955 cell 0: 2nd reference to page 28154
    On tree page 27843 cell 0: 2nd reference to page 28136
    Page 5335 is never used
    Page 5344 is never used
    Page 5369 is never used
    … тут много таких is never used
    Page 28212 is never used"
    «wrong # of entries in index IX_Messages_remote_id»
    «wrong # of entries in index IX_Messages_timestamp_convo_id_type»
    «wrong # of entries in index IX_Messages_timestamp_chatname»
    «wrong # of entries in index IX_Messages_call_guid»
    «wrong # of entries in index IX_Messages_convo_id_timestamp_consumption_status_sending_status»
    «rowid 95101 missing from index IX_Contacts_buddystatus»
    «rowid 103110 missing from index IX_Contacts_buddystatus»
    «rowid 209626 missing from index IX_Contacts_buddystatus»


    Кстати, в других утилитах при попытке просмотреть таблицы сообщений, часто получал такое: "the database disk image is malformed".


    Поскольку я не знаток sqlite и не горю желанием изучать каждую ошибку, поступаем просто.

    Лечение


    Гуглим как дампить базы sqlite, получается примерно так:

    1. Скачать sqlite3 command line для Windows или «apt-get install sqlite3» для *nix. Я сначала экспериментировал под виндой, но впоследствии пришлось перейти в консоль Linux, т.к. виндовая sqlite3 не совсем хорошо себя показала.

    2. Под Windows копируем sqlite3.exe в папку с копией базы (архивной с предыдущей винды, которую ещё не испортил скайп). Затем запускаем cmd (Пуск > выполнить).
    Под линуксом — просто выполняем:

    cd путь-к-папке-с-базой-и-sqlite3.exe
    sqlite3 main.db .dump>>myDumpSQLite.sql

    (Именно «main.db[пробел].dump, не перепутайте)

    3. Открываем файл myDumpSQLite.sql в нормальном текстовом редакторе, например Notepad++. В самом конце файла у меня стояла команда:

    ROLLBACK;

    Кто знаком с SQL, знает зачем нужно удалить эту последнюю строку в файле и вместо неё написать:
    COMMIT;

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

    4. Создаём новую, чистую базу из файла myDumpSQLite.sql (рекомендуется под Linux).

    sqlite3 main-recovered.db <myDumpSQLite.sql
    При этом могут возникать сообщения об ошибках
    У меня это были примерно такие:

    Error: near line 329619: PRIMARY KEY must be unique Error: near line 329620: PRIMARY KEY must be unique Error: near line 329621: PRIMARY KEY must be unique Error: near line 329622: PRIMARY KEY must be unique ... ещё пару десятков таких сообщений

    Благодаря тому, что мы сделали COMMIT в конце файла — ошибки будут проигнорированы. Теоретически, что-то потеряется (какие-то одиночные сообщения, может даже какой-то чат пропадёт). Но это ничто по сравнению с потерей всей базы, которую предлагает Microsoft.


    Полученный файл main-recovered.db должен весить примерно столько же, сколько и sql-файл (у меня получилось 123Мб). Если пропустить шаг 3 или что-то пойдёт не так — получите пустой бесполезный файл.
    Windows кака. © КЭП
    У меня получилось только под Linux, так что если под Windows не работает, а linux вам не знаком — ищите нужных друзей). Виндовая sqlite3 выдала:
    Error: incomplete SQL: INSERT INTO „Contacts" VALUES(951.......



    5. Копируем полученный файл в папку %AppData%\Roaming\Skype\мой_профиль\ под именем main.db, заменяя поломавшуюся (Skype должен быть выключен).

    6. Запускаем Skype. Вводим логин и пароль (у меня автоматом зашло).

    7. PROFIT!!! Все сообщения вернулись!
    Категория: софт | Добавил: bogdan-G (29 Ноября 2012)
    Просмотров: 732 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Поиск
    Мини-чат
     
    500
    Статистика
    Яндекс.Метрика


    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Кто нас сегодня посетил

    Копилка
    Жизнь сайта
    Наша кнопка
    MSteam
    Код: