2013-03-08 131 views
5

我正在使用SQLite和在後臺運行的php應用程序。我使用(Ctrl-c)阻止了應用程序,我只注意到我有database.sqlite和database.sqlite-journal。如何在不影響數據庫的情況下刪除-journal文件?

目前,如何在不影響數據庫的情況下刪除-journal文件?

謝謝!

P.S. SQLite的版本3.7.9

編輯:

-rw-r--r--. 1 damiano damiano 51M 8 mar 18.15 test.sqlite2 
-rw-r--r--. 1 damiano damiano 2,6K 8 mar 18.15 test.sqlite2-journal 
[[email protected] backup]$ sqlite3 test.sqlite2 
SQLite version 3.7.13 2012-06-11 02:05:22 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> 
[[email protected] backup]$ ls -lh 
-rw-r--r--. 1 damiano damiano 51M 8 mar 18.15 test.sqlite2 
-rw-r--r--. 1 damiano damiano 2,6K 8 mar 18.15 test.sqlite2-journal 
[[email protected] backup]$ 

回答

9

執行以下命令:

sqlite3 test.sqlite2 vacuum 

它會使你的數據庫儘可能小和-journal文件應用可能未完成的事務回滾或(和在過程中刪除)。你實際上可以執行任何其他的事務(但只是連接/斷開連接是不夠的),但真空似乎是最簡單的方法。

+0

真空a)如果數據庫變大,可能需要一段時間才能運行b)運行時可能需要數據庫大小的三倍(數據庫,數據庫的臨時副本,重寫原始文件時的回滾日誌)以及c)將專門鎖定數據庫,在運行時阻止OP的PHP應用訪問 – Cheetah 2015-12-04 03:10:52

+0

@cheetah:true。但我也提供了另一種選擇:運行任何不平凡的事務。簡單的連接/斷開是不夠的。 – mvp 2015-12-04 03:32:31

1

只要打開數據庫(與您的程序或與sqlite3命令行工具)。 然後,SQLite將回滾您中斷的事務的更改,然後刪除日誌。

+0

請看看我的編輯。看來,-journal文件還沒有。我總是看到它。 – Dail 2013-03-08 23:26:46

+0

適用於我,但我不得不運行'sqlite3' *兩次*。奇怪... – 2013-03-09 08:16:58

+0

不適合我;試圖在DB上選擇語句,沒有處理日誌文件。 – 2013-10-18 08:07:32

相關問題