2017-06-17 73 views
1

我有一個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

這應該是不可能的,沒有得到一個錯誤信息。 –

回答

2

.dump命令遇到損壞的數據庫時,它會輸出SQL命令(儘可能生成它們),但會輸出ROLLBACK命令以防止創建不完整的數據庫。

如果你真的想從轉儲文件得到不完整的數據,編輯從

ROLLBACK; -- due to errors 

最後一行改爲

COMMIT; 
+0

就是這樣!非常感謝你 –

相關問題