ログ履歴があると仮定すると、実行されたジョブの詳細は 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 回実行された履歴ジョブは、再度実行されていない場合はピックアップする必要があります。ジョブ時間の許容範囲を可能にするために、少し調整する必要がある場合があります。