2011-10-15 91 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

相關問題