web-dev-qa-db-ja.com

SQLiteDBの-shmおよび-walファイル

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

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

チェックポイントを実行した後、-shmおよび-walファイルに含まれるコンテンツを誰かに提案できますか。

提供されたリンクは役に立ちます。

ありがとう

13
Manik Sidana

多くの情報源を検索した後、私は次のことが真実であると信じています。

  1. -shmファイルには、-walファイルへのインデックスが含まれています。 -shmファイルは、-walファイルを読み取るときのパフォーマンスを向上させます。
  2. -shmファイルが削除されると、次回のデータベースアクセス時に再度作成されます。
  3. checkpointを実行すると、-walファイルを削除できます。

安全なバックアップを実行するには:

  1. バックアップの作成にはSQLiteバックアップ関数を使用することをお勧めします。 SQLiteライブラリは、オンラインデータベースのバックアップを作成することもできます。
  2. (1)を使用したくない場合は、データベースハンドルを閉じるのが最善の方法です。これにより、データベースファイルのクリーンで一貫性のある状態が保証され、-shmファイルと-walファイルが削除されます。その後、cpscpなどを使用してバックアップを作成できます。
  3. SQLiteデータベースファイルをネットワーク経由で送信する場合は、checkpointの後にvacuumコマンドを実行する必要があります。これにより、データベースファイルの断片化が解消され、サイズが縮小されるため、ネットワークを介して転送されるデータが少なくなります。
18
Manik Sidana

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

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

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

5
CL.