SQLite LinuxWindowsmacOS

SQLite: файлы -wal и -shm — что это и можно ли их удалять

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

В режиме WAL рядом с базой создаются файлы -wal и -shm. Не удаляйте их при работающей БД: часть данных может быть только в WAL.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если не помогло
  5. Если проблема осталась

#Что означает ошибка

Сообщение
Файлы -wal и -shm

В режиме WAL рядом с базой создаются файлы -wal и -shm. Не удаляйте их при работающей БД: часть данных может быть только в WAL.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Режим WALPRAGMA journal_mode возвращает walФайлы WAL/SHM не удалять
Незавершённая записьПроцесс записи завершился без checkpointЗавершить подключения и согласовать checkpoint
Копирование только .sqliteКопируется только основной файл .db при активной записиПрименить согласованную .backup
ПраваСоздание файлов WAL запрещено в каталогеПроверить права и файловую систему

#Пошаговое решение

  1. Определите режим журнала для своей базыОткройте терминал там, где хранится SQLite-файл, и через sqlite3 app.db "PRAGMA journal_mode;" проверьте режим, заменив app.db на настоящий путь. Ответ wal означает журнал упреждающей записи: файл app.db-wal содержит недавно записанные страницы, а app.db-shm служит для координации подключений. Наличие этих файлов — само по себе не ошибка и не признак вируса.
  2. Не удаляйте -wal и -shm вручнуюПока приложение или любой другой процесс использует базу, не стирайте -wal и -shm, даже если они выглядят большими: в WAL могут находиться изменения, ещё не попавшие в основной .db. Не делайте резервную копию только .db через Проводник при активной записи. Вместо этого используйте SQLite backup API либо команду .backup в sqlite3 для согласованной копии.
  3. Если журнал растёт, найдите долгого читателяПроверьте, нет ли в приложении транзакций, оставленных открытыми после SELECT, и все ли курсоры и соединения закрываются. После устранения длительных чтений можно выполнить sqlite3 app.db "PRAGMA wal_checkpoint(TRUNCATE);" в согласованное окно обслуживания. Эта команда может не сократить WAL, если другой процесс удерживает снимок данных; результат pragma показывает состояние контрольной точки. Не пытайтесь принудительно удалять файлы при busy.
  4. Проверьте целостность и надёжность хранилищаЗакройте клиентские соединения штатно, запустите sqlite3 app.db "PRAGMA integrity_check;" и убедитесь, что результат ok. Если база находится на сетевой файловой системе, учтите ограничения WAL на работу между разными компьютерами; обсудите перенос на локальный диск сервера. Если приложение снова быстро накапливает WAL, проверяйте продолжительность транзакций и процесс создания резервных копий, а не размер файла как отдельную ошибку.

#Если не помогло

Не удаляйте файлы -wal и -shm у работающей базы: возможна потеря последних изменений.

#Если проблема осталась

Если «SQLite: файлы -wal и -shm — что это и можно ли их удалять» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.