根据这个解释[1]如何从SQLite数据库中恢复已删除的记录,删除记录时会发生两件事:包含已删除记录的区域被添加到空闲列表中(作为空闲块) )和#34;标题"在内容区域被覆盖。
内容本身不是(或只有几个字节)被覆盖,所以例如通过使用十六进制编辑器打开数据库文件,您仍然可以看到已删除记录的部分内容。
所以要检查这是否属实,这是一个最小的例子:
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';
我现在期待的是 - 用十六进制编辑器打开文件 - 在CCCC ...和AAAA之间...仍然有一些Bs(但是在Bs或前几个B之前的一些字节应该被覆盖)。 真正发生的是Bs的整个区域都被nullbytes覆盖了。
大型数据库也会发生这种情况。内容区域始终使用nullbytes清理,因此无法恢复任何内容。
我是否有任何选项或标志用于获取博客帖子中显示的结果?
我需要以这种方式创建我的SQLite数据库,以便能够使用取证工具恢复已删除的记录(或部分内容)。