новичок в использовании Oracle Scheduler для запуска задания на основе события - PullRequest
0 голосов
/ 23 марта 2012

У меня есть таблица в базе данных Oracle 11.2.Я хочу, чтобы база данных запускала исполняемый файл на удаленном сервере, если конкретная ячейка в таблице 1 обновлена ​​до значения 1 И если число существующих строк в таблице 2> 0. У меня нет большого опыта в том, что возможнов базах данных - возможно ли следующее для достижения этой цели?

  1. создать задание с помощью Oracle Scheduler.Задание выполняется немедленно и используется для запуска внешней исполняемой программы на удаленном сервере.Задание существует, но не выполняется до шага 5 ниже (возможно ли это?).http://docs.oracle.com/cd/E11882_01/server.112/e17120/schedadmin001.htm#BAJHIDDC

  2. присоединить триггер DML к столбцу таблицы, который запускается в инструкции UPDATE.http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#CIHEHBEB

  3. имеет триггер для вызова подпрограммы PL / SQL http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#CIHEGACF

  4. в подпрограмме PL / SQL, выполните следующую бизнес-логику: если конкретная ячейкав таблице 1 равно 1, а если количество строк в таблице 2 больше 0, перейдите к шагу 5, в противном случае остановите (выход, выход).

  5. Запустите задание на шаге 1

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

ОБНОВЛЕНИЕ 1:

Интересно, возможно ли реализовать описанные выше шаги 1-5, просто используя Oracle Scheduler с DBMS_SCHEDULER.CREATE_JOB, используя параметр event_condition?

http://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse005.htm#CHDIAJEB

Вот пример из приведенной выше ссылки:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name            =>  'process_lowinv_j1',
   program_name        =>  'process_lowinv_p1',
   event_condition     =>  'tab.user_data.event_type = ''LOW_INVENTORY''',
   queue_spec          =>  'inv_events_q, inv_agent1',
   enabled             =>  TRUE,
   comments            =>  'Start an inventory replenishment job');
END;

Приведенный выше код создает задание, которое запускается, когда приложение сообщает планировщику, что уровни запасов для элемента упали до низкого порогауровень.

Можно ли каким-либо образом изменить вышеуказанный код для выполнения запланированных шагов?Например, можно ли исключить вышеприведенные шаги 2-4, используя вместо этого event_condition здесь?и т.д. Если так, то как бы это выглядело, например, как установить queue_spec?

1 Ответ

2 голосов
/ 23 марта 2012

Если вы установите агент планировщика Oracle на удаленном сервере, DBMS_SCHEDULER может запустить исполняемый файл на удаленном компьютере. Я хотел бы, чтобы триггер DML помещал сообщение в очередь Oracle Advanced Queue (AQ) и использовал эту очередь для создания основанного на событиях задания (триггерам DML не разрешается фиксировать или откатывать транзакцию, но при выполнении DBMS_SCHEDULER задание неявно выдает коммит, поэтому триггеры DML не могут напрямую запускать задание). Задание на основе событий и задание, которое запускает удаленный исполняемый файл, будут частью цепочки заданий .

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