1.ログ用テーブル作成
CREATE TABLE SAMPLE_LOG(RECORD_TIME DATE);
2.PL/SQLプロシージャ定義
CREATE OR REPLACE PROCEDURE LOG_INSERT_PROC AS
BEGIN
INSERT INTO SAMPLE_LOG VALUES (SYSDATE);
END;
3.DBMS_JOBによる定期実行設定
DECLARE
JOB_ID NUMBER;
BEGIN
dbms_job.submit(
JOB_ID, -- ジョブ識別子
'LOG_INSERT_PROC;', -- 実行対象プロシージャ
SYSDATE, -- 初回実行日時
'TRUNC(sysdate,''mi'') + 1/ (24*60)' -- 実行間隔(1分)
);
COMMIT;
END;
パラメータ構成:
- job:ジョブ管理番号
- what:実行対象のSQL/PLコード
- next_date:初回実行時刻
- interval:実行間隔式
4.ジョブ状態確認
SELECT * FROM SAMPLE_LOG
管理コマンド:
-- 全ジョブ情報取得
select * from user_jobs;
-- 実行中ジョブ確認
select * from dba_jobs_running;
-- 完了済みジョブ確認
select * from dba_jobs;
ジョブ操作例:
BEGIN
DBMS_JOB.RUN(25); -- ID=25の強制実行
COMMIT;
END;
ジョブ停止:
BEGIN
DBMS_JOB.BROKEN(25, TRUE, SYSDATE);
COMMIT;
END;
ジョブ削除:
BEGIN
DBMS_JOB.REMOVE(25);
commit;
END;
インターバル設定パターン
| 実行タイミング | INTERVAL式 |
|--------------------------|---------------------------------------------------------------------------|
| 午前0時 | TRUNC(SYSDATE + 1) |
| 午前8時30分 | TRUNC(SYSDATE + 1) + (8*60+30)/(24*60) |
| 火曜日正午 | NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24 |
| 月初0時 | TRUNC(LAST_DAY(SYSDATE ) + 1) |
| 季節末日23時 | TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24 |
| 土日06:10 | TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY")))+(6×60+10)/(24×60)|
高速実行設定:
- 秒単位:
sysdate + 1/(24 * 60 * 60) - 10秒間隔:
sysdate + 10/(24 * 60 * 60) - 分単位:
TRUNC(sysdate,'mi') + 1/ (24*60) - 10分間隔:
TRUNC(sysdate,'mi') + 10/ (24*60)
日次スケジュール:
Interval => TRUNC(sysdate) + 1 +1/ (24) -- 01:00
週次スケジュール:
Interval => TRUNC(next_day(sysdate,'Monday'))+1/24
月次スケジュール:
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
四半期スケジュール:
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
半年スケジュール:
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
年次スケジュール:
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24