這兩天一個客戶的sqlite數據損壞了,我來幫他做恢復。
一般來說,用sqlite3執行以下命令就修復了。
sqlite3 old.db .dump > newsfeed.sql
sqlite3 new.db < newsfeed.sql
但是我嘗試了好幾次,修復之后的數據庫都是0KB的。
幾經周折我發現,損壞的數據庫dump成sql之后,最后一行變成了ROLLBACK;
好家伙,全給我回滾了啊。
用emeditor把ROLLBACK;改成COMMIT;
再執行sqlite3 new.db < newsfeed.sql
好啦哈哈,終於好了,沒有讓客戶失望。