пятница, 15 февраля 2008 г.

Краткое руководство по TLR

TLR - Table Level Restore, восстановление данных на уровне таблиц. Позволяет восстанавливать определенные таблицы на момент времени от нулевого бэкапа, не восстанавливая данные всего сервера. Это очень полезная функция, и появилась она впервые в 10 версии Информикса.
Для того чтобы иметь возможность использовать TLR, необходимо чтобы была включена архивация журналов транзакций в информиксе, а также наличие архива level-0. Таблицы, которые были созданы после архива level-0 не могут быть восстановлены с помощью TLR. Можно делать либо только физическое восстановление таблиц, или восстановление на момент времени после level-0. Также можно восстанавливать таблицы на другом сервере, что позволяет осуществлять миграцию выбранных данных между серверами информикс.

Подготовка к TLR

Вначале необходимо настроить конфигурационный файл $INFORMIXDIR/etc/ac_config.std. Положение этого файла может быть и другим, тогда его необходимо установить в переменной окружения AC_CONFIG.
Вот пример этого файла:

AC_MSGPATH /tmp/ac_msg.log # archecker журнал сообщений
AC_STORAGE /mnt/ac_storage # Каталог для временных файлов
AC_VERBOSE 1 # 1 вкл.сообщения 0 выкл.сообщения

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

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

database adm;
create table source (

id serial,
fname varchar(15),
sname varchar(15),
station_id integer,
is_enabled boolean) in datadbs;

create table dest (

id serial,
fname varchar(15),
sname varchar(15),
station_id integer,
is_enabled boolean) in admdbs;

insert into dest select * from source;

restore to '2008-02-10 15:30:00';


При восстановлении на момент времени необходимо установить переменную окружения GL_DATETIME. Для таблиц необходимо указывать только список полей с типами данных и в каком dbspace они лежат. Остальные опции (констрейнты, индексы и т.д. игнорируются и их можно не включать). Как видим, исходная таблица source из базы adm восстанавливается в таблицу dest в той же базе но в другом dbspace, на момент времени '2008-02-10 15:30:00' после нулевого архива. При этом сама таблица source в ходе восстановления не затрагивается.

Запускаем TLR с помощью команды archecker -bvs -f cmdfile
Флаг -b предлагает искать данные и транзакции через интерфейс XBSA (т.е. если журнал транзакций архивируется с помощью onbar). Если используется ontape, то вместо флага -b надо использовать флаг -t.
Флаги -v и -s управляют выводом информационных сообщений. Флаг -f указывает расположение командного файла.

В ходе работы TLR вначале происходит поиск таблицы в архиве, затем таблица извлекается, и если надо, на нее накатываются транзакции. Сообщения о работе archecker пишет в лог который указан в AC_MSGPATH конфига.

Performans Tips:

Если требуется восстановить сразу несколько таблиц, их можно указать в одном командном файле и восстанавливать одновременно. Это быстрее поскольку сканирование архива и журналов происходит только один раз.
Можно делать физическое восстановление в external table, которая на самом деле является текстовым файлом с разделителями.
В командном файле можно указать другую базу для восстановленной таблицы, и например другой сервер.
В ходе восстановления можно фильтровать данные с помощью условия в операторе insert into ... select from ... where filter.

Комментариев нет: