Восстановление файла баз данных SQLite

Началось все с электронного документооборота (ЭДо) EDI через провайдера Exite.

Все интегрировано в 1С, но события связанные с ЭДо хранятся в файле sqlite.db.Запись проходит через провайдера sqlite3.

Работало все около года без проблем (имеется ввиду без проблем с SQLite).

И вот в один день звонок: мы не можем загрузить заказы. Посмотрел — ошибка записи в файл sqlite.db.

Проверил запись других данных — работает. Открыл для просмотра файл: оказалась порушена одна таблица — при ее открытии сообщение:

database disk image is malformed

У админа бекапов не оказалось.

Перерыл много всего в интернете. Общий подход к решению: сделать дамп, и создать новую базу из дампа.

Но конкретного примера под windows найти не удавалось. Случайно наткнулся на тему:  Восстановление битой истории Skype (main.db)

Упрощенный вариант оттуда помог запустить файл. Решение ниже:

1. Скачать sqlite3 command line для Windows или «apt-get install sqlite3» для *nix. Я сначала экспериментировал под виндой, но впоследствии пришлось перейти в консоль Linux, т.к. виндовая sqlite3 не совсем хорошо себя показала.
2. Под Windows копируем sqlite3.exe в папку с копией базы. Затем запускаем cmd (Пуск > выполнить).
Под линуксом — просто выполняем:

cd путь-к-папке-с-базой-и-sqlite3.exe
sqlite3 main.db .dump>>myDumpSQLite.sql

(Именно «main.db[пробел].dump, не перепутайте)

3. Открываем файл myDumpSQLite.sql в нормальном текстовом редакторе, например Notepad++. В самом конце файла у меня стояла команда:

ROLLBACK;

Кто знаком с SQL, знает зачем нужно удалить эту последнюю строку в файле и вместо неё написать:
COMMIT;

(Можно и вовсе отказаться от транзакции, но тогда будет очень долгий импорт данных в новую базу.)

4. Создаём новую, чистую базу из файла myDumpSQLite.sql (рекомендуется под Linux).

sqlite3 main-recovered.db <myDumpSQLite.sql

.jpg

Данное решение помогло сразу. Что еще может быть полезным:

1. Программа для просмотра/редактирования файлов *.db: xBaseView

2.Расширения для FireFox: SQLite Manager