2013-06-12 6 views
2

Oracle에서 일주일에 한 번에서 매분 한 번씩 다른 스케줄로 실행되는 약 350 개의 동시 프로그램이 있습니다. 350 개의 프로그램에서, 하나의 프로그램에 여러 매개 변수가있는 둘 이상의 일정이 있습니다.일정이 분실/건너 뛴/누락 된 프로그램 찾기

동시 관리자가 예고없이 중단되는 주간 유지 보수가 있습니다. 그걸 도울 수 없어요. 그러나 그 시간에 실행중인 프로그램이 잘못되어 이후 일정이 손실됩니다. 또한 프로그램의 일정이 없어지면 다른 많은 방법이 있습니다. 대부분 이것들은 오랜 시간 (때로는 몇 달) 동안 눈치 채지 못하며 이로 인해 문제가 발생합니다. 일정이 분실/건너 뛴/누락 된 프로그램을 쿼리하는 방법이 있습니까?

답변

0

당신이 작업의 세부 사항

그래서 당신은 데이터에가 있어야 무엇을 해결해야 할 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 

에서이 모든 역사적 작업을 실행되지 않은 경우 최소 두 번 실행해야합니다. 업무 시간의 허용 오차를 허용하기 위해 약간 조정할 필요가 있습니다.