четверг, 21 мая 2009 г.

Пусть трактор работает, он железный

"Пусть трактор работает, он железный".

Это поговорка уже из прошлого, двадцатого века. В наш двадцать первый, цифровой, слово "трактор" должно быть заменено на "компьютер".

Довольно часто бывает необходимо, чтобы какие-то работы в системе выполнялись автоматически, без участия человека.
Ну например. Eсли установку полезных профилей, добавление полномочий своему пользователю и т.д. нужно делать каждое утро на "свежем" экзмепляре системы, то зачем это делать руками?

Если вам нужно завтра, придя на работу, на сделанной ночью копии Прода, сначала запустить процедуру сбора данных (часа 2-3 работы), а потом эти данные анализировать, то почему бы не запустить эту процедуру часиков в 7 утра, спокойно приехать к 10 и заняться анализом?

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

Помимо этого потребуются две вещи.
Первое. Иметь элементарные навыки работы с SQL*Plus.
В частности подготовка и запуск скриптов.

Графические инструменты типа TOAD, SQL*Navigator, PL/SQL Developer, и т.д. хороши только тогда, когда нужно начать работу с запроса вида select * from ap_invoices_all, а затем доточить напильником.

Если нужно что-то делать автоматически, то за десятилетия существования СУБД Oracle
еще никто не придумал чего-то лучше, чем SQL*Plus.

И второе. Уметь воспользоваться, говоря по нашему, по ОЕБээСовскому, конкарент менеджером операционной системы. В Windows (XP) он где-то здесь:
Пуск -> Настройка -> Панель управления -> Назначенные задания.

Некоторые советы по организации процесса.
1. Сделать отдельную папку на диске (типа c:\autorun), которую сделать "Рабочей папкой" в назначенном задании. Именно в эту папку помещать все необходимые файлы.

2. В задании запускать не напрямую sqlplus, а командный файл.
Это удобно чтобы избежать ошибок при передачи параметров в sqlplus

Например, поместить в папку c:\autorun файл run.cmd.
В run.cmd - одна строка:


sqlplus apps/pwd@dbname @autorun.sql

,где
pwd нужно заменить на правильный пароль
dbname - на название экземпляра системы
autorun.sql - собственно скрипт для sqlplus, где всё и происходит

3. Вот шаблон и комментарии к autorun.sql, который также находится в c:\autorun

col start_time for a20
col end_time for a20
col global_name for a30

SPOOL run.log
SELECT user
,global_name
,TO_CHAR(SYSDATE, 'DD.MM.YYYY HH24:MI:SS') AS start_time
FROM global_name;

REM
REM Start here
REM

SELECT * FROM dual;

REM
REM End here
REM
SELECT user
,global_name
,TO_CHAR(SYSDATE, 'DD.MM.YYYY HH24:MI:SS') AS end_time
FROM global_name;
SPOOL OFF
EXIT

3.1. Обязательно нужно сделать SPOOL в файл.
Если возникнут сомнения в том, как отработал скрипт, да и отработал ли вообще, без лога не обойтись.
3.2. В начале и в конце работы полезно вывести информацию о том, во сколько всё началось, во сколько закончилось, а также кто и в какой базе это делал.
3.3. Ну а вместо SELECT * FROM dual; нужно вставить то, что нужно выполнить.

4. Когда файлы autorun.sql и run.cmd готовы, не поленитесь запустить run.cmd и убедиться, что всё работает как и ожидалось!
Если запускаете длительное задание, то для проверки закомментируйте "долгоиграющую часть", временно подставив SELECT * FROM dual;

5. Предыдущий пункт очень важный!
Обидно будет утром обнаружить, что задание так и не отработало.
Рекомендую также, в целях тестирования, создать назначенное задание с запуском через минуту, проверить результат, и только потом ставить задание на "настоящий" график.

Разумеется это лишь рекомендации. Файлы могут выглядеть и по другому.
Вот полезные ссылки, которые могут помочь освоить данный процесс на более продвинутом уровне:
П.Лузанов и В.Бегун. Understanding SQL*Plus. Конфигурации и запуск
П.Лузанов и В.Бегун. Understanding SQL*Plus. Использование переменных
В.Крачвук. Утилита SQL*Plus. Создание и выполнение сценариев. Часть I
В.Крачвук. Утилита SQL*Plus. Создание и выполнение сценариев. Часть II
В.Крачвук. Утилита SQL*Plus. Создание и выполнение сценариев. Часть III
В.Крачвук. Утилита SQL*Plus. Создание и выполнение сценариев. Часть IV

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