壊れたSkype履歴(main.db)の回復

Skypeデータベースのクラッシュ 壊れた基地を復元することでもう一度苦しんだので、Skypeメッセージのほぼすべての履歴をどうやって返すかについての簡単な指示をまとめることにしました。 sqlite3の愛好家は、私がランダムに見つけたよりも良い方法を書くように勧められています。



背景



Win7 OSを再インストールし、skype(6th)をインストールし、古いものからプロファイルフォルダー全体を習慣的にコピーしました。

%AppData%\ローミング\ Skype \ my_profile \

新しい場所へ。



スカイプを起動すると、突然車の入力にハングアップします。 再起動後、ログインの招待が表示されます。 私は入る-すべての連絡先は設定されているが、実際にはどこにもメッセージはない。 一部のグループチャットのみが生き残っています。 多くが蓄積したすべての個人的な通信は消失しました。 彼はデータベースのコピー、ロックファイルの削除、破損などをN(^ k)回試行しました。 Skypeは、問題が基地にあることを誓い、再起動を求めます-その後、メッセージはありません。

グーグル、 メッセージのエクスポートアカウントのハイジャックなどに関する habroの投稿が見つかりました。 ええ、それはsqliteを意味します! これは励みになります。



ツールと材料
あなたが必要になります:

  • 新しいskypeによって「開かれる」前のmain.dbデータベースの残存コピー。データを完全に消去します(コピーがなければmain.corruptファイルを取得します)
  • SQLiteマネージャー
  • sqlite3コマンドライン (最適-* nixの下で動作)
  • Notepad ++またはUTF-8ファイルを台無しにしないその他のエディター。
  • * nixシェル(Linux / ubuntu / ...を備えた一部のサーバー、Windowsでの最も重要な最後のステップが機能しない可能性があるため)




ベースを分析します



管理者、プログラマー、上級ユーザー向けの情報
1. SQLite Managerをダウンロードします(リンク、 minamotoに感謝します)。



2. main.dbファイルを開きます(私には約150メガバイト)。



3.データベース-整合性チェック-完全チェック。



PRAGMA integrity_checkを使用してデータベースの整合性を確認します。

結果:成功しません。 エラーを表示するには、[要求の実行]タブでPRAGMA integrity_checkステートメントを実行します。




4.指定したコマンドを実行すると、たくさんの恐ろしいブナが発生します。



"***データベースのメイン***

ツリーページ5482セル13:ROWID 262638が故障しています(親の最大255232よりも大きい)

ツリーページ22553のセル8:ROWID 255233の順序が乱れている(親の最小値262638未満)

ツリーページ5601セル10:ROWID 270500の順序が乱れています(最大255358の親よりも大きい)

ツリーページ9610セル10:ROWID 255359の順序が乱れています(最小値は親の最小値である270500)

ツリーページ25320セル145:ページ5482への2番目の参照

ツリーページ25320セル145:子ページの深さが異なる

ツリーページ25320セル146:子ページの深さが異なる

ツリーページ25827セル290:ページ5601への2番目の参照

ツリーページ25827セル290:子ページの深さが異なる

ツリーページ25827セル291:子ページの深さが異なる

ツリーページ8955セル0:ページ28154への2番目の参照

ツリーページ27843セル0:ページ28136への2番目の参照

ページ5335は使用されません

ページ5344は使用されません

ページ5369は使用されません

...そんなものは決して使われない

ページ28212は使用されません "

「インデックスIX_Messages_remote_idのエントリの数が間違っています」

「インデックスIX_Messages_timestamp_convo_id_typeのエントリの数が間違っています」

「インデックスIX_Messages_timestamp_chatnameのエントリの数が間違っています」

「インデックスIX_Messages_call_guidのエントリの数が間違っています」

「インデックスIX_Messages_convo_id_timestamp_consumption_status_sending_statusのエントリの数が間違っています」

「インデックスIX_Contacts_buddystatusからRowid 95101が見つかりません」

「インデックスIX_Contacts_buddystatusからRowid 103110が見つかりません」

「Rowid 209626がインデックスIX_Contacts_buddystatusから欠落しています」





ちなみに、他のユーティリティでメッセージテーブルを表示しようとすると、「 データベースディスクイメージの形式が正しくありません 」というメッセージが頻繁に表示されます。





私はsqliteの鑑識家ではなく、すべてのエラーを研究することを望んでいないため、単純に行います。



治療



Googleはsqliteデータベースをダンプする方法、それは次のようになります:



1. Windows用のsqlite3コマンドラインまたは* nix用の「apt-get install sqlite3」をダウンロードします。 最初はWindowsで実験しましたが、後でLinuxコンソールに行かなければなりませんでした。 Windows sqlite3は、それ自体をあまりうまく表示しませんでした。



2. Windowsで、sqlite3.exeをデータベースのコピー(Skypeがまだ台無しにしていない以前のWindowsからアーカイブ)のフォルダーにコピーします。 次に、cmdを実行します([スタート]> [実行])。

Linuxの場合-ただ:



cd ------sqlite3.exe





sqlite3 main.db .dump>>myDumpSQLite.sql







(つまり、「main.db [space] .dump、混同しないでください)



3. メモ帳++などの通常のテキストエディターでmyDumpSQLite.sqlファイルを開きます 。 ファイルの最後にコマンドがありました:



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ファイルとほぼ同じ重量になります(123MBを取得しました)。 ステップ3をスキップするか、何かがおかしい場合-空の役に立たないファイルを取得します。

Windowsカカ。 ©CEP
Linuxでしか成功しなかったので、Windowsで動作せず、Linuxに慣れていない場合は、適切な友人を探してください)。 生成されたWindows sqlite3:

エラー:不完全なSQL:INSERT INTO "Contacts" VALUES(951 .......






5.受信したファイルを%AppData%\ Roaming \ Skype \ myprofile \フォルダにmain.dbという名前でコピーし、破損したファイルを置き換えます(Skypeはオフにする必要があります)。



6. Skypeを起動します。 ユーザー名とパスワードを入力します(自動的に入力しました)。



7.利益!!! すべてのメッセージが戻ってきました!

復元されたSkype履歴

最善の方法を知っていますか? -コメントに招待します。
おそらく、データベースを復元するより有能な方法があるでしょう。 貪欲なユーティリティも見つけましたが、助けにはなりませんでした(多分お金をあげる必要があったのでしょうか?)。 また、SkypeHistoryReader、Kudos Chat Search、sqlite maestroなど、さまざまなものを試しました。




All Articles