четверг, 22 декабря 2011 г.

OAT Health Advisor

В Informix OpenAdminTool появился модуль HealthAdvisor, который позволяет производить мониторинг сервера баз данных и отправляет уведомления если происходят определенные события. Кроме того сам OAT теперь включен в ClientSDK и его не надо скачивать отдельно!
Данная статья сопровождается картинками, но я не знаю как сделать чтобы при нажатии на картинку появлялось увеличенное изображение. Поэтому пока оставляю так как есть.
HealthAdvisor конфигурируется для каждого экземпляра Informix отдельно. Всего для конфигурации представлено 4 вкладки:

Конфигурация HealthAdvisor Profile
На вкладке Profile отображаются доступные профили. Всегда есть профиль default, можно добавить свои профили, которые настраиваются.


Health Advisor Alarms
На вкладке Alarms можно просмотреть предупреждения, которые сгруппированы по категориям. Порог для каждого предупреждения можно сконфигурировать, а само предупреждение можно отключить.


Health Advisor Schedule

Вкладка Shedule позволяет настроить расписание запуска задачи для данного профиля. Не забыть поставить флажок "Enable Task".


Health Advisor Notification
На вкладке Notification конфигурируются почтовые адреса для отправки уведомлений и уровни оповещения (поле When).
Также указана команда (почтовый клиент) которая будет срабатывать на сервере где находится экземпляр Informix при отправке оповещения. Если у вас Informix находится на Windows, то возможно придется изменить эту команду.
Отдельно надо обратить внимание на поле заголовка (subject) письма: гораздо удобнее будет если сделать его как '$INFORMIXSERVER [SUBJECT]' подставив вместо $INFORMIXSERVER имя экземпляра Informix. Тогда в почтовом клиенте будет сразу видно от какого сервера пришло письмо, если у вас их несколько.
Можно сделать рассылку одновременно нескольким адресатам, либо через перечисление адресов в поле "To" на вкладке Notification, или указать адресата informix, а список адресов сделать через файл /home/informix/.forward по одному адресу в каждой строке файла.

После того как Health Advisor настроен, жмем кнопку Run Health Advisor. Здесь есть небольшой баг: время ожидания работы скрипта может быть превышено, и после запуска может появится сообщение об таймауте. Если такое происходит, надо увеличить параметр max_execution_time в файле %PATH_TO_OAT%\PHP_5.2.4\php.ini (этот файл находится на сервере где установлен OAT), например сделать 120 секунд.

четверг, 1 декабря 2011 г.

Мониторинг свободного пространства в dbspace

Всем хорош мониторинг состояния сервера с помощью alarmprogram.sh, но он к сожалению не позволяет устанавливать пороги оповещения о свободном пространстве в dbspace. Параметр STORAGE_FULL_ALARM позволяет задать уровень оповещения и срабатывание когда dbspace оказывается уже полностью занят.
Написал небольшую процедуру на SPL с помощью которой можно осуществлять мониторинг свободного пространства в dbspace. Пороги срабатывания задаются для каждого dbspace отдельно. При уменьшении размера свободного места ниже установленного порога, процедура в момент очередного запуска обнаруживает это и высылает email с подробной информацией. Для работы необходимо наличие на сервере клиента mailx. Думаю что не проблема переписать процедуру если почтовый клиент другой.

Исходный код проекта как выложил на GoogleCode проект idsmon.

Установка:
- зайти на сайт проекта и скачать исходный код процедуры и таблицы
- создать в базе sysadmin таблицу и заполнить ее значениями alarm levels для каждого dbspace;
- создать в базе sysadmin процедуру проверки и оповещения;
- создать в планировщике informix расписание для запуска процедуры;

Схема работы:



Процедура протестирована и работает на версии 11.50.UC8. В ней используется тип row, поэтому думаю что будет работать и с предыдущими версиями, где есть данный тип. Конечно должна работать и на более новых версиях :)
Расписание запуска процедуры можно установить например 1 раз в каждые полчаса.

