1

そこで、testdiskを使用してフォーマット済みディスクからsqliteデータベースをプルしました。私はファイルを持っていますが、ファイルの真ん中に何かからのログのように見える奇妙なものがたくさんあります。重要なのは、それがひどく破損しているということです。

私はsqliteファイルの以前のバージョンを持っていますが...

以前のバージョンのファイルには、他のファイルに奇妙なものが含まれているすべてのデータが含まれています。破損したファイルの新しいエントリには、破損していないファイルは問題ないように見えます。

さまざまなecho.dumpメソッドなどを使用して破損したファイルを修復しようとしましたが、空のファイルが表示されます。

Baxters-MacBook-Pro:desktop bax$ sqlite3 corrupted.sqlite3
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check;
Error: database disk image is malformed

ダンピングは私に与えます:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
/****** CORRUPTION ERROR *******/
/****** database disk image is malformed ******/
/****** ERROR: database disk image is malformed ******/
/****** CORRUPTION ERROR *******/
/****** database disk image is malformed ******/
/****** ERROR: database disk image is malformed ******/
/**** ERROR: (11) database disk image is malformed *****/
ROLLBACK; -- due to errors

ぼんやりとHEXに参加してみました。古い(破損していないデータベース)の内容を、破損したファイルの重複する情報に貼り付けました。つまり、破損していないファイルの最後のデータはタイムスタンプでした15:15:14.419734(データベースは古いRailsアプリのものです)。破損したファイルで、破損したファイルのそのポイントの前に、破損していないファイルの16進数をすべてに貼り付けていることがわかりました。これで開きますが、当然のことながら、破損していないファイル(160個のエントリのうち約122個)からしかデータにアクセスできません。

2つの結合は次のようになります。

15:15:14.419734√Ö√£)    �√ÖYAA{1B, 8B

1B, 8Bエントリの始まりです。

16進数:

31353A 31353A31 342E3431 39373334 C3851FC3 A3290900 
01C38501 59014141 7B31422C 203842

これらの2つのデータベースに参加する方法はありますか、それとも骨が折れていますか?

4

1 に答える 1

0

SQLiteファイルでは、テーブルデータはbツリーに保存されます。結合されたファイルの上位ツリーレベルに正しいポインタが含まれていない可能性があります。

FAQによると

データベースがどれほどひどく破損しているかによっては、CLIを使用してスキーマとコンテンツをファイルにダンプしてから再作成することで、一部のデータを回復できる場合があります。残念ながら、ハンプティダンプティが壁から落ちてしまうと、通常、彼を元に戻すことはできません。

しかし、あなたはどちらか

于 2013-01-17T09:07:42.837 に答える