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

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

Runa

Администратор
В проекте пользователя несколько объектов стали отображать пустое содержимое: 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 (в разделе Precompiled Binaries for Windows)
- Linux: выполнить apt-get install sqlite3, либо скачать по ссылке выше, раздел Precompiled Binaries for Linux

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 и проверить как восстановились данные.
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу