У меня есть 2 процесса, которые подключаются к одной и той же БД. Первый используется для чтения из БД, а второй используется для записи в БД. Первый процесс отправляет процедуры записи для выполнения второго процесса через очередь сообщений в Linux.SQLite issue - DB заблокирован обход
Каждая инструкция SQL принимается в процессе подготовки, этапа, завершения процедуры; Если подготовка и шаг выполняются в цикле 10000 раз, пока это не будет выполнено (это позволило преодолеть проблемы с блокировкой БД).
Чтобы добавить таблицу я сделать следующую процедуру:
первый процесс посылает запрос на второй процесс, чтобы добавить таблицу и вставить мусор в его строк в journal_mode = ВЫКЛ в режиме с помощью MSG-д ,
тогда первый процесс проверяет существующую таблицу, чтобы он мог продолжить свой алгоритм. (Он проверяет в цикле с USleep команды между витками.)
Проблема заключается в том, что второй процесс застревает на этапе выполнения из «ПРАГМА journal_mode = OFF;» потому что он говорит, что БД заблокирована (здесь тоже я использую цикл из 10000 итераций с usleep, чтобы проверить 10000 раз, чтобы БД была бесплатной, как я уже упоминал ранее).
Когда я добавляю к первому процессу в цикле «проверка существующей таблицы», операция закрытия соединения, второй процесс в порядке. Но теперь, когда я добавляю таблицы и значения когда-нибудь, я получаю «обратный запрос запрошенного прерывания запроса» в инструкции шага.
Любая помощь от того, что происходит здесь?
Возможно, ваш процесс хочет отключить journal_mode, пока другой процесс записывается в БД. Попробуйте сделать ROLLBACK перед выключением journal_mode. –
Первый процесс не записывается в БД, имеет только соединение для чтения БД. Второй процесс - это тот, который отключает журнал_мод, а затем записывается в эту БД. –
У вас есть какие-либо результирующие наборы/курсоры, открытые на стороне читателя, ожидая, когда запись произойдет? –