2012-10-17 17 views
12

wal_checkpoint(FULL)を実行した後、cp commmandを使用してSQLite DBのバックアップをとっています。 DBはWALモードで使用されているので、私のフォルダに-shmや-walのようなファイルがあります。 wal_checkpoint(FULL)を実行すると、WALファイルの変更がデータベースにコミットされます。チェックポイントを実行した後に-walファイルと-shmファイルが失われるかどうか疑問に思っています。そうでない場合は、それらには何が含まれていますか?SQLite DBの-shmと-walファイル

SQLiteバックアップAPIを使用していないため、バックアッププロセスがうまくいかないことがわかりました。これは私のコードのバグです。

誰でも、チェックポイントの実行後に-shmと-walファイルに含まれる内容を提案できますか?

提供されているリンクが参考になります。

おかげ

答えて

14

多くのコンテンツを検索した後、以下の点をリストアップします。
1. -shmファイルに-walファイルへのインデックスが含まれています。 -shmは読み込みファイルのパフォーマンスを向上させます。
2. -shmファイルが削除されると、データベースへの次回のアクセス時に再度作成されます。
3.チェックポイントを実行すると、-walファイルを削除できます。

安全なバックアップ
1.バックアップをとるためにSQLiteバックアップ機能を使用することをお勧めします。 SQLiteライブラリには、オンラインデータベースのバックアップをとるのに十分な機能があります。
2.(1)を使用しない場合は、データベースハンドルを閉じることをお勧めします。これにより、データベースファイルのクリーンで一貫性のある状態が保証され、-shmファイルと-walファイルも削除されます。
3. SQLiteデータベースファイルをネットワーク経由で送信する場合は、vacuumコマンドをチェックポイントの後に実行する必要があります。これにより、データベースファイルの断片化が解消され、サイズが縮小されるため、ネットワーク経由でデータを転送する回数が減ります。それは単なる示唆です。
は、チェックポイントを実行した後に何が含まれているファイルを-walだろ2つの良いライン
http://www.dbtalks.com/uploadfile/ca5be5/write-ahead-logging-concept-in-sqlite/
http://www.mentby.com/Group/sqlite-users/database-disk-image-is-malformed-37x.html

3

-shmファイルには、任意の永続的なデータが含まれていません。

最後の接続が閉じられると、データベースに自動的にチェックポイントが設定され、-walファイルが削除されます。 これは、チェックポイントの後に他の接続が存在しない場合、-walファイルに重要なデータが含まれていないことを意味します。

可能であれば、バックアップをとる前に接続を閉じる必要があります。

+0

の下に参照してください。接続が閉じていないと考えてください。 –

関連する問題