DBMS_SCHEDULER в вершине oracle - PullRequest
       46

DBMS_SCHEDULER в вершине oracle

3 голосов
/ 13 февраля 2020

У меня написан пакет API. У него есть процедура GET_INFO. Я хочу, чтобы эта процедура выполнялась в фоновом режиме каждые 20 минут. Я понимаю, что я должен делать с dbms_scheduler. Но вообще я не понимаю, где их регистрировать. Я буду благодарен за пример или за вашу помощь в этом)

Я написал такой код, но я не знаю, где его использовать:

BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name = 'My_Job',

job_type = 'STORED_PROCEDURE',

job_action = 'INSERT INTO TEST2(UPDATEDAT)

VALUES (sysdate);

END;',

start_date = 'systimestamp',

repeat_interval = 'FREQ=SECONDLY;INTERVAL=5',

end_date = null,

auto_drop = FALSE,

comments = 'My new job');

END;

Вот мой код и Я не знаю, где его хранить.

1 Ответ

1 голос
/ 13 февраля 2020

Как видно из типа задания, вам нужно создать процедуру, такую ​​как

create or replace procedure Ins_Test2 is
begin
  insert into Test2(updatedat) values(sysdate);
  commit;
end;

, а затем создать планировщик через

begin
  dbms_scheduler.create_job (
     job_name           =>  'My_Job',
     job_type           =>  'STORED_PROCEDURE',
     job_action         =>  'Ins_Test2',
     start_date         =>  systimestamp, 
     repeat_interval    =>  'freq=minutely; interval = 20; byday=MON,TUE,WED,THU,FRI;',
     enabled            =>  true,
     comments           => 'My new job'
  );
end;

, где я добавил

byday=MON,TUE,WED,THU,FRI; в качестве дополнительного указания, если вы хотите запустить планировщик в рабочие дни (вы можете пропустить эту часть, если хотите).

systimestamp ( избавиться от кавычек ) для start_date может быть заменено следующей информацией о времени, такой как start_date => '13-FEB-20 2.00.00PM Asia/Istanbul'

в моем случае.

И затем перечислите созданные планировщики по

select job_name, next_run_date                           
  from dba_scheduler_jobs j;

И текущие в настоящее время по

select * 
  from user_scheduler_job_log l
 order by l.log_date desc;

И сбросьте планировщик на

begin
  dbms_scheduler.drop_job( job_name =>  'My_Job' );
end;
...