2009-06-25 10 views
4

これはどうすればよいのか分かりません。oracleで「シングルトン」スケジュール・ジョブを作成する方法は?

5分ごとに定期的に実行するようにスケジュールされたジョブですが、同時に2つのインスタンスが同時に実行されることはありません。前回の実行が5分を超えると次のインスタンスが延期またはスキップされます。

これを達成する最も簡単で最もエレガントな方法は何ですか?

答えて

3

DBMS_JOBがそれを処理します。ちょうどそれを使用します。

+0

+1ホイールを再発明しないためです。また、最後または次回の実行情報を判断する必要がある場合は、DBA_JOBSおよびDBA_JOBS_RUNNINGビューを参照してください。 – dpbradley

+0

お返事いただきありがとうございます。 同時に実行されているジョブの2つのインスタンスも回避していますか?はいの場合は、どのオプションを使用する必要がありますか? これは...私はまだ見つけるために管理していませんでした何 – PeterP

+2

IIRCで、DBMS_JOBは(あなたがジョブ実行中の2つのインスタンスを持っていません)一度に一つを実行します。 Dbms_schedulerを使用すると、ジョブの失敗時の処理の柔軟性が向上します。 – DCookie

4

Oracle 10gの管理者がガイドから:

「DBMS_JOBパッケージはDBMS_SCHEDULERパッケージによって置き換えられていますが、システムの負荷を管理するためのジョブを管理している場合は特に、あなたがパッケージの実行を取り消すことにより、DBMS_JOBを無効にすることを検討すべきです。ユーザーの特権。

これを行うには、DBMS_SCHEDULERをオラクル社が推奨します。 1つの利点は、これを使用している場合は、Enterprise Manager/Grid Controlを介してジョブを管理できることです。

+0

まだ単純なケースでは、Tom KyteはDBMS_JOBを好んでいます。 http://stackoverflow.com/questions/4152111/dbms-job-vs-dbms-schedulerを参照してください。 – Vadzim

1

dbms_schedulerがdbms_jobを上回るその他の利点は、負荷、リソースの使用状況をよりよく制御でき、データベースの外部でジョブを実行できることです。

hth、 Ronald。

-1

何らかの理由でdbms_jobまたはdbms_schedulerが機能しない場合は、DBMS_APPLICATION_INFO.SET_APPLICATION_INFOを使用してジョブのモジュール名を設定し、v $ sessionを問い合せて現在そのモジュールを実行しているセッションの数を確認できます。

これはどのタイプの仕事ですか? PL/SQLストアド・プロシージャ

+0

お返事のためのおかげで、私はDBMS_JOBとdmbs_schedulerの両方が私のために働くだろうと思うが、どういうわけか、私は重なり合う2つのジョブを回避する方法を見つけ出すのに十分なスマートにしていないようです... – PeterP

+0

ところで:それはストアドプロシージャです、はい – PeterP

+0

あなたは、重複する仕事について心配する必要はありません。両方のスケジューリング・メカニズムは、一度に1つのジョブのインスタンスしか実行しません。 – DCookie

関連する問題