Как избежать повреждения SQLite3 в многопроцессорной среде? - PullRequest
0 голосов
/ 22 января 2020

Прежде всего, я прочитал документ "https://www.sqlite.org/howtocorrupt.html". Но я не уверен, что понимаю все как есть.

У меня есть библиотека, позволяющая процессу подключаться к БД. Также несколько разных процессов используют его сейчас.

Режим ведения журнала - УДАЛИТЬ (по умолчанию).

Все процессы не должны открывать БД без библиотеки. Таким образом, все обращения осуществляются через sqlite3_open_v2 с флагами ниже. В настоящее время все соединения с базой данных открываются с помощью sqlite3_open_v2 с флагом ниже.

SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE

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

У меня нет копии файла БД. Также я никогда не создаю ссылку на файл. Все процессы используют один и тот же файл по одному пути.

Я не менял режимы потоков, поэтому он должен быть сериализован.

Имя файла базы данных никогда не менялось после создания.

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

В настоящее время я знаю, что db поврежден в сообщении журнала, когда sqlite3_step возвращает 11, что SQLITE_CORRUPT. Есть ли подозрительные точки, которые я пропустил?

...