n1ro°
RU

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

SQLite SQLITE_LOCKED (6): конфликт lock внутри connection/shared cache

В отличие от SQLITE_BUSY, блокирующий конфликт находится в том же connection/shared-cache контексте.

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

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

SQLITE_LOCKED (6) означает конфликт внутри той же database connection или между connections, использующими shared cache.

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

В отличие от SQLITE_BUSY, блокирующий конфликт находится в том же connection/shared-cache контексте.

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

  • Statement продолжает читать объект, который другой operation пытается изменить.
  • Shared-cache connection удерживает lock на записи/схеме.
  • Код повторно использует connection между потоками без корректной координации.

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

  • Найдите одновременно активные prepared statements на connection.
  • Проверьте, закрываются ли cursors/statements после чтения.
  • Если включён shared cache, установите, нужен ли он вообще приложению.

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

  1. Завершите/финализируйте читающий statement до конфликтующей schema/write операции.
  2. Сериализуйте работу с connection согласно threading model SQLite.
  3. Уберите shared-cache зависимость, если она создаёт ненужные внутренние locks.

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

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

  • Повторяющийся SQLITE_LOCKED в многопоточном коде требует проверки жизненного цикла connection и statements.

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

  • /errors/sqlite-busy-5/
  • /errors/sqlite-readonly-8/
  • /errors/sqlite-interrupt-9/

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

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

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

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