Механизм асинхронного архивирования
Асинхронное оперативное архивирование выполняется следующим образом:
-
пользователь подает SQL-запрос на запуск оперативного асинхронного архивирования БД и сразу получает от ядра СУБД код завершения об успешном/неуспешном старте процесса;
-
запуск последующих процессов асинхронного архивирования можно выполнять по одному и тому же соединению с БД, не дожидаясь завершения предыдущих процессов;
-
в случае успешного старта процесса асинхронного архивирования СУБД сама выделяет ему отдельный канал для работы с БД;
-
в любом случае (как в случае успешного окончания процесса архивирования, так и неуспешного) этот канал будет корректно закрыт (освобожден) ядром СУБД;
-
взаимодействие с выделенным процессу архивирования каналом выполняет ядро СУБД при обработке SQL-запросов
BACKUP STOP
;
Пользователь БД имеет возможность в любой момент времени получить информацию о ходе выполнения асинхронного архивирования путем выборки нужных данных из системной таблицы $$$INKERNBACK; например, запросом SELECT * FROM $$$INKERNBACK
. При запуске процесса архивирования в эту таблицу добавляется строка, соответствующая данному процессу, которая в течение архивирования будет периодически модифицироваться для отражения текущего статуса процесса.
-
в поле
Status
будет помещено значение в процентах (от 0 до 100) о процессе архивации.
Структура системной таблицы $$$INKERNBACK:
CREATE TABLE $$$INKERNBACK ( | |
BackId | INTEGER, |
UserId | INTEGER, |
ChannelId | INTEGER, |
LinterRetCode | INTEGER, |
Status | INTEGER, |
StartTime | DATE, |
EndTime | DATE); |
Описание столбцов таблицы:
Столбец | Описание | |
---|---|---|
BackId | Идентификатор процесса архивирования | |
UserId | Идентификатор пользователя, подавшего SQL-запрос на оперативное архивирование | |
ChannelId | Идентификатор канала, открытого для процесса архивирования (канал, который выделяет само ядро СУБД для порожденного процесса) | |
LinterRetCode | Код завершения процесса архивирования (приложение 1) | |
Status | Число в процентах, отражающее степень завершения процесса архивирования | |
StartTime | Дата-время начала процесса архивирования | |
EndTime | Дата-время окончания процесса архивирования |
Если эта таблица существует, то добавляется соответствующая строчка, содержащая необходимые данные. Наличие таблицы
проверяется на этапе начального запуска in-kernel backup
в асинхронном режиме. В случае её отсутствия
будет выведена соответствующая ошибка, и процесс не запустится. Если таблица существует, то в нее добавляется строчка,
содержащая BackId
, UserId
, ChannelId
, LinterRetCode
равный нулю, т.к. пока он не известен, StartTime
и EndTime
, где StartTime
будет равно EndTime
и соответствовать дате-времени старта процесса. По окончании процесса архивации значения
LinterRetCode
, Status
и EndTime
, возможно, изменятся в соответствии с
действительным кодом завершения процесса, состоянием в процентах и реальным окончанием времени завершения процесса.
Все состояния завершения не асинхронных процессов в эту таблицу попадать не будут, т.к. пользователь получает необходимые данные по окончании процесса архивации.