首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLite DB中的-shm和-wal文件

SQLite DB中的-shm和-wal文件
EN

Stack Overflow用户
提问于 2012-10-17 14:20:15
回答 2查看 31.2K关注 0票数 19

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

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

谁能建议运行checkpoint后-shm和-wal文件包含哪些内容?

提供的任何链接都会很有帮助。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-18 14:00:03

在查阅了大量资料后,我相信以下情况是正确的:

  1. -shm文件包含-wal文件的索引。-shm文件可提高读取-wal文件时的性能。
  2. 如果删除了-shm文件,则下次访问数据库时会重新创建该文件。
  3. 如果正在运行checkpoint,则可以删除-wal文件。<代码>H213<代码>G214

要执行安全备份,请执行以下操作:

  1. 建议您使用SQLite备份功能进行备份。
  2. 如果你不想使用(1),那么最好的方法是关闭数据库句柄。这可确保数据库文件的干净和一致状态,并删除-shm-wal文件。然后可以使用cpscp等创建备份。
  3. 如果SQLite数据库文件打算通过网络传输,则应在执行之后运行SQLite vacuum命令。这将删除数据库文件中的碎片,从而减小其大小,从而减少通过网络传输的数据。
票数 25
EN

Stack Overflow用户

发布于 2012-10-17 17:53:56

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

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

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12928294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档