суббота, 26 ноября 2011 г.

MSL готовится к старту на Марс

Через полчаса произойдет историческое событие - старт миссии MSL на Марс. Прямую трансляцию можно смотреть здесь.

среда, 23 ноября 2011 г.

Informix SPL и тип запись

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


define
  row_emp employees%rowtype;
...
  select * into row_emp from employees  where employee_id = Val1;
...
  insert into employees values row_emp
...

Причем тип row который есть в Informix, таких фокусов не допускает. Т.е. в нем можно обращаться к отдельным полям через точечную нотацию, но например выбрать всю запись из таблицы в переменную без перечисления отдельных полей не получится. Точно также не работает вставка в таблицу из переменной типа row без указания каждого поля. А еще при объявлении такого типа приходится указывать все поля, что ничуть не способствует сокращению размеров кода. 
Пообщался с техподдержкой, сказал что хочу такой синтаксис в SPL, что упрощает разработку процедур, уменьшает вероятность появления ошибок в коде, и вообще это удобно. Человек из техподдержки написал мне, что создаст запрос (видимо выше) для реализации новой функциональности. Может набраться наглости и попросить чтобы сделали реализацию PL/SQL в Informix ? :)

среда, 14 сентября 2011 г.

Защита данных при обновлении на новую версию

При обновлении на новую версию Informix есть возможность в случае ошибки обновления, минимизировать время простоя системы. Для этого в версии 11.50 используется новый параметр CONVERSION_GUARD, который определяет возможность быстрого возврата к предыдущей версии системы при возникновении ошибки в процессе обновления на новую версию.
Быстрый возврат к предыдущей версии системы означает использование данных восстановления, которые создаются при конвертации на новую версию, в случае сбоя конвертации. Напомню что раньше при сбое конвертации приходилось делать восстановление сервера из бэкапа.

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

По умолчанию в onconfig.std параметр CONVERSION_GUARD установлен в значение 2, что означает продолжить конвертацию даже в случае ошибки создания данных точки восстановления. В документации же указано значение по умолчанию 1, т.е. остановить конвертацию на новую версию в случае ошибки создания данных точки восстановления. Из-за таких нестыковок лучше выставить этот параметр в onconfig явно, причем в значение 1. Для параметра RESTORE_POINT_DIR следует выбрать каталог на ФС с достаточным кол-вом свободного места. Например, при обновлении с 11.50.FC5 до 11.50.FC8 было использовано примерно 500Мб для данных восстановления. Но эта цифра может зависеть от различных факторов.

четверг, 21 июля 2011 г.

Установка Informix 11.50 Innovator Edition на Linux

Если при запуске инсталлятора Informix 11.50 Innovator Edition на Linux в консольном режиме получаете ошибку

The wizard cannot continue because of the following error: could not load wizard specified in /wizard.inf (104)

можно попробовать в параметрах запуска инсталлятора указать флаг -javahome и в качестве значения путь к установленной Java Runtime Environment.

четверг, 24 марта 2011 г.

truncate и delete: что лучше и когда использовать


Когда требуется полностью удалить все данные из таблицы, прибегают к оператору delete. Его можно использовать в транзакции. Но если данных в таблице много то их удаление может занять продолжительное время, поскольку удаление каждой записи будет записываться в журнал транзакций. Кроме того, место занимаемое таблицей на диске, не будет освобождено: оно останется занято пустыми экстентами таблицы.
На помощь приходит оператор truncate. Он не записывает в журнал транзакций удаление каждой записи, выполняет удаление всех данных из таблицы практически моментально, и для него можно указать освободить занимаемое таблицей место на диске, или оставить с помощью опций drop storage или reuse storage. Однако минусом использования truncate является то что если в транзакции после truncate попытаться выполнить другие действия то получим ошибку: 26021: No operations allowed after truncate in a transaction. Т.е. truncate должен быть либо последним оператором в транзакции, либо выполнятся вне блока транзакции begin ... commit.