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

问题描述:

我有一个sqlite数据库的问题。Sqlite3从转储文件重新创建空数据库

首先,我的数据库崩溃了,无论我试图用它做什么,它说:“数据库磁盘映像格式不正确”。这可能是因为我写了大量文本,其中有很多“\ n”表格中的两列。

所以我在这里和其他网站上阅读了几个主题,我倒数据库并重新创建它,但它说类似“该行太长(最多1000个字符)” - 现在我无法重新创建这个错误。但奇怪的是,我正在使用sqlite3的3.19.3版本,并且我在另一个线程上阅读,在以前的版本中,解决了“\ 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字节? –

+0

是的,确切地说。带有* .journal扩展名的文件在此过程中创建,但随后会自动删除。 –

+0

这应该是不可能的,没有得到一个错误信息。 –

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

如果你真的想从转储文件得到不完整的数据,编辑从

ROLLBACK; -- due to errors 

最后一行改为

COMMIT; 
+0

就是这样!非常感谢你 –