SQLite DB中的-shm和-wal文件

Man*_*ana 13 c unix sqlite sqlite-journal-mode

我在运行wal_checkpoint(FULL)后使用cp commmand来备份SQLite DB.DB正在WAL模式下使用,因此我的文件夹中还有其他文件,如-shm和-wal.当我运行wal_checkpoint(FULL)时,WAL文件中的更改将提交到数据库.我想知道运行检查点后-wal和-shm文件是否被删除了.如果没有,那么它们包含什么?

我知道我的备份过程不好,因为我没有使用SQLite备份API.这是我的代码中的一个错误.

任何人都可以建议运行检查点后-shm和-wal文件包含哪些内容.

提供的任何链接都会有所帮助.

谢谢

Man*_*ana 17

在搜索了众多来源之后,我认为以下情况属实:

  1. -shm文件包含该文件的索引-wal.该-shm文件在读取文件时提高了性能-wal.
  2. 如果-shm文件被删除,则在下次数据库访问期间会再次创建该文件.
  3. 如果checkpoint运行,则-wal可以删除该文件.

要执行安全备份:

  1. 建议您使用SQLite备份功能进行备份.SQLite库甚至可以备份在线数据库.
  2. 如果您不想使用(1),那么最好的方法是关闭数据库句柄.这可确保数据库文件的清晰且一致的状态,并删除-shm-wal文件.备份然后可以使用制造cp,scp等等.
  3. 如果要通过网络传输SQLite数据库文件,则应在之后运行vacuum命令checkpoint.这将删除数据库文件中的碎片,从而减小其大小,因此您可以通过网络传输较少的数据.


CL.*_*CL. 5

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

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

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