Spec-Zone.ru › SQLite

Проверка целостности базы данных

Интерфейс sqlite3_wal_checkpoint_v2(D,X,M,L,C) выполняет операцию проверки целостности базы данных X подключения к базе данных соединение с базой данных D в режиме M. Информация о статусе записывается в целые числа, на которые указывают L и C. Параметр M должен быть допустимым режимом проверки целостности:

SQLITE_CHECKPOINT_PASSIVE
Проверка как можно большего количества кадров без ожидания завершения операций чтения или записи базы данных, затем синхронизация файла базы данных, если все кадры журнала были проверены. Обратный вызов обработчика занятости никогда не вызывается в режиме SQLITE_CHECKPOINT_PASSIVE. С другой стороны, пассивный режим может оставить проверку незавершенной, если есть одновременные операции чтения или записи.

SQLITE_CHECKPOINT_FULL
В этом режиме блокировка (вызывается обработчик занятости) до тех пор, пока нет писателя базы данных и все читатели читают из последней копии базы данных. Затем он проверяет целостность всех кадров в файле журнала и синхронизирует файл базы данных. Этот режим блокирует новых писателей базы данных во время ожидания, но новые читатели базы данных могут продолжать без препятствий.

SQLITE_CHECKPOINT_RESTART
Этот режим работает так же, как SQLITE_CHECKPOINT_FULL, с добавлением того, что после проверки целостности файла журнала он блокируется (вызывается обработчик занятости) до тех пор, пока все читатели не будут читать только из файла базы данных. Это гарантирует, что следующий писатель перезапустит файл журнала с начала. Как и в режиме SQLITE_CHECKPOINT_FULL, этот режим блокирует новые попытки записи в базу данных во время ожидания, но не препятствует чтению.

SQLITE_CHECKPOINT_TRUNCATE
Этот режим работает так же, как SQLITE_CHECKPOINT_RESTART, с добавлением того, что он также обнуляет файл журнала до нулевого размера непосредственно перед успешным возвратом.

Если pnLog не NULL, то *pnLog устанавливается в общее количество кадров в файле журнала или в -1, если проверка целостности не может быть выполнена из-за ошибки или потому, что база данных не находится в режиме WAL. Если pnCkpt не NULL, то *pnCkpt устанавливается в общее количество проверенных кадров в файле журнала (включая любые, которые уже были проверены до вызова функции) или в -1, если проверка целостности не может быть выполнена из-за ошибки или потому, что база данных не находится в режиме WAL. Обратите внимание, что после успешного выполнения SQLITE_CHECKPOINT_TRUNCATE файл журнала будет обнулен до нулевого размера, и поэтому оба *pnLog и *pnCkpt будут установлены в ноль.

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

Режимы SQLITE_CHECKPOINT_FULL, RESTART и TRUNCATE также получают эксклюзивную блокировку «записи» файла базы данных. Если блокировка записи не может быть получена немедленно, и настроен обработчик занятости, он вызывается, и блокировка записи повторно пытается получить, пока обработчик занятости не вернет 0 или блокировка не будет успешно получена. Обработчик занятости также вызывается во время ожидания операций чтения базы данных, как описано выше. Если обработчик занятости вернет 0 до получения блокировки записи или во время ожидания операций чтения базы данных, операция проверки целостности продолжается с этого момента таким же образом, как SQLITE_CHECKPOINT_PASSIVE — проверка как можно большего количества кадров без дальнейшего блокирования. В этом случае возвращается SQLITE_BUSY.

Если параметр zDb имеет значение NULL или указывает на строку длиной ноль, то указанная операция выполняется для всех баз данных WAL, подключенных к подключению к базе данных db. В этом случае значения, записанные в выходные параметры *pnLog и *pnCkpt, не определены. Если возникает ошибка SQLITE_BUSY при обработке одной или нескольких подключенных баз данных WAL, операция все равно выполняется для любых оставшихся подключенных баз данных, и в конце возвращается SQLITE_BUSY. Если при обработке подключенной базы данных возникает любая другая ошибка, обработка прерывается, и код ошибки немедленно возвращается вызывающей функции. Если при обработке подключенных баз данных не возникнет ошибка (SQLITE_BUSY или иная), возвращается SQLITE_OK.

Если база данных zDb — это имя подключенной базы данных, которая не находится в режиме WAL, возвращается SQLITE_OK, и оба *pnLog и *pnCkpt устанавливаются в -1. Если zDb не NULL (или строка нулевой длины) и не является именем какой-либо подключенной базы данных, вызывающей функции возвращается SQLITE_ERROR.

Если интерфейс sqlite3_wal_checkpoint_v2() не возвращает SQLITE_MISUSE, он устанавливает информацию об ошибке, к которой обращаются с помощью sqlite3_errcode() и sqlite3_errmsg().

Команда PRAGMA wal_checkpoint может быть использована для вызова этого интерфейса из SQL.

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/wal_checkpoint_v2.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API