logo
Книга по БД(Вальке А

7.3.5. Как узнать “когда”?

Восстанавливать данные из архивов надо только тогда, когда или нет другого способа заставить работать систему после какого-либо события, или требуется вернуться в некоторое прежнее состояние. Содавать архивы надо регулярно. Например, можно иметь следующий гнрафик создания архивов: по понедельникам в 8:00 создается полный архив системы (архив 0-го уровня), а каждый рабочий день кроме понедельника - архив 1-го уровня. При этом производится постоянное архивирование журналов транзакций.

Для того, чтобы узнать, когда выполнялись архивы системы (если для этого использовалась команда ontape), надо запустить утилиту администратора onmonitor и выбрать пункты меню Status->Archive:

Press ESC to return to the Status Menu. Use arrow keys to move the cursor. ARCHIVE INFORMATION Level of Date and Time Logical Log Used Archive of Archive at Time of Archive 0 Mon Oct 28 14:13:30 1996 429 1 0 2 0

В приведенном выше примере видно, что 28-го октября был сделан архив 0-го уровня, в этом архиве хранятся все изменения данных, которые зафиксированы в журналах транзакций под номерами 1..428.

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

ontape -c

у вас включен режим постоянного архивирования журналов, то Informix Dynamic Server будет автоматически архивировать заполненные журналы транзаций. Но и в этом случае, если например, вы забыли вовремя поменять заполненную ленточку, у вас могут переполниться журналы.

Для того, что бы определить каково состояние журналов, сколько их и насколько они заполнены, надо выполнить команду

ontape -l

Данная команда выдаст информацию о состоянии физических журналов и журналов транзакций. Физические журналы в данный момент нас не интересуют, а информация о состоянии журналов транзакций (раздел Logical Logging)- это как раз то, что нам нужно:

informix(/usr/informix) > onstat -l . . . . . . . . . . . . . . . Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 16 7029 199 28 35.3 7.1 address number flags uniqid begin size used %used a0dd084 1 U-B---- 903 100233 500 500 100.00 a0dd0a0 2 U-B---- 904 100427 500 500 100.00 a0dd0bc 3 U-B---- 905 10061b 500 500 100.00 a0dd0d8 4 U-B---- 906 10080f 500 500 100.00 a0dd0f4 5 U-B---- 907 100a03 500 500 100.00 a0dd110 6 U-B---- 908 100bf7 500 500 100.00 a0dd12c 7 U-B---- 909 100deb 500 500 100.00 a0dd148 8 U-B---- 910 100fdf 500 500 100.00 a0dd164 9 U-B---- 911 6036b9 500 500 100.00 a0dd180 10 U---C-L 912 6038ad 1000 363 36.30 informix(/usr/informix) >

По результатам работы данной команды20) видно, что в этот момент в данном экземпляре Informix Dynamic Server имеется 10 журналов транзакций (их номера от 1 до 10). Все журналы уже были в использовании (каждый журнал помечен флажком “U” - used). Журналы с 1 по 9 уже заархивированы (помечены флажком “B” - backed up), и, следовательно, свободны для дальнейшего использования. Журнал под номером 10 является текущим (стоит флажок “C” - current), то есть проходящие в данный момент транзакции фиксируются именно в нем. Этот же журнал содержит и последнюю контрольную точку (флажок “L” - last).

Другой способ получить информацию о журналах транзакций -это запустить утилиту администратора onmonitor и выбрать пункты меню Status->Logs:

Press ESC to return to the Status Menu. Use arrow keys to move the cursor. PHYSICAL LOG: Buffer Bufsize Bufused Numpages Numwrites pages/IO P-1 16 0 455 34 13.38 Phybegin Physize Phypos Phyused % Used 10003f 500 454 0 0.00 LOGICAL LOG: Buffer Bufsize Bufused Numrecs Numpages Numwrites Recs/Page Pages/IO L-2 16 0 7029 199 28 35.32 7.11 INDIVIDUAL LOG FILES: Number Flags Uniqid Dbspace Pages Used % Used 7 U-B---- 909 rootdbs 500 500 100.00 8 U-B---- 910 rootdbs 500 500 100.00 9 U-B---- 911 rootdbs 500 500 100.00 10 U---C-L 912 rootdbs 1000 363 36.30

По полученной нами таким образом информации, можно сделать вывод, что в данном случае все нормально - практически все журналы транзакций свободны21), и можно нормально работать. Если бы ситуация была менее благоприятная, то есть большинство журналов были бы заняты на 100% и при этом не были заархивированы:

address number flags uniqid begin size used %used a0dd084 1 U------ 903 100233 500 500 100.00 a0dd0a0 2 U------ 904 100427 500 500 100.00 . . . . . . . . . . . . . . a0dd164 9 U------ 911 6036b9 500 500 100.00 a0dd180 10 U---C-L 912 6038ad 1000 363 36.30

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

В Informix Dynamic Server существует возможность отслеживать разные события и выполнять на них нужые вам действия (см. Параграф “Реагирование на чрезвычайные ситуации”). Среди таких события есть и “заполнение журнала транзакций”. Например, в случае заполнения очередного журнала можно посылать электронную почту администратору СУБД (пользователю “informix”). Для того, чтобы сделать это, надо написать программу-обработчик событий. Данная программа будет автоматически запускаться при возникновеннии любого события22). На вход данной программе будет передаваться 5 параметров. Первый параметр - это код серьезности события, второй параметр - класс события. Остальные три перадаваемых параметра - это текстовые пояснительные сообщения. Для события “заполнение очередной журнал транзакций” класс события равен 23. Следовательно, программа‑скрипт для ОС Unix, которая будет реагировать на данное событие и посылать почту администратору базы данных будет выглядеть так:

if [$2 -e 23] ; then mail informix <!!! Attention! Logical log complete! !!! fi

Для того, чтобы установить эту программу (пусть она хранится в файле “my_prog.sh”) следует переустановить конфигурационный параметр ALARMPROGRAM в полное имя (с указанием полного пути) этой программы. Для того, чтобы это изменение возымело действие, надо перезапустить сервер базы данных.

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

onmode -l

принудительно переводит сервер базы данных на использование следующего журнала транзакций.

В стандартной поставке Informix Dynamic Server (в директории $INFORMIXDIR/etc) есть файл logevent.sh, содержащий программу, реагрующую на важные события и выполняющую некоторые полезные действия, в том числе и автоматическую архививацию очередного заполненного журнала. Для установки данной программы в качестве обработчика событий надо установить параметр ALARMPROGRAM в logevent.sh (так как директория $INFORMIXDIR/etc обычно не входит в переменную окружения PATH, то следует указать полный путь к данной программе, например:

/usr/informix/etc/logevent.sh

Рассмотренные здесь средства ручного и автоматического контроля позволят минимизировать шанс пропустить нужный момент дляч архивации.