admin管理员组文章数量:1534194
天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
文章目录
- 一、Linux环境中修复
- 1. sqlite3版本检查
- 2. 文件完整性检查
- 3. 连接数据库
- 4. 通过db文件生成sql文件
- 5. 通过处理sql获取数据完整sql
- 二、Windows环境中修复
- 1. sqlite3版本检查
- 2. 文件完整性检查
- 3. 连接数据库
- 4. 通过db文件生成sql文件
- 5. 创建新文件
- 6. 连接新文件
- 7. 通过处理sql获取数据完整sql
在不同系统中修复文件的命令有些许差异
但不管在哪个系统中,都需要先安装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日志进行一一读取逆向写入,故恢复时间略久,需耐心等待
感谢阅读,祝君暴富!
版权声明:本文标题:修复sqlite3数据库db文件(sqlite3的db文件打不开) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725790239a1042941.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论