Oracle - запускать работу при запуске базы данных - PullRequest
0 голосов
/ 18 июня 2020

Я хотел бы запланировать выполнение процедуры pl sql при каждом запуске базы данных Oracle. Процедура выполнит бесконечный l oop, который получает данные через интерфейс REST с удаленного сервера каждые 30 секунд и вставляет их в локальную таблицу базы данных. Однако DBMS_SCHEDULER, похоже, не поддерживает этот сценарий, так как он хочет запускать задание с указанным интервалом.

Мне не нужно новое задание каждые 30 секунд, так как первое задание будет выполняться с бесконечным l oop. Тогда у меня будут работать миллионы заданий в бесконечном l oop. Также я вычитаю время выполнения REST API из 30 секунд, чтобы я мог вызывать ограничительный REST API точно каждые 30 секунд.

Также иногда REST API требует больше 30 секунд для завершения, поэтому я просто хочу позвонить еще раз, когда он завершится. Все это для предотвращения удушения.

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

1 Ответ

1 голос
/ 18 июня 2020

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


Кажется, я неправильно понял вопрос - вы хотите запустить одно задание в запуск, и он будет работать с бесконечным l oop. Меня смутили «30 секунд».

В любом случае: создайте триггер базы данных, который срабатывает при запуске базы данных, и позвольте ему запланировать это задание. Например:

create or replace trigger trg_schedule_job
  after startup on database
begin
  dbms_scheduler.run_job('schedule_job');
end;
/
...