2013-03-08 3 views
5

私はSQLiteとバックグラウンドで動作するPHPアプリケーションを使用しています。私は(Ctrlキーを押しながらc)を使用してアプリケーションをブロックし、私はちょうど私がdatabase.sqliteとdatabase.sqliteジャーナルを持って気づいた。データベースを危険にさらすことなく-journalファイルを削除するにはどうすればよいですか?

現時点では、データベースを侵害することなくジャーナルファイルを削除するにはどうすればよいですか?

ありがとうございました!

P.S. SQLiteバージョン3.7.9

EDIT:

-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)DBが大きくなると実行に時間がかかるb)実行中にDBサイズを3倍にする必要がある(DB、DBの一時コピー、元のファイルを書き換えている間のロールバックジャーナル)c)排他的にDBをロックする、 – Cheetah

+0

@cheetah:trueを実行している間に、OPのPHPアプリケーションによるアクセスをブロックします。しかし私は別のオプションも提供しました。単純な接続/切断では不十分です。 – mvp

1

ちょうど(あなたのプログラムまたはsqlite3コマンドラインツールを使用して)データベースを開きます。 SQLiteは中断されたトランザクションの変更をロールバックし、その後ジャーナルを削除します。

+0

私の編集を見てください。それは、ジャーナルファイルがされていないようです。私はいつもそれを見る。 – Dail

+0

私のために働くが、 'sqlite3' *を2回*実行しなければならなかった。奇妙な... –

+0

私のために動作しません。 DB上でselect文を試したが、ジャーナルファイルを扱っていなかった。 –

関連する問題