运行wal_checkpoint(FULL)后,我正在使用cp命令备份SQLite DB。 DB正在WAL模式下使用,因此我的文件夹中还有其他文件,如-shm和-wal。 当我运行wal_checkpoint(FULL)时,WAL文件中的更改将提交到数据库。我想知道运行检查点后-wal和-shm文件是否被删除了。如果没有,那么它们包含什么?
我知道我的备份过程不好,因为我没有使用SQLite备份API。这是我的代码中的一个错误。
任何人都可以建议运行检查点后-shm和-wal文件包含哪些内容。
提供的任何链接都会有所帮助。
由于
答案 0 :(得分:17)
在搜索了大量资料后,我认为以下情况属实:
-shm
文件包含-wal
文件的索引。 -shm
文件在读取-wal
文件时提高了性能。-shm
文件被删除,则会在下次访问数据库时再次创建该文件。checkpoint
,则可以删除-wal
文件。执行安全备份:
-shm
和-wal
文件。然后可以使用cp
,scp
等checkpoint
之后运行 vacuum 命令。这样可以消除数据库文件中的碎片,从而减小其大小,从而通过网络传输更少的数据。答案 1 :(得分:5)
-shm
文件不包含任何永久数据。
当最后一个连接关闭时,数据库会自动检查点,然后删除-wal
文件。
这意味着在检查点之后,如果不存在其他连接,-wal
文件不包含任何重要数据。
如果可能,您应该在备份之前关闭连接。