Как восстановить поврежденную базу данных SQLite3?

Это следующий вопрос к ранее ответили: есть ли утилита командной строки для проверки баз данных SQLite в Linux?

Если в базе данных возникает следующая ошибка:

$ sqlite3 mydata.db "PRAGMA integrity_check" Error: database disk image is malformed 

Есть ли какая-либо обработка очистки, которая может быть выполнена для восстановления базы данных в пригодном для использования состоянии? Даже при потенциальной потере некоторых коррумпированных записей?

благодаря

Если бы какой-либо автоматический метод, SQLite уже мог бы это сделать.

Иногда коррупция только или в основном по индексам, и в этом случае можно было бы получить некоторые или большинство записей, пытаясь сбросить всю базу данных с помощью .dump и использовать эти команды для создания новой базы данных:

 $ sqlite3 mydata.db ".dump" | sqlite3 new.db 

Однако, это не всегда возможно.

Самый простой и надежный способ – восстановить файл базы данных из резервной копии.

У меня был файл sqlite, который был поврежден, и это проявило бы такой симптом.

 select count(*) from corruptTable; return:38000; 

Но когда я попытаюсь загрузить записи с помощью

 select * from corruptTable; 

Он вернет только 7 записей.

Я пробовал несколько вещей, но эти шаги были самыми успешными.

На mac, откройте терминал и запустите эти команды в своей коррумпированной базе данных. (это команды sqlite3, поэтому вы должны иметь возможность использовать другие редакторы sqlite3 или аналогичные команды в других системах).

 1 sqlite3 dbWithCorruptTable.sqlite (Obviously replace "dbWithCorruptTable" to your sqlite3 file that has the corrupt table) 2 .mode insert 3 .output dump_all.sql 4 .dump 5 .exit 6 Manually edit the dump_all.sql file in a text editor and remove the transaction statements. Usually there is a "BEGIN TRANSACTION" statement on the 2nd line of the file and a "ROLLBACK" statement on the last line. Remove these and save the file 

Эти шаги были сделаны с этого веб-сайта: http://www.dosomethinghere.com/2013/02/20/fixing-the-sqlite-error-the-database-disk-image-is-malformed/

Если firebase database серьезно повреждена, то .dump будет содержать ошибки, и некоторые данные могут быть потеряны.

Для более сложных схем данных это означает осиротевшие и / или частичные записи, которые могут запутать приложение.

Может быть предпочтительнее .dump в файл, а затем использовать текстовый редактор для удаления проблемных строк. Найдите ERROR в файле дампа.

Мне удалось восстановить файл истории Chrome (который является файлом базы данных sqlite3) следующим образом:

 sqlite3.exe History ".backup History-new" 

Я знаю, что это старый вопрос, но я все равно хочу поделиться своим решением. Моя проблема заключалась в том, что firebase database sqlite3 kodi (xbmc) была повреждена

.dump не работает в моем случае

file is encrypted or is not a database

Что это за работа?

  1. Создал резервную копию старого файла db
  2. Пусть kodi создаст новый файл db
  3. Проверено на этой стороне формат заголовка файлов sqlite
  4. Открыл оба файла с шестнадцатеричным редактором (благословил) и проверил первые 96 байт
  5. Первые 40 байт, где разные, и я скопировал первые 40 байт из нового файла db в старый файл db
  6. После этого мой файл базы данных снова работал!

Что-то поделилось в этом блоге – http://wordpress.semnaitik.com/2017/02/01/repair-sqlite-database/

Автор говорит, что мы можем исправить поврежденную базу данных SQLite вручную. Как? Сначала мы можем экспортировать базу данных SQLite в файл SQL. И после этого мы можем импортировать его обратно в SQLite из SQL. Не знаю, полезно это или нет. Вы можете попробовать его один раз. Сообщение в блоге содержит полезную информацию о базе данных SQLite и ее коррупции.

Благодарю.

Это сработало для меня:

Загрузите пакет инструментов sqlite3 отсюда и поместите его в любую папку. Поместите поврежденную базу данных в одну папку.

Откройте командную строку.

Введите следующее:

sqlite3.exe

(Нажмите Ввод)

NAME_OF_YOUR_CORRUPTED_DATABASE> “.dump” | sqlite3 new.db

(Нажмите Ввод)

Все другие решения не помогли мне.

Следующее исправление помогло восстановить мою базу данных без использования каких-либо инструментов командной строки.

Когда я работал с одной из моих таблиц, я получил сообщение об ошибке «Образ диска диска с поврежденным диском», поэтому я запустил [PRAGMA integrity_check], который вернулся

Главный фриланс: количество бесплатных страниц в заголовке слишком мало

На дереве стр. 16198 ячейка 1: 2-я ссылка на стр. 14190

Страница 16988 никогда не используется

Страница 46637 никогда не используется

строка 4493 отсутствует в index indexname1

строка 4493 отсутствует в index indexname2

строка 4493 отсутствует в index indexname3

Сначала я сохранил схему для таблицы с плохими индексами, чтобы я мог воссоздать эти индексы. Затем я опустил индексные имена 1, 2 и 3 с помощью команды [drop index _]. Я экспортировал таблицы один за другим в файлы JSON, а затем урезал каждую таблицу. Выполнение проверки целостности в этот момент было успешным. Затем я добавил три индекса с помощью команды [create index_] и импортировал записи каждой таблицы из экспорта файлов JSON. Выполнение команды проверки целостности по-прежнему возвращает «ok» со всеми восстановленными документами.

Давайте будем гением компьютера.