2013-01-16 73 views
1

因此,我从使用测试磁盘的格式化磁盘拉了一个sqlite数据库。我有这个文件,但它的中间有一些奇怪的东西,看起来像是某些日志。重点是它严重损坏。修复从磁盘数据恢复检索损坏的sqlite数据库

我有,虽然sqlite的文件的早期版本....

文件的早期版本包含了所有在其他文件中它怪异的东西的数据。损坏的文件具有的未损坏文件没有的新条目似乎没有问题。

我试图修复损坏的文件,使用各种回声.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 

有什么办法,我加入这两个数据库,还是我去骨?

回答

0

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

的常见问题says

根据你的数据库是如何严重损坏,您可以通过使用CLI转储模式和内容的文件,然后重新恢复一些数据。不幸的是,一旦虚张声势从墙上掉下来,通常不可能再次将他重新聚合在一起。

但是你既可以

  • 阅读file format documentation,并试图用手或用一些临时工具从文件中提取尽可能多的数据posssible;或
  • 支付somebody为您做到这一点。
+0

感谢您的回复!我更早地浏览了文件格式文档,无法做出正面或反面的意见(没有使用十六进制编辑的经验)。对于我来说,重新收集数据看起来要便宜得多。这就是我要做的。 –

相关问题