2013-09-25 10 views
5

Przeczytałem wiele wątków na temat nowego domyślnego ustawienia WAL w pakiecie SQLite/rdzeń danych ios7.Baza danych ios7 sqlite z WAL nigdy nie synchronizuje głównego pliku bazy danych

Przede wszystkim wydawało mi się to dobrym pomysłem ... Chociaż od czasu do czasu muszę wykonywać kopię bazy danych w odległym serwisie internetowym zgodnie z moimi potrzebami biznesowymi. W tej chwili tylko wykonuję kopię zapasową pliku SQLITE i nie mogę dodać 2 innych plików do operacji usługi sieciowej, której używam. Oznacza to, że moje kopie zapasowe są wyraźnie nieaktualne, a więc bezsensowne.

Inne osoby sugerują, że powinienem wyłączyć WAL przy użyciu metody journal_mode = DELETE Mimo to nie czuję się z tym dobrze. Czuję, że tracę całkiem przyzwoity występ.

Idealnie chciałbym móc powiedzieć Core Data/SQLite, aby zsynchronizować SHM/WAL z głównym plikiem danych, a następnie wykonać kopię zapasową. Czy istnieje sposób, aby to zrobić bez wydobywania szalonych prywatnych lub nieudokumentowanych API?

+0

Masz jakieś rozwiązanie? –

+0

Mam ten sam problem. Przechodzę z ios 6 na ios 7, ios6 wydaje się mieć tylko plik .sqlite do przechowywania danych. Ale ios7 ma plik .shm i .wal. Używam fileWrapper do zapisywania plików w jednym pliku. Jeśli w iOS7 nie wyłączam * .shm i * .wal, wtedy iOS6 nie może użyć pliku zarchiwizowanego w iOS7 – JimZ

+0

Poszedłem na łatwą opcję (poprzedni tryb domyślny). Nie znalazłem dobrego rozwiązania. –

Odpowiedz

2

Do move the WAL data to the database file otwórz plik bazy danych i wykonaj instrukcję SQL PRAGMA wal_checkpoint(RESTART).

+0

Czy możesz podać przykład, proszę? Wygląda na to, że potrzebuje również bazy danych? Czy możesz go pobrać z managedContext lub coś takiego? –

+3

Nigdy nie jest dobrym pomysłem, aby rozmawiać bezpośrednio z SQLite podczas korzystania z Core Data. Do tego celu powinieneś użyć metod Celu C, dla własnej korzyści. –

2
$ sqlite3 yourFile.sqlite 
SQLite version 3.7.12 2012-04-03 19:43:07 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> PRAGMA wal_checkpoint(RESTART); 
0|20|20 
sqlite> .exit 
$ 
Powiązane problemy