-wal文件的后果在SQLite中消失了吗?

时间:2013-07-31 15:59:25

标签: sqlite wal

如果使用预先写入事务的SQLite数据库因未检查点的事务而中断(由于电源故障或其他原因),然后在缺少临时-wal文件的情况下重新打开,数据库将完全打开到其状态最后一个检查点,还是会以某种方式被破坏?

我们正试图让SQLite与iCloud合作(是的,我们知道你不应该这样做,但我们也制作了一个Windows和一个Android应用,需要一个跨平台的数据库解决方案),我们认为WAL提供了一种避免必须维护我们数据库的两个副本的潜在方法 - 我们将-wal文件保留在iCloud之外,但将主数据库存储在其中,从而避免了iCloud备份回滚期刊(或备份)的问题数据库中期没有这些期刊的数据库。)

3 个答案:

答案 0 :(得分:3)

file format documentation提到“热门WAL文件”,但这仅适用于未提交的数据。

数据库文件本身不包含有关-wal文件中已提交数据的任何信息,即检查点之前的事务通常根本不会更改主数据库文件。 因此,删除-wal文件只会将数据库恢复到最后一个检查点之后的状态(已过时,但一致);之后提交的所有交易都将丢失。

答案 1 :(得分:1)

参见" Checkpointing" SQLite的Write-Ahead Logging部分。根据我的理解,WAL文件中的数据根本就不会被提交。

换句话说,您丢失了尚未提交的.WAL文件中的数据,但主数据库本身应该完全正常。

答案 2 :(得分:0)

在检查点操作期间删除WAL文件时,可能会导致数据库损坏。如果未完成db修改,则需要WAL文件来完成更改,否则db文件处于临时状态。
DB和WAL文件创建db状态的完整图片。
它也在{ {3}}" SQLite必须查看日志文件才能从崩溃或电源故障中恢复。"