Не удалось сделать контрольную точку

int iReturn = sqlite3_wal_checkpoint_v2(m_poDB, NULL, SQLITE_CHECKPOINT_FULL, &iSizeOfWalLog, &iNumOfCheckpointedFrames);

возвращает с iReturn = 5 (SQLITE_BUSY). Писатель время от времени просыпается, добавляет или удаляет несколько строк в базе данных, делает контрольную точку и снова переходит в спящий режим.

Вопрос 1: Как это возможно, если я использую режим WAL и у меня 4 считывателя и один писатель?

Вопрос 2: В сообщениях журнала я видел, что контрольная точка часто работает, но только иногда сообщает SQLITE_BUSY. Должен ли я беспокоиться, если это работает иногда, но не всегда? Может ли это повредить базу данных?

Вопрос 3: я не должен использовать sqlite3_wal_checkpoint_v2 или SQLITE_CHECKPOINT_FULL?

0

Решение

Полный контрольный пункт требует, чтобы не было одновременных читателей или писателей.

Вы можете попытаться увеличить время ожидания, но если вы попытаетесь регулярно проходить контрольную точку, вы можете игнорировать одиночные сбои.

0

Другие решения


По вопросам рекламы [email protected]