ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

時刻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