sqlite数据库死亡提示database disk image is malformed的修复经历


前言

SQLite数据因为各种原因,比如磁盘空间不足、写数据过程中突然停电等原因导致死亡提示:database disk image is malformed。sqlite没直接提供Repair命令,数据库如何才能修复呢?以下为在windows系统下操作


一、下载sqlte3.exe

通过sqlite官网下载地址:https://www.sqlite.org/download.html
找到windows环境的当前最新版:https://www.sqlite.org/2022/sqlite-tools-win32-x86-3380500.zip

二、使用步骤

1.解压sqlite-tools文件

将sqlite-tools压缩文件中的sqlite3.exe文件解压到您损坏的数据库目录下,打开命令窗口输入如下指令:(例如数据库文件为old.db)

sqlite3 old.db 回车
sqlite>PRAGMA integrity_check; 回车

获取数据库的问题提示:

*** in database main ***
Page 3900: btreeInitPage() returns error code 11
Page 3898: btreeInitPage() returns error code 11
Page 3897: btreeInitPage() returns error code 11
row 1708 missing from index sqlite_autoindex_*****
row 2151 missing from index sqlite_autoindex_*****
row 7274 missing from index sqlite_autoindex_*****
row 7323 missing from index sqlite_autoindex_*****
Runtime error: database disk image is malformed (11)

2.导出受损数据库的数据

指令如下:

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

此时会生产一个备份文件tmp.sql,
用文本编辑软件打开tmp.sql文件,找到最后一行
将ROLLBACK;修改成Commit;
后保存文件

3.创建新数据库导入数据到新数据库

指令如下:(例如数据库文件为new.db)

sqlite3 new.db回车
sqlite>.read tmp.sql回车
sqlite>.quit回车

此时会产生一个新数据库new.db。不出意外的话这个数据库文件一般可以使用。


总结

以上方法我亲测,成功修复了一个已经损坏了的数据库,主意一定要把导出的tmp.sql文件最后一行的ROLLBACK;修改成Commit;祝大家遇到这类问题都好运。
sqlite数据库很强大,文件型数据库的翘楚,但是也很脆弱…

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值