n1ro°
RU

Ошибки · Решение

SQLite SQLITE_BUSY (5): база занята другой connection

Это конфликт с внешней connection: SQLite не получил необходимый file/database lock в текущий момент.

Редакция N1RO · Проверено

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

SQLITE_BUSY (5) означает, что SQLite не может продолжить чтение/запись из-за concurrent activity другой database connection, обычно в другом процессе.

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

Это конфликт с внешней connection: SQLite не получил необходимый file/database lock в текущий момент.

Возможные причины

  • Другая connection держит write transaction.
  • Второй процесс начинает запись пока первый writer ещё не завершился.
  • Busy timeout отсутствует или слишком мал для ожидаемой конкуренции.

Что проверить

  • Определите, какие процессы/connection одновременно работают с файлом.
  • Проверьте transaction duration и режим journal/WAL.
  • Смотрите, на каком statement впервые возникает BUSY: begin, write или commit.

Безопасные шаги

  1. Сократите транзакции и завершайте COMMIT/ROLLBACK быстро.
  2. Для ожидаемого краткого contention настройте `sqlite3_busy_timeout`/busy handler.
  3. Для предсказуемого writer acquisition рассмотрите BEGIN IMMEDIATE там, где это соответствует логике.

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

Когда нужен сервис

  • Если SQLITE_BUSY возникает постоянно при штатной нагрузке, архитектуре может требоваться очередь записей или серверная СУБД.

Похожие ошибки

  • /errors/sqlite-locked-6/
  • /errors/sqlite-readonly-8/
  • /errors/sqlite-interrupt-9/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.