당신이 작업의 세부 사항
그래서 당신은 데이터에가 있어야 무엇을 해결해야 할 USER_SCHEDULER_JOB_RUN_DETAILS
에있을 것입니다 실행 역사를 기록 한 가정 만은 아니다.
SYSDATE와 마지막 실행 날짜 간의 차이가 기록 작업 실행 평균 차이보다 큰 경우 작업을 찾을 수 있습니다. LAG 분석 함수를 사용하여 동일한 작업의 두 행 사이의 시간 차이를 확인한 다음 평균을 계산 한 다음 시간 간격이 초과되었는지 확인하기 위해 작업을 마지막으로 실행 한 시간에 차이를 더할 수 있습니다.
나는 이것을 테스트 할 데이터가없는, 따라서 스케줄러를 사용하지 않는,하지만 내가 가진 않는 유사한 테이블과 원칙적으로 작동합니다
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
에서이 모든 역사적 작업을 실행되지 않은 경우 최소 두 번 실행해야합니다. 업무 시간의 허용 오차를 허용하기 위해 약간 조정할 필요가 있습니다.