Sql 如何在不影响数据库的情况下删除日志文件?
我正在使用SQLite和一个在后台运行的php应用程序。我已经使用(Ctrl-c)阻止了应用程序,我刚刚注意到我有database.sqlite和database.sqlite-journal 目前,如何在不影响数据库的情况下删除日志文件 谢谢大家! p.S.SQLite版本3.7.9 编辑:Sql 如何在不影响数据库的情况下删除日志文件?,sql,sqlite,Sql,Sqlite,我正在使用SQLite和一个在后台运行的php应用程序。我已经使用(Ctrl-c)阻止了应用程序,我刚刚注意到我有database.sqlite和database.sqlite-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
-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
[damiano@localhost 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>
[damiano@localhost 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
[damiano@localhost backup]$
只需打开数据库(使用您的程序或sqlite3
命令行工具)。
SQLite随后将回滚中断事务的更改,然后删除日志。执行以下命令:
sqlite3 test.sqlite2 vacuum
它将使您的数据库尽可能小,并在
-journal
文件中应用可能未完成的事务或回滚(并在过程中删除它)。实际上,您可以执行任何其他执行某些操作的事务(但仅仅连接/断开连接是不够的),但真空似乎是最简单的方法。请查看我的编辑。看来-日志文件还没有被删除。我总是看到它,它不适合我;已尝试在数据库上执行select语句,但未处理日志文件。要使此方法正常工作,必须执行某些操作,以使SQLite执行“写入”事务。因为您不想更改内容,所以需要回滚事务。一个简单的例子:“开始;创建表强制\u日志\u清理(id整数主键);回滚;“真空A)如果数据库变大,可能需要运行一段时间b)运行时可能需要三倍的数据库大小(数据库、数据库的临时副本、重写原始文件时的回滚日志)和c)将独占锁定数据库,在运行时阻止OP的PHP应用程序的访问running@cheetah:是的。但我也提供了另一种选择:运行任何非琐碎的事务。简单的连接/断开是不够的。