修复从磁盘数据恢复中检索到的损坏的sqlite数据库

时间:2013-01-16 18:50:00

标签: sqlite hex corrupt-data

所以我使用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应用程序)。我发现在损坏的文件中,将未损坏的文件十六进制粘贴在损坏文件中该点之前的所有内容上。所以现在它打开了,但毫不奇怪我只能从未损坏的文件中获取数据(约160个条目中的122个)。

两个联接的位置如下:

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

1B, 8B是参赛作品的开头。

以十六进制:

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

我有什么方法可以加入这两个数据库,还是我的骨头?

1 个答案:

答案 0 :(得分:0)

在SQLite文件中,表数据存储在b树中;您的联接文件可能不包含上层树级别中的正确指针。

常见问题says

  

根据数据库损坏的严重程度,您可以使用CLI将架构和内容转储到文件然后重新创建,从而恢复部分数据。不幸的是,一旦洪水从墙上掉下来,一般不可能把他重新组合在一起。

但你可以