【问题标题】:How to merge contents of SQLite 3.7 WAL file into main database file如何将 SQLite 3.7 WAL 文件的内容合并到主数据库文件中
【发布时间】:2013-11-03 15:41:06
【问题描述】:

在 SQLite 3.7 中启用WAL (Write-Ahead-Logging)(这是 iOS 7 上 Core Data 的默认设置),我如何将 -wal 文件中的内容合并/提交回主数据库文件?

【问题讨论】:

    标签: sqlite ios7 wal


    【解决方案1】:

    从命令行执行以下操作:

    1. sqlite3 MyDatabase.sqlite
    2. VACUUM;
    3. CTRL-D 退出 sqlite 控制台。

    完成!

    -wal 文件的大小现在应该为 0,并且所有内容都应该在您的主数据库文件中。

    【讨论】:

    • 本帖提出了两种解决方案:(1) PRAGMA wal_checkpoint (2) VACUUM and exit。我也在使用 Core Data。我的主要 sqlite 文件是 46 MB,而我的 -wal 文件高达 1.2 GB。我的结果: PRAGMA wal_checkpoint 或 PRAGMA wal_checkpoint(1) 没有效果。 VACUUM 将 -wal 文件的大小从 1.2 GB 减少到 40.8 MB,并将主 sqlite 从 46 减少到 40.5 MB。重复执行任一命令都不会导致任何进一步的减少。但是,如 Johannes 所述,退出 sqlite3 控制台会将 -wal 文件减少为 0。
    • @JerryKrinock 嘿,杰瑞,很高兴收到你的来信。这真的很有趣!您可能想向 sqlite 邮件列表中的人询问有关此问题的信息,并在您发现发生这种情况时更新您的评论。
    • sqlite3 MyDatabase.sqlite vacuum 简称:)
    • 仅供参考:VACUUM 重建数据库文件以减小其大小。 sqlite.org/lang_vacuum.html
    【解决方案2】:

    执行checkpoint,即执行PRAGMA wal_checkpoint

    【讨论】:

    • 在终端运行sqlite3 db.sqlite确保目录包含-wal文件然后运行PRAGMA wal_checkpoint并通过ctrl+d退出数据库
    【解决方案3】:

    在“DB Browser for SQLite”应用中打开数据库并在日志模式从“WAL”切换到“关闭”,然后点击“应用”按钮,然后切换回“WAL” .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多