Как объединить содержимое файла Wite SQLite 3.7 в основной файл базы данных
С включенным WAL (Write-Ahead-Logging) в SQLite 3.7 (который по умолчанию для Core Data на iOS 7), как мне объединить / зафиксировать содержимое из файла -wal обратно в основной файл базы данных?
4 ответа
Сделайте контрольную точку, т.е. выполните PRAGMA wal_checkpoint.
Из командной строки сделайте это:
sqlite3 MyDatabase.sqlite
VACUUM;
- CTRL-D для выхода из консоли sqlite.
Готово!
Файл -wal должен теперь иметь размер 0, и все должно быть в вашем основном файле базы данных.
В приложении "Браузер БД для SQLite" откройте базу данных и переключитесь между режимом журнала с "WAL" на "Выкл.", Нажмите кнопку "Применить" и снова переключитесь на "WAL".
Я пробовал варианты VACUUM и Checkpoint, ни один из них не работал у меня.
Ответ @Blazej привел меня к правильному решению. Подводя итог, вам нужно сделать следующее
Предварительное условие: убедитесь, что каталог содержит как файл .sqlite, так и файл -wal.
Вариант 1: Использование команды sqlite3
Введите следующие команды из терминала. Убедитесь, что база данных не подключена из вашего приложения (закройте приложение) или любого внешнего приложения, например: «Браузер БД для SQLite». Если база данных подключена более чем из одного сервиса, база данных будет заблокирована, вы не сможете изменить ее настройки.
-
sqlite3 <database_name>.sqlite
Это покажет вам подсказку «sqlite>».
-
PRAGMA journal_mode = OFF;
Теперь вы можете видеть, что файл -wal исчез из вашего каталога, а размер файла .sqlite основной базы данных увеличился.
-
PRAGMA journal_mode=WAL;
Это изменит файл базы данных journal_mode обратно на WAL.
Вариант 2. Использование приложения «Браузер БД для SQLite»
Убедитесь, что база данных не подключена к вашему приложению (закройте приложение) или любым другим службам, таким как команда sqlite3. Если база данных подключена более чем из одного сервиса, база данных будет заблокирована, вы не сможете изменить ее настройки.
Запустите «Браузер БД для SQLite» и откройте файл базы данных.
Перейдите в «Редактировать прагмы» -> «Режим журнала» и установите для него значение «ВЫКЛ».
Теперь вы можете видеть, что файл -wal исчез из вашего каталога, а размер файла .sqlite основной базы данных увеличился.
- Измените настройки обратно, перейдите в «Редактировать прагмы» -> «Режим журнала» и установите для него значение «WAL».