2011-10-15 18 views
32

Widzę dziwne zachowanie z moją aplikacją i stan jej pliku bazy danych po uruchomieniu niektórych testów, które zamykają bazę danych, usuwają ją i zastępują ją urządzeniem testowym. Kiedy sprawdzam plik bazy danych za pomocą narzędzia na moim komputerze do debugowania, nie pasuje on do tego, co sama aplikacja zgłasza. Możliwe, że to dziwne zachowanie jest związane z this bug.Jakie są rozszerzenia .db-shm i .db-wal w bazach danych Sqlite?

zauważyłem, że istnieją dwa pliki o tej samej nazwie bazowej jako bazy danych (z normalną .db przedłużenia.) Rozszerzenia plików są .db-shm i .db-wal, a każdy jest nowszy niż datownik pliku, .db.

Zakładam, że to jakiś rodzaj plików tymczasowych. Zastanawiam się jednak, czy wniosek został rozwiązany, czy nie powinien zostać usunięty? Co ważniejsze, zakładam, że jakiekolwiek dane w nich przechowywane są aktualizowane w pliku .db, zanim aplikacja zostanie zakończona przez system operacyjny. Czy to jest poprawne?

+0

@ satur9nine to naprawdę dziwne .. Poproszono mnie o zaktualizowanie kodu innej osoby. Podczas testów zdałem sobie sprawę, że jego wykorzystanie podstawowych danych działało dobrze z iOS 6.x .., ale potem, kiedy testowałem to na iOS 7 .x .. spowodowało powyższe '.db-shm' i' .db-wal' .. czy stało się to z kimś innym? – abbood

+2

Na iOS 7 wydają się zawierać wszystkie transakcje. Plik db jest dla mnie pustą bazą danych. Muszę pobrać wszystkie trzy pliki, aby zobaczyć "prawdziwą" zawartość bazy danych. –

Odpowiedz

21

Masz rację, są to pliki tymczasowe utworzone przez SQLite. Jeśli usuwasz ręcznie główną bazę danych, powinieneś usunąć te również. Z tego, co mogę zebrać, WAL jest zamiennikiem dziennika wycofania, który umożliwia SQLite cofanie zmian, gdy transakcja się nie powiedzie. W jaki sposób SQLite je wykorzystuje i dlaczego są tak długo przechowywane, zależy od autorytetów SQLite, ale ogólnie SQLite wydaje się być całkiem niezłe, więc nie martwię się o nie zbytnio. Aby uzyskać więcej informacji zajrzyj tutaj:

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

Pliki te są nową cechą SQLite 3.7. Nie jestem pewien, czy ich istnienie wiąże się z błędem, który wskazujesz, ale raport o błędzie sugeruje, że tak się dzieje.

+2

Ale co z plikiem .shm. Czy możesz rzucić trochę światła na to? –

+0

Dla łącza: Plik mmapped znajduje się w tym samym katalogu co baza danych i ma taką samą nazwę jak baza danych z dodanym przyrostkiem "-shm". – satur9nine

Powiązane problemy