2013-06-12 3 views
2

У меня около 350 параллельных программ, которые работают с разными расписаниями в Oracle, варьируя от одного раза в неделю до одной минуты в минуту. В 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 

Любые исторические задания, которые в по крайней мере два прогона должны быть подняты, если они еще не запущены. Возможно, вам придется немного подстроить его, чтобы допускать допуски во время работы.