Ошибка занятости (11) или ошибка восстановления занятости (261) при использовании SQLite в режиме WAL - PullRequest
0 голосов
/ 08 октября 2019

У меня есть система, которая работает как конвейер данных, где непрерывные данные откуда-то поступают удаленно, и мне нужно отправить их в другое удаленное место назначения. Иногда пункт назначения может быть недоступен или может быть отключен, поэтому мне необходимо временно сохранить поток данных (при запуске и при сбое питания). В настоящее время я пытаюсь использовать SQLite в качестве средства для сохранения этих данных.

Теперь возникает проблема - данные могут не поступать последовательно, и с моей стороны также проводится небольшой анализ для фильтрации некоторых данныхвне. Данные сохраняются в базе данных параллельно, и если место назначения достижимо, я бы также попытался извлечь (хотя и последовательно здесь) одновременно в качестве входного потока. Когда я пытаюсь использовать режим WAL, я часто получаю ошибку SQLITE_BUSY или SQLITE_BUSY_RECOVERY. Я использую System.Data.SQLite ADO.NET провайдера.

Я попытался использовать семафор, который заставил мое приложение последовательно обращаться к базе данных SQLite, и я больше не вижу ошибку. Тем не менее, скорость кажется низкой - до такой степени, что я не думаю, что она работает для моей производственной среды.

Я также пытался установить безумно занятые таймауты, но, похоже, ничего не делает вall.

Я также пытался отловить для SQLiteException, но исключение не удалось отловить (даже когда я заставил мой отладчик разбивать все типы исключений) - он просто просто печатает ошибку на моей консоли. Это сделало невозможным для меня повторить любой неудачный запрос, когда это произойдет. Редактировать: только ошибки 11 и 261 не приводят к возникновению исключения.

Чтение документации для WAL (точка 9), я испытываю искушениедогадаться, что я установил другое соединение во время очистки базы данных? Одна вещь, которая озадачивает меня - почему база данных делает восстановление там (что вызвало ошибку 261)?

Любой совет будет оценен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...