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

Статус
Новые ответы в этой теме размещать нельзя.

Runa

Администратор
#1
В проекте пользователя несколько объектов стали отображать пустое содержимое: 0 записей из 0. При этом размер файла базы данных rdb не изменился. Также перестала выполняться оптимизация базы.
При открытии соответствующей таблицы объекта сторонним редактором SQLite выдаёт ошибку Database disk image is malformed.
Ошибка Database disk image is malformed.png

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

Решение: сделать дамп файла RunaX_X.rdb, и создать новую базу из дампа.

Действия:

1. Сделать резервную копию базы данных.

2. Переименовать RunaX_X.rdb в runa.db

3. В зависимости от операционной системы:
- Windows: скачать sqlite3 command line http://www.sqlite.org/download.html
- Linux: выполнить apt-get install sqlite3

4. Скопировать sqlite3.exe в папку с копией базы. Затем запустить командную строку (Пуск > Выполнить > cmd).
Код:
cd \путь-к-папке-с-базой\sqlite3.exe
sqlite3 runa.db .dump>>dump.sql
Примечание: синтаксис важен, именно runa.db[пробел].dump !!!
Выполнение операций в командной строке.png
В папке появится файл dump.sql

5. Открыть файл dump.sql в текстовом редакторе (например Notepad++). Если дамп сделан корректно, то в конце файла будет стоять команда:
ROLLBACK;
Необходимо удалить эту последнюю строку в файле и вместо неё написать:
COMMIT;
(можно и вовсе отказаться от транзакции, но тогда будет очень долгий импорт данных в новую базу)

6. Создать новую, чистую базу из файла dump.sql
sqlite3 runa2.db <dump.sql

7. Переименовать runa2.db в RunaX_X.rdb и проверить как восстановились данные.
 
Статус
Новые ответы в этой теме размещать нельзя.