時刻xx:00とxx:30に statspack.snap; を実行するジョブ作成 part2
以前のエントリ(http://d.hatena.ne.jp/gonsuke777/20110829/1314610674)の改良版。
DBMS_JOBS の代わりに DBMS_SCHEDULER を使用する。repeat_intervalパラメータに何を書くかがポイント。
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'STATSPACK_SNAPSHOT', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN STATSPACK.SNAP; END;', start_date => NULL, repeat_interval => 'FREQ=MINUTELY; BYMINUTE=0,30; BYSECOND=0;', end_date => NULL, auto_drop => FALSE, enabled => TRUE ); END; /
DBMS_SCHEDULER の次回ジョブ実行時刻は USER_SCHEDULER_JOBSビューから確認。
SELECT JOB_NAME, JOB_ACTION, LAST_START_DATE, LAST_RUN_DURATION, NEXT_RUN_DATE FROM USER_SCHEDULER_JOBS; JOB_NAME JOB_ACTION LAST_START_DATE LAST_RUN_DURATIO NEXT_RUN_DATE ------------------- --------------------------- -------------------- ---------------- -------------------- STATSPACK_SNAPSHOT BEGIN STATSPACK.SNAP; END; 2012/01/20 05:00:02 00:00:02.964478 2012/01/20 05:30:00 ^^^^^^^^^^^^^^^^^^^
DBMS_SCHEDULER のジョブ実行履歴は USER_SCHEDULER_JOB_RUN_DETAILSビューより確認。
ACTUAL_START_DATE列がジョブの実行開始時刻となる。
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT LOG_ID, LOG_DATE, JOB_NAME, STATUS, ACTUAL_START_DATE, RUN_DURATION FROM USER_SCHEDULER_JOB_RUN_DETAILS ORDER BY LOG_DATE; LOG_ID LOG_DATE JOB_NAME STATUS ACTUAL_START_DATE RUN_DURATION ------ -------------------- ------------------- ---------- -------------------- --------------- 33005 2012/01/19 23:00:04 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/19 23:00:00 +000 00:00:04 33008 2012/01/19 23:30:03 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/19 23:30:00 +000 00:00:03 33009 2012/01/20 00:00:04 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/20 00:00:00 +000 00:00:04 33012 2012/01/20 00:30:03 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/20 00:30:00 +000 00:00:03 33013 2012/01/20 01:00:05 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/20 01:00:01 +000 00:00:04 33016 2012/01/20 01:30:03 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/20 01:30:00 +000 00:00:03 33018 2012/01/20 02:00:05 STATSPACK_SNAPSHOT SUCCEEDED 2012/01/20 02:00:00 +000 00:00:05 ^^^^^^^^^^^^^^^^^^^
クーロン(crontab)チックに書けてイイ感じだZe!
DBMS_SCHEDULER.CREATE_JOB の repeate_intervalパラメータには
「カレンダ構文」なるルールに従った文字列を記述する必要がある。
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-02
128 DBMS_SCHEDULER
カレンダ構文
http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_sched.htm#BABFBCEF