Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Архивирование базы данных в оперативном режиме

Может оказаться так, что особенностью эксплуатации информационной системы, в состав которой входит БД под управлением СУБД HyTech,  является невозможность частого останова СУБД для выполнения архивирования. В таких случаях необходимо архивирование базы данных в оперативном режиме, то есть в то время, когда она открыта и используется. Архивирование базы данных в оперативном режиме несколько сложнее, чем архивирование автономных баз данных. Это связано с тем, что файлы, резервные копии которых необходимо создать, в момент архивирования могут использоваться, и более того, находиться в переходном состоянии (то есть часть содержимого файлов может находиться в памяти). Чтобы провести архивирование базы данных в оперативном режиме, необходимо проделать следующие шаги:

  • Создать резервные копии таблиц пользователей;

  • Создать резервные копии системных таблиц;

  • Создать резервную копию файла инициализации.

Архивирование таблиц пользователей

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

create table BACKTABL(NAME char(32));

insert into BACKTABL values('BACKTABL'); insert into BACKTABL values('TAB1'); insert into BACKTABL values('TAB2'); insert into BACKTABL values('TAB3');

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

nRetCode = htBackupTable(sTable, sBackup);

Аргументы:

Аргумент

Тип

Значение

sTable

character

Имя таблицы, резервную копию которой хотим получить

sBackup

character

Имя резервной копии таблицы.

Результат:

Тип

Значение

integer

Код ошибки или 0, если операция завершилась успешно.

Как правило, помимо самой копии интересует также результат выполнения функции архивирования. Для протоколирования операций архивирования можно создать таблицу протокола, в которую и заносить коды завершения операций архивирования. Например:

create table BACKLOG (    DTLOG date,    TMLOG dword,    TBLOG char(32),    ERLOG int );

var @path = 'c:/backup/';

insert into BACKLOG (DTLOG, TMLOG, TBLOG, ERLOG) select   today(), gettick(), NAME,   htBackupTable(NAME, @path+NAME) from BACKTABL;

 

В данном примере помимо архивирования таблиц, имена которых содержатся в таблице BACKTABL в каталог @path выполняется также запись результата архивирования в таблицу BACKLOG.

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

Например:

begin work TRN1 table BACKTABL, TAB1, TAB2, TAB3; insert into BACKLOG (DTLOG, TMLOG, TBLOG, ERLOG)

select today(), gettick(), NAME, htBackupTable(NAME, @path+NAME) from BACKTABL;

if(lastsqlerr() != 0 or lasthterr() != 0) {   rollback work TRN1;   quit; }

commit work TRN1;