Механизм асинхронного архивирования

Асинхронное оперативное архивирование выполняется следующим образом:

  • пользователь подает SQL-запрос на запуск оперативного асинхронного архивирования БД и сразу получает от ядра СУБД код завершения об успешном/неуспешном старте процесса;

  • запуск последующих процессов асинхронного архивирования можно выполнять по одному и тому же соединению с БД, не дожидаясь завершения предыдущих процессов;

  • в случае успешного старта процесса асинхронного архивирования СУБД сама выделяет ему отдельный канал для работы с БД;

  • в любом случае (как в случае успешного окончания процесса архивирования, так и неуспешного) этот канал будет корректно закрыт (освобожден) ядром СУБД;

  • взаимодействие с выделенным процессу архивирования каналом выполняет ядро СУБД при обработке SQL-запросов BACKUP STOP;

Пользователь БД имеет возможность в любой момент времени получить информацию о ходе выполнения асинхронного архивирования путем выборки нужных данных из системной таблицы $$$INKERNBACK; например, запросом SELECT * FROM $$$INKERNBACK. При запуске процесса архивирования в эту таблицу добавляется строка, соответствующая данному процессу, которая в течение архивирования будет периодически модифицироваться для отражения текущего статуса процесса.

  • в поле Status будет помещено значение в процентах (от 0 до 100) о процессе архивации.

Структура системной таблицы $$$INKERNBACK:

CREATE TABLE $$$INKERNBACK (
BackIdINTEGER,
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, возможно, изменятся в соответствии с действительным кодом завершения процесса, состоянием в процентах и реальным окончанием времени завершения процесса.

Все состояния завершения не асинхронных процессов в эту таблицу попадать не будут, т.к. пользователь получает необходимые данные по окончании процесса архивации.