sqlite损坏修复小记

缘起

最近一个日志文件写在sqlite里边,由于关机保存不当损坏了,导致没办法正确读取,因此折腾通过技术手段恢复,这里做一个小记。

折腾过程

通过电脑端软件打开

使用了DB Browser for SQLite进行浏览,由于结构损坏,也是无法打开,提示如下错误

无法打开数据库文件。原因: database disk image is malformed

网上查找修复方案

在网上搜索一通后,发现可以通过命令行sqlite工具进行dump和恢复,整体的操作思路为dump出来sqlite的语句,然手动修改存在损坏的语句,然后在最后加上commit确保整体正确,再保存导入到新的数据库中。

这种方法可能丢失一些数据,但是实测丢失的是最后的一点点数据影响不大。

1、打开数据库

sqlite>.open xxx

2、导出数据库

    sqlite>.output tmp.sql
    sqlite>.dump
    sqlite>.quit

3、写入到新的数据库

先用文本编辑软件打开 tmp.sql,将最后一行Rollback改为Commit然后保存

在执行下面的sqlite命令,生成新的数据库

    sqlite> .open repair.db
    sqlite> .read tmp.sql
    sqlite> .exit

4、打开新的数据库确认是否正常了

这里可能会丢失数据,但是一般丢失不多

参考文档

https://blog.csdn.net/hzw2017/article/details/120899945

https://blog.csdn.net/shu19880720/article/details/123277022

https://www.cnblogs.com/guorongtao/p/16549388.html


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。