Jak mogę sprawdzić, czy plik dbite SQLite jest prawidłowy / spójny

24

Mam kilka plików db3 w wersji sqlite 3, które skopiowałem z działającego systemu produkcyjnego na żywo (znam zły sysadmin zły sysadmin) z różnych powodów. Czy istnieje jakieś polecenie sqlite, które mogę uruchomić, aby sprawdzić, czy wszystkie dane można odczytać z tych plików (nie mam nic przeciwko, jeśli zajmie to trochę czasu).

Zastanawiałem się nad zhakowaniem perla, który zrzuca wszystkie dane, a następnie ponownie je importuje do nowych plików. Myślę, że sqlite zgłosi wyjątek, jeśli napotka uszkodzone dane. Czy jest lepszy sposób?

Jestem CentOS 5.3 i sqlite-3.3.6-2

hellomynameisjoel
źródło

Odpowiedzi:

34

Myślę, że chcesz spróbować:

pragma integrity_check;

Z dokumentacji :

Ta pragma sprawdza integralność całej bazy danych. Pragma integrity_check szuka rekordów poza kolejnością, brakujących stron, źle sformułowanych rekordów, brakujących wpisów indeksu oraz błędów ograniczeń UNIKALNE i NIE NULL. Jeśli pragma integrity_check znajdzie problemy, zwracane są ciągi znaków (jako wiele wierszy z jedną kolumną na wiersz), które opisują problemy. [...]

Zobacz także komendę PRAGMA quick_check, która wykonuje większość sprawdzania PRAGMA integrity_check, ale działa znacznie szybciej.

hernan43
źródło
3
Zobacz także sqlite.org/faq.html#q21
Teddy