2011-10-15 55 views
32

运行一些关闭数据库,删除它并用测试夹具替换它的测试后,我发现我的应用程序和数据库文件的状态有些奇怪的行为。当我使用调试PC上的工具检查数据库文件时,它与应用程序本身似乎报告的内容不匹配。这种奇怪的行为可能与this bug有关。Sqlite数据库中的.db-shm和.db-wal扩展名是什么?

我注意到,有两个文件具有相同的基本名称数据库(与正常.db扩展名)的文件扩展名是.db-shm.db-wal,每个比.db文件的时间戳更新。

我假设这些都是某种类型的临时文件。但是,我想知道应用程序是否被终止,不应该被删除?更重要的是,我假定在应用程序被操作系统终止之前,在.db文件中更新存储在其中的所有数据。它是否正确?

+0

@ satur9nine这真的很奇怪..我被要求更新别人的代码..在测试期间,我意识到他的核心数据的使用在iOS 6.x上工作得很好......但是当我在iOS 7上测试它时.x ..它导致了上面的'.db-shm'和'.db-wal' ..这是否发生在其他人身上? – abbood

+2

在iOS 7上,这些似乎包含所有事务。 db文件对我来说是一个空的数据库。我需要抓住所有三个文件来查看数据库的“真实”内容。 –

回答

21

你是对的,这些是由SQLite创建的临时文件。如果你手动删除主分区,你应该删除它们。从我可以收集的信息来看,WAL是回滚日志的替代品,它使SQLite能够在事务失败时回滚更改。 SQLite如何使用它们以及为什么它们被存放了很长时间取决于SQLite的作者,但一般来说SQLite看起来非常稳定,所以我不会过多担心它们。欲了解更多的信息在这里看看:

http://www.sqlite.org/fileformat2.html#walindexformat

这些文件的SQLite 3.7的新功能。我不确定它们的存在是否与您指出的错误有关,但错误报告无论如何都提示了解决方法。

+2

但是.shm文件呢。你可以点亮一下吗? –

+0

根据链接:mmapped文件与数据库位于同一目录中,并且与附加有“-shm”后缀的数据库名称相同。 – satur9nine

相关问题