Jeśli dziennik jest jedyną przyczyną problemu, możesz spróbować wykonać dziennik SQLite w pamięci lub po prostu go wyłączyć.
PRAGMA journal_mode;
Baza danych PRAGMA.journal_mode;
PRAGMA journal_mode = USUŃ | TRUNCATE | PERSIST | PAMIĘĆ | OFF
Baza danych PRAGMA.journal_mode = USUŃ | TRUNCATE | PERSIST | PAMIĘĆ | WYŁĄCZ
Ta pragma wykonuje zapytanie lub ustawia tryb dziennika dla baz danych powiązanych z bieżącym połączeniem z bazą danych.
Pierwsze dwie formy tego pragma sprawdzają bieżący tryb rejestrowania. W pierwszej formie zwracany jest domyślny tryb journal_mode. Domyślny tryb rejestrowania jest trybem używanym przez bazy danych dodane do połączenia przez kolejne instrukcje ATTACH. Druga forma zwraca bieżący tryb rejestrowania dla konkretnej bazy danych.
Ostatnie dwie formy zmieniają tryb kronikowania. Czwarta forma zmienia tryb kronikowania dla określonego połączenia z bazą danych. Użyj "main" dla głównej bazy danych (bazy danych, która została otwarta przez oryginalne wywołanie interfejsu sqlite3_open(), sqlite3_open16() lub sqlite3_open_v2()) i użyj "temp" dla bazy danych, która przechowuje tabele TEMP. Trzecia forma zmienia tryb księgowania we wszystkich bazach danych i zmienia domyślny tryb księgowania, który będzie używany dla nowych baz danych dodawanych przez kolejne polecenia ATTACH. Nowy tryb dziennika jest zwracany. Jeśli nie można zmienić trybu dziennika, zwracany jest oryginalny tryb dziennika.
Tryb kserowania DELETE jest normalnym zachowaniem. W trybie DELETE dziennik wycofania jest usuwany po zakończeniu każdej transakcji. W rzeczywistości operacja usuwania jest akcją, która powoduje zatwierdzenie transakcji. (Więcej informacji na ten temat zawiera dokumentacja Atomic Commit In SQLite.)
Tryb rejestrowania TRUNCATE zatwierdza transakcje przez skrócenie dziennika wycofania do zerowej długości zamiast usunięcia. W wielu systemach obcinanie pliku jest znacznie szybsze niż usuwanie pliku, ponieważ katalog zawierający nie musi być zmieniany.
Tryb kronikowania PERSIST zapobiega kasowaniu dziennika wycofania na końcu każdej transakcji. Zamiast tego nagłówek dziennika jest zastępowany zerami. Dzięki temu inne połączenia z bazami danych nie spowodują cofnięcia dziennika.Tryb kronikowania PERSIST jest przydatny jako optymalizacja na platformach, gdzie usuwanie lub skracanie pliku jest znacznie droższe niż nadpisywanie pierwszego bloku pliku zerami.
Tryb rejestrowania MEMORY przechowuje dziennik wycofania w niestabilnej pamięci RAM. Oszczędza to dysk we/wy, ale kosztem bezpieczeństwa i integralności bazy danych. Jeśli aplikacja używająca SQLite zawiesza się w trakcie transakcji, gdy ustawiono tryb rejestrowania MEMORY, plik bazy danych najprawdopodobniej ulegnie uszkodzeniu.
Tryb kronikowania OFF powoduje całkowite wyłączenie dziennika wycofania. Nie jest tworzony żaden dziennik wycofywania, a zatem nigdy nie ma dziennika wycofania do usunięcia. Tryb kronikowania w trybie WYŁĄCZ wyłącza funkcje zatwierdzania atomowego i wycofywania SQLite. Polecenie ROLLBACK przestało działać; zachowuje się w nieokreślony sposób. Aplikacje muszą unikać używania polecenia ROLLBACK, gdy tryb dziennika jest wyłączony. Jeśli aplikacja zawiesza się w trakcie transakcji, gdy ustawiony jest tryb kronikowania OFF, plik bazy danych najprawdopodobniej ulegnie uszkodzeniu.
Należy zwrócić uwagę, że tryb dziennik dla bazy danych w pamięci to PAMIĘĆ lub WYŁ. I nie można go zmienić na inną wartość. Próba zmiany trybu dziennik bazy danych w pamięci na dowolne ustawienie inne niż MEMORY lub OFF jest ignorowana. Należy również zauważyć, że tryb dziennik nie może zostać zmieniony, gdy transakcja jest aktywna.