2

私は約 350 の同時実行プログラムを持っており、それらは Oracle で 1 週間に 1 回から 1 分に 1 回までさまざまなスケジュールで実行されます。350 のプログラムの中で、パラメーターが異なる複数のスケジュールを持つプログラムはほとんどありません。

コンカレント・マネージャが予告なしに停止される週次メンテナンスがあります。それは仕方ありません。しかし、その間に実行されていたプログラムはエラーになり、その後のスケジュールも失われます。また、プログラムのスケジュールが失われる方法は他にもたくさんあります。ほとんどの場合、これらは長期間 (場合によっては数か月) 気付かれないため、問題が発生します。スケジュールが失われた/スキップされた/見逃されたプログラムを照会する方法はありますか?

4

1 に答える 1

0

ログ履歴があると仮定すると、実行されたジョブの詳細は USER_SCHEDULER_JOB_RUN_DETAILS にあります

したがって、どのデータがそこにあるべきかを理解する必要がありますが、そうではありません。

SYSDATE と最終実行日の差が過去のジョブ実行間の平均差よりも大きいジョブを見つけることができる場合があります。LAG 分析関数を使用して、同じジョブの 2 つの行の間の時間差を特定し、これを平均して、ジョブが最後に実行された時間に差を追加して、時間間隔を超えているかどうかを確認できます。

私はスケジューラを使用していないため、これをテストするためのデータはありませんが、原則として、私が持っている同様のテーブルで機能します:

SELECT job_name, last_run, avg_interval, last_run + avg_interval as expected_runtime
FROM (
  SELECT job_name, max(actual_start_date) as last_run, avg(difference) as avg_interval
  FROM (
    SELECT job_name, actual_start_date, 
        to_date(actual_start_date) - lag(to_date(actual_start_date)) 
               over (partition by job_name order by log_date) as difference
      FROM user_scheduler_job_run_details
    ) 
   GROUP BY job_name
 )
 WHERE last_run + avg_interval < sysdate
 ORDER BY expected_runtime desc

少なくとも 2 回実行された履歴ジョブは、再度実行されていない場合はピックアップする必要があります。ジョブ時間の許容範囲を可能にするために、少し調整する必要がある場合があります。

于 2013-06-13T05:29:33.807 に答える