2013-03-08 134 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

相关问题