2013-03-08 16 views
5

Używam SQLite i aplikacji php działającej w tle. Zablokowałem aplikację za pomocą (Ctrl-c) i właśnie zauważyłem, że mam database.sqlite i database.sqlite-journal.Jak usunąć plik -juralny bez narażania bazy danych?

W tej chwili Jak mogę usunąć plik-dziennik bez narażania bazy danych?

Dziękujemy!

P.S. SQLite w wersji 3.7.9

EDIT:

-rw-r--r--. 1 damiano damiano 51M 8 mar 18.15 test.sqlite2 
-rw-r--r--. 1 damiano damiano 2,6K 8 mar 18.15 test.sqlite2-journal 
[[email protected] backup]$ sqlite3 test.sqlite2 
SQLite version 3.7.13 2012-06-11 02:05:22 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> 
[[email protected] backup]$ ls -lh 
-rw-r--r--. 1 damiano damiano 51M 8 mar 18.15 test.sqlite2 
-rw-r--r--. 1 damiano damiano 2,6K 8 mar 18.15 test.sqlite2-journal 
[[email protected] backup]$ 

Odpowiedz

9

Wykonanie tego polecenia:

sqlite3 test.sqlite2 vacuum 

To sprawi, że baza danych tak małe, jak to możliwe i zastosować ewentualne zaległe transakcje lub wycofywanie zmian w -journal pliku (i usunąć go w procesie). Możesz faktycznie wykonać dowolną inną transakcję, która coś robi (ale proste podłączenie/rozłączenie NIE jest wystarczające), ale próżnia wydaje się najłatwiejszym podejściem.

+0

Odkurzanie a) może trochę potrwać, jeśli DB się zwiększy b) może wymagać potrójnego rozmiaru DB podczas pracy (DB, tymczasowa kopia DB, dziennik wycofania podczas przepisywania oryginalnego pliku) i c) zablokuje tylko DB, blokowanie dostępu przez aplikację PHP OP przy uruchomieniu – Cheetah

+0

@cheetah: true. Ale dostarczyłem również inną opcję: uruchom dowolną nietrywialną transakcję. Proste podłączanie/rozłączanie nie wystarcza. – mvp

1

Wystarczy otworzyć bazę danych (z programu lub za pomocą narzędzia sqlite3 wiersza poleceń). SQLite następnie wycofuje zmiany przerwanej transakcji, a następnie usuwa dziennik.

+0

Proszę spojrzeć na moją edycję. Wygląda na to, że plik -journal nie był. Zawsze to widzę. – Dail

+0

Działa dla mnie, ale musiałem dwukrotnie uruchomić 'sqlite3' * *. Dziwne ... –

+0

Nie działa dla mnie; wypróbowane instrukcje select w DB, nie zajmował się kroniką. –