Как я могу проверить, что файл SQLite db3 является действительным / согласованным

24

У меня есть некоторые файлы sqlite version3 db3, которые я скопировал с работающей производственной системы (я знаю плохого сисадмина и плохого сисадмина) по разным причинам. Есть ли какая-нибудь команда sqlite, которую я могу запустить, которая проверит, что все данные могут быть прочитаны из этих файлов (я не против, если это займет некоторое время).

Я собирался взломать какой-нибудь Perl, который выгружает все данные, а затем повторно импортирует их в новые файлы. Я думаю, что sqlite выдаст исключение, если он обнаружит поврежденные данные. Есть ли способ лучше?

Я CentOS 5.3 и sqlite-3.3.6-2

hellomynameisjoel
источник

Ответы:

34

Я думаю, что вы хотите попробовать:

pragma integrity_check;

Из документации :

Эта прагма выполняет проверку целостности всей базы данных. Прагма unity_check ищет записи не по порядку, отсутствующие страницы, искаженные записи, отсутствующие записи индекса, а также ошибки ограничения UNIQUE и NOT NULL. Если прагма unity_check находит проблемы, возвращаются строки (в виде нескольких строк с одним столбцом на строку), которые описывают проблемы. [...]

Смотрите также команду PRAGMA quick_check, которая выполняет большую часть проверки целостности PRAGMA, но работает намного быстрее.

hernan43
источник
3
Смотрите также sqlite.org/faq.html#q21
Тедди