2011-10-15 26 views
32

データベースを閉じて削除してテストフィクスチャに置き換えるテストを実行した後で、アプリケーションとそのデータベースファイルの状態で異常な動作が見られました。デバッグ用のPC上のツールでデータベースファイルを調べると、アプリケーション自体が報告していると思われるものと一致しません。この奇妙な振る舞いはthis bugに関連する可能性があります。 Sqliteデータベースの.db-shm拡張子と.db-wal拡張子は何ですか?

は、私はデータベースと同じベース名を持つ2つのファイルがあることに気づいた(通常 .db拡張子を持つ。)ファイルの拡張子は .db-shm.db-walあり、それぞれが .dbファイルのタイムスタンプよりも新しいです。

私はこれが何らかのタイプの一時ファイルであると仮定します。しかし、私はアプリケーションが終了した場合、彼らは削除されるべきではないかと思いますか?さらに重要なのは、オペレーティングシステムによってアプリケーションが終了する前に、ファイルに格納されているデータが.dbファイル内で更新されたものと仮定します。これは正しいです?

+0

@ satur9nineこれは本当に奇妙です。他の人のコードを更新するよう頼まれました。テスト中に、彼のコアデータの使用がiOS 6.xで正常に機能していたことがわかりましたが、iOS 7 .x ..それは上記の '.db-shm'と' .db-wal'をもたらしました。これは誰にも起こりましたか? – abbood

+2

iOS 7では、すべてのトランザクションが含まれているように見えます。 dbファイルは空のデータベースです。 dbの "本当の"内容を見るために3つのファイルをすべて取得する必要があります。 –

答えて

21

これは正しいです、これらはSQLiteによって作成された一時ファイルです。メインDBを手動で削除している場合は、おそらくこれらも削除する必要があります。私が収集できるものから、WALは、トランザクションが失敗したときにSQLiteが変更をロールバックできるようにするロールバックジャーナルの代替品です。 SQLiteがどのようにそれらを使用しているのか、なぜそれらが長い間保存されているのかは、SQLiteの作者によるものですが、一般的にSQLiteは非常に堅実に見えるので、あまり心配しません。詳細情報についてはこちらをご覧ください:

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

これらのファイルは、SQLiteの3.7の新機能です。彼らの存在があなたが指摘しているバグに関係しているかどうかは不明ですが、バグレポートはとにかく回避策を示唆しています。

+2

しかし、.shmファイルはどうですか?あなたはそれについていくつかの光を投げることができますか? –

+0

リンク別:mmappedファイルはデータベースと同じディレクトリにあり、 "-shm"という接尾辞が付加されたデータベースと同じ名前です。 – satur9nine