19

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

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

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

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

ありがとう

4

2 に答える 2

26

多くの情報源を調べた結果、次のことが真実であると私は信じています。

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

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

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

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

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

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

于 2012-10-17T09:53:56.013 に答える