我可以不吃啊 发表于 2024-7-26 10:00:05

修复sqlite3数据库db文件(sqlite3的db文件打不开)

天行健,君子以自强不息;阵势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理条记,分享记载为主,如有错误请指正,共同学习进步。


在不同系统中修复文件的下令有些许差异
但不管在哪个系统中,都须要先安装sqlite3工具,才能利用以下下令
以下下令中sqlite.db就是损坏的db文件名
一、Linux环境中修复

在linux系统中实行以下
1. sqlite3版本检查

检查sqlite3版本
sqlite3 --version

进行完整性检查的版本不低于3.25.2
2. 文件完整性检查

完整性检查下令,其中sqlite.db是数据库文件的名称
sqlite3 sqlite.db

"PRAGMA integrity_check;"
如果报以下错误则表示文件完整性报错,文件损坏
Error: database disk image is malformed
3. 连接数据库

利用sqlite3工具连接数据库
sqlite3 sqlite.db

4. 通过db文件生成sql文件

依次输入以下下令,将sql语句输出到old.sql中
.mode insert

回车
.output ./old.sql

回车
.dump

参数解释:
.mode insert

:表示后续的查询结果将以插入语句的情势进行输出
.output ./old.sql

:表示将查询结果或其他输出重定向到指定的文件中
.dump

:该下令将数据库的结构和内容转储为 SQL 语句,可以备份数据库或将其迁移到其他 SQLite 数据库
实行退却出工具
.exit

5. 通过处理sql获取数据完整sql

编辑 old.sql 文件,并输出为 new.sql 文件
cat ./old.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT >./new.sql
下令从old.sql 文件中读取内容,过滤掉包含 “TRANSACTION”、“ROLLBACK” 和 “COMMIT” 的行,然后将结果生存到new.sql 文件中,目的是生成一个不包含事务语句的导出文件
从new.sql 生成新的修改好的repaired.db 数据库文件
sqlite3 ./repaired.db ".read ./new.sql
"
最终生成的repaired.db 即为修复后的数据库文件
二、Windows环境中修复

在在windows系统中实行以下
1. sqlite3版本检查

检查sqlite3版本
sqlite3 --version

进行完整性检查的版本不低于3.25.2
2. 文件完整性检查

完整性检查下令,其中sqlite.db是数据库文件的名称
sqlite3 sqlite.db

"PRAGMA integrity_check;"
如果报以下错误则表示文件完整性报错,文件损坏
Error: database disk image is malformed
3. 连接数据库

利用sqlite3工具连接数据库
sqlite3 sqlite.db

4. 通过db文件生成sql文件

依次输入以下下令,将sql语句输出到old.sql中
.mode insert

回车
.output ./old.sql

回车
.dump

参数解释:
.mode insert

:表示后续的查询结果将以插入语句的情势进行输出
.output ./old.sql

:表示将查询结果或其他输出重定向到指定的文件中
.dump

:该下令将数据库的结构和内容转储为 SQL 语句,可以备份数据库或将其迁移到其他 SQLite 数据库
先不退出,接着实行下面的下令
5. 创建新文件

创建一个新的db文件用于存储新的修复后的数据
.open newdb.db
回车,生成一个新的db文件newdb.db
然退却出
.exit

6. 连接新文件

通过sqlite3连接新文件,也就是新的数据库newdb.db
sqlite3 newdb.db
7. 通过处理sql获取数据完整sql

编辑 old.sql 文件,并输出为 new.sql 文件
cat ./old.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT >./new.sql
下令从old.sql 文件中读取内容,过滤掉包含 “TRANSACTION”、“ROLLBACK” 和 “COMMIT” 的行,然后将结果生存到new.sql 文件中,目的是生成一个不包含事务语句的导出文件
从new.sql中生成新文件内容
.read ./new.sql
最终newdb.db 即为修复后的数据库文件
注:
由于修复的原理是通过sql日记进行一一读取逆向写入,故恢复时间略久,需耐心等候
感谢阅读,祝君暴富!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 修复sqlite3数据库db文件(sqlite3的db文件打不开)