この説明 [1] によると、削除されたレコードを SQLite データベースから回復する方法は、レコードを削除すると 2 つのことが起こります。削除されたレコードを含む領域がフリー リストに (フリー ブロックとして) 追加され、コンテンツ領域の「header」が上書きされます。
コンテンツ自体は (または数バイトだけ) 上書きされません。たとえば、16 進エディタでデータベース ファイルを開くと、削除されたレコードの一部を表示できます。
これが正しいかどうかを確認するために、最小限の例を次に示します。
sqlite3 example.db
sqlite> CREATE TABLE 'test'(aColumn VARCHAR(25));
sqlite> INSERT INTO test VALUES('AAAAAAAAAA');
sqlite> INSERT INTO test VALUES('BBBBBBBBBB');
sqlite> INSERT INTO test VALUES('CCCCCCCCCC');
sqlite> DELETE FROM test WHERE aColumn = 'BBBBBBBBBB';
私が今期待しているのは、16 進エディタでファイルを開くと、CCCC と AAAA の間にまだいくつかの B があることです (ただし、B の前の数バイトまたは最初の数 B は上書きされているはずです)。実際に起こることは、B のある領域全体がヌルバイトで上書きされたことです。
これは、大規模なデータベースでも発生します。コンテンツ領域は常にヌルバイトで消去されるため、何も回復できません。
ブログ投稿に表示される結果を取得するために使用する必要があるオプションまたはフラグはありますか?
法医学ツールを使用して削除されたレコード (またはそれらの一部) を回復できるようにするには、その方法で SQLite データベースを作成する必要があります。