Sqlite3从转储文件重新创建空数据库

时间:2017-06-17 09:09:43

标签: database sqlite malformed

我的sqlite数据库有问题。

首先,我的数据库以某种方式崩溃,无论我试图用它做什么,它说:“数据库磁盘映像格式错误”。这可能是因为我正在写一个表格中有两列很多“\ n”的大文本。

所以我在这里和其他网站上阅读了一些主题并且我想要转储数据库并重新创建它,但是它说“行太长(最多1000个字符)” - 现在我无法重新创建这个错误。但奇怪的是我使用3.19.3版本的sqlite3,我在这里阅读另一个帖子,在之前的版本中,解决了“\ n”字符的问题。

现在我的另一种方法是查看转储文件并使用正则表达式来删除所有这些文本。现在我的转储文件将其大小从750 Mb减少到3,5 Mb。当我尝试从新的转储文件和旧的(这个大的)重新创建数据库时,结果是一个空文件。控制台不会为我提供任何结果或错误。所以下面我将发布我的每一步。

sqlite3> .open testDatabase.sqlite
sqlite3> .mode insert
sqlite3> .output dump.sql
sqlite3> .exit

mv testDatabase.sqlite corruptDatabase.sqlite

sqlite3> .open testDatabase.sqlite
sqlite3> .read dump.sql

OR

*gets rid of huge text values*
sqlite3> .open testDatabase.sqlite
sqlite3> .read small_dump.sql

两者都导致一个空的testDatabase.sqlite文件。正如我之前提到的,没有错误,所以我不知道发生了什么。

请帮忙,我不知道该如何处理。

1 个答案:

答案 0 :(得分:5)

.dump命令遇到损坏的数据库时,它会输出SQL命令(只要它可以生成它们),但随后输出ROLLBACK命令以防止创建不完整的数据库。

如果您确实想要从转储文件中获取不完整的数据,请对其进行编辑并更改

中的最后一行
ROLLBACK; -- due to errors

COMMIT;