SQLite3 数据救援问题:数据库磁盘映像损坏

7

背景

我有一个数据库已经损坏,希望尽可能多地保存数据。

我尝试使用多种工具转储数据,但都没有成功。总是出现相同的错误信息:

错误:数据库磁盘映像文件格式不正确

我非常确定这是由于停电造成的。

方法?

现在,实际上数据库就是一个文件。我想知道是否可以将其视为文件,并尝试尽可能地保存数据。

我猜测当数据库被工具或程序打开时,它首先检查其头信息。在我的情况下,我立即收到错误消息。我假设头信息已损坏或不匹配。因此,没有工具会尝试读取有效负载。

在文档http://www.sqlite.org/fileformat2.html中,有关于头部偏移量的解释。

问题:这是一个合理的方法吗?如果有可能修复、修改或交换损坏的数据库头部,我该如何操作?

1个回答

6
尽管在多个SO线程中有几个回复相反,但SQLite数据库可以从损坏中恢复!我已经在SQLite团队的FAQ(http://www.sqlite.org/faq.html#q20)中请求更新,但与此同时,这里有几个选项。常见问题解答如下:
20. "...如果没有使用SQLITE_SECURE_DELETE并且未运行VACUUM,则某些删除的内容可能仍然存在于数据库文件中,位于标记为重用的区域。 但是,我们不知道任何程序或工具可以帮助您恢复该数据。”
21. "...根据您的数据库损坏情况,您可以使用CLI将模式和内容转储到文件中,然后重新创建以恢复一些数据。 不幸的是,一旦胡佛-达姆跌落墙壁,通常无法将其重新组合在一起。”
实际上,至少有两个出色的工具可以对整个SQLite数据库和单个记录进行数据恢复,并且它们可以在硬件故障、软件错误或人为问题的情况下提供帮助。 它不会100%原始,但情况并非绝望。 PhotoRec是开源和多平台的。 虽然它历史上用于图像和pdf,但现在它支持SQLite恢复(http://www.cgsecurity.org/wiki/File_Formats_Recovered_By_PhotoRec),以及220多种二进制文件类型。 如果删除了数据库(或整个目录),则PhotoRec通常可以将db文件恢复到足够正常的状态以打开和导出。 应用程序的预编译版本在Windows、Mac和Linux上免费提供。
此外,CCL Forensics的商业产品Epilog可以进行非常高级的记录恢复,包括从写入前日志(WAL)事务文件中检索数据。 它需要几百美元,但它可以对SQLite数据进行相当惊人的取证重建(包括本机二进制db文件以及原始磁盘映像)。这两者都曾多次挽救我的生命,因此将其传递给其他可能已经放弃删除/损坏的SQLite数据库(以及流行用例的真实取证,例如移动电话、浏览器、地址簿等)。一旦您重新生成/导出数据,验证备份方案并定期运行pragma integrity_check以及vacuum是个好主意。
我已经要求更新官方FAQ,至少提到如果不允许提到其他项目/产品名称,可以通过搜索“sqlite recovery”或类似关键字来解决问题。祝好。

当我运行 pragma integrity_check 时,出现了 Error: database disk image is malformed 的错误。 - chovy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接