Oracle内部にもジョブ管理の仕組みがあります。事前に登録したプロシージャや、SQLを計画実行する事ができます。crontabや運用管理ソフトからわざわざ起動をかけなくてもOracle単体で完結します。個人的にはパフォーマンス調査のためのプロシージャを登録して使っています。
DBAロールを保持していればジョブの登録は可能ですが、DBAロールを保持していなくとも、SCHEDULER_ADMINロールを保持していれば登録可能です
ジョブ登録例
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'JOB_SOONI_PFCK', job_type => 'PLSQL_BLOCK', -- 無名ブロック job_action => 'BEGIN SOONI_PFCHECK.SNAPSHOT(); END;', start_date => to_date('2021/04/21 20:30:00','yyyy/mm/dd hh24:mi:ss'), repeat_interval => 'FREQ=MINUTELY;INTERVAL=15', end_date => to_date('2120/11/04 00:00:00','yyyy/mm/dd hh24:mi:ss'), auto_drop => FALSE, enabled => TRUE, comments => '実行SQL取得'); END; /
ジョブ削除例
BEGIN DBMS_SCHEDULER.DROP_JOB('JOB_SOONI_PFCK'); END;
ジョブ登録確認
SELECT * FROM USER_SCHEDULER_JOBS ;
ジョブ実行ログ確認
SELECT j.LOG_DATE,job_name, job_class, operation, status FROM USER_SCHEDULER_JOB_LOG j where j.LOG_DATE >= to_char(sysdate,'YYYY/MM/DD') order by j.LOG_DATE desc ;