用户打开项目时,提示 “sqlite databasedisk image is malformed”,意思是说数据库文件的内部数据格式被损坏了,出现这种问题的概率约为两万分之一,一般有以下几种原因:
1. sqlite数据库在写入时断电;
2. sqlite数据库所存的磁盘空间不够。
3. 磁盘有坏磁道;
4.系统崩溃,数据库回滚日志被删除;
出现这种情况时,尽量不要再次操作数据库了,可用如下方法修复后再使用。
首先导出数据
sqlite3 D:\\my.sqlite3
sqlite>.output D:\\ //有的是 .output “”
sqlite>.dump
sqlite>.quit
打开看最后一行,若是Rollback则将其改为Commit, 保存后再导入到一个新库中;
sqlite3 D:\\mynew.sqlite3
sqlite>.read D:\\ //有的是 .read “”
sqlite>.quit
这时新生成的数据库mynew.sqlite3一般可用。执行上述命令需先下载放到C:\Windows\system32下,或者打开cmd用cd命令切换到该目录。
公司软件单机版用的sqlite3,一个客户那里半年下来十几个工程文件中有4个都出现了该错误,而其他地方客户暂未出现;用“PRAGMA integrity_check”检查发现,有的是表损坏,有的是索引损坏,有的是缺页,这一个地方报错概率高达20%(两万分之一的概率是忽悠人?),开始怀疑代码问题,仔细检查一遍,由于软件版本各客户都是一致的,暂未找出原因,只能按照上述方法导出sql再导入修复下使用。