понедельник, 26 июля 2010 г.

Удаление логов выполнения сценариев в ODI.

Как известно, при выполнении сценария в ODI, процесс этого выполнения можно просматривать в отдельном приложении, под названием Operator. (В новой версии Oracle Data Integrator отдельного приложения, по слухам, не будет.) Но не все логи выполнения одинаково полезны. Чтобы уменьшить количество просматриваемых логов выполнения, можно ненужные логи удалить. Для этого ODI имеет специальный компонент, который называется OdiPurgeLog.




Можно указать дату-время начала и дату-время окончания сессий, контекст, наименование агента, состояние сессий (допустимы значения D-done, E-error, M-warning), имя пользователя, от которого запущена сессия, фильтр для наименований сессий на удаление и удаление отчетов сессий.
Примерно тот же набор параметров доступен для указания, если проводить удаление непосредственно из Оператора:



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

Для такого удаления предлагаю следующий алгоритм действий.

1. Настраиваем контекст для доступа к рабочему репозитарию, где и хранятся логи выполнения сессий ODI.

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

3. В процедуру добавляем 2 параметра:
PARENT_SESSION_ID - номер родительской сессии;
CHILD_SESSION_NAME - наименование сессии для удаления.

4. Создаем новый шаг выполнения в процедуре и переходим на закладку "Command on Source" где добавляем примерно такой код:



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

5. В закладке Command on Target выполняем удаление из таблиц данных, принадлежащих к выбранной в 4 шаге сессии:



6. И в команде, выполняющейся на источнике, и в команде, выполняющейся на приемнике, используется технология Oracle, схема указывает на схему, где хранятся данные рабочего репозитория ODI.

7. Далее, в пакете, просто вызываем эту процедуру, которой передаем номер родительской сессии и текущее наименование сессии через параметры:


8. Общая схема работы такого решения будет следующая. Есть главный сценарий, который периодически запускает сценарий неких проверок. При этом из главного сценария передается, через переменную, значение номера сессии в дочерний сценарий. Дочерний сценарий запускает процедуру очистки своих предыдущих запусков, а затем выполняет необходимые проверки и заканчивает свою работу.

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

Отправить комментарий