環境:Oracle9i[Release 9.2.0.1.0]
Oracleには、ジョブ(ストアドプロシージャ)をスケジュールにしたがって実行してくれる、 DBMS_JOBパッケージが提供されています。
ここでは、DBMS_JOBを使用して定期的にCTX_DDL.SYNC_INDEXを実行します。
DBMS_JOBには、次の関数が用意されています。
| SUBMIT | ジョブの登録します。 |
| REMOVE | ジョブキューからジョブを削除します。 |
| CHANGE | 登録済みジョブの設定(日時、間隔等)を変更します。 |
| WHAT | 実行するジョブ(ストアドプロシージャ)を変更します。 |
| NEXT_DATE | 登録済みジョブの次回の実行時間を変更します。 |
| INSTANCE | ジョブを実行できるインスタンス等を変更します。 |
| INTERVAL | 登録済みジョブの実行間隔を変更します。 |
| BROKEN | 登録済みジョブに中断フラグを設定します。 |
| RUN | 強制的にジョブを実行します。 |
| USER_EXPORT | - |
ジョブの登録には、DBM_JOB.SUBMITを使用します。DBM_JOB.SUBMITを使って索引の同期を行うには 次のように実行します。
DECLARE
JOB NUMBER;
BEGIN
-- 180分 間隔で実行
DBMS_JOB.SUBMIT(JOB,'CTX_DDL.SYNC_INDEX('ITS_IDX');',
INTERVAL=>'SYSDATE+180/1440');
COMMIT;
END;
上記スクリプトは、Oracleのホームディレクトリにあるctx\sample\script\drjobdml.sqlに 用意されています。
-- 毎日 12:10 [計算例:12 * 3600 + 10 * 60 = 43800] TRUNC(SYSDATE)+1+(43800/86400), -- 毎週日曜日の 1:00 NEXT_DAY(TRUNC(SYSDATE),'日曜日')+(1/24)
DBMS_JOBで登録されたジョブを確認するには、次のようなSELECT文を実行します。
SELECT * FROM USER_JOBS;
登録済みのジョブを削除するには、DBMS_JOB.REMOVEを使用します。DBMS_JOB.REMOVEには 登録時に取得したジョブ番号を指定して削除します。
ジョブ番号は、SELECT * FROM USER_JOBS;でも確認できます。
BEGIN
DBMS_JOB.REMOVE(3);
END;
Copyright 1997-2008 BBB All rights reserved.