19

在运行 wal_checkpoint(FULL) 后,我正在使用 cp 命令备份 SQLite 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 数据库文件,则应checkpoint. 这消除了数据库文件中的碎片,从而减小了它的大小,因此您通过网络传输的数据更少。
于 2012-10-18T06:00:03.187 回答
8

-shm文件不包含任何永久数据。

当最后一个连接关闭时,数据库会自动设置检查点,-wal然后删除文件。这意味着在检查点之后,如果不存在其他连接,则该-wal文件不包含任何重要数据。

如果可能,您应该在进行备份之前关闭连接。

于 2012-10-17T09:53:56.013 回答