Sql 查找计划丢失/跳过/错过的程序

Sql 查找计划丢失/跳过/错过的程序,sql,oracle,oracle10g,oracle-apps,oracleapplications,Sql,Oracle,Oracle10g,Oracle Apps,Oracleapplications,我有大约350个并发程序,它们在Oracle中以不同的时间表运行,从每周一次到每分钟一次不等。在350个程序中,很少有程序具有多个具有不同参数的计划 每周进行一次维护,在此期间,兼职经理会在没有通知的情况下被解雇。没办法。但是在这段时间内运行的程序会出错,随后的计划也会丢失。此外,还有许多其他方法会丢失程序的时间表。大多数情况下,这些问题在很长一段时间甚至几个月内都没有被注意到,这导致了一些问题。是否仍然可以查询计划丢失/跳过/错过的程序?假设您有日志记录历史记录,作业运行的详细信息将在用户\u

我有大约350个并发程序,它们在Oracle中以不同的时间表运行,从每周一次到每分钟一次不等。在350个程序中,很少有程序具有多个具有不同参数的计划


每周进行一次维护,在此期间,兼职经理会在没有通知的情况下被解雇。没办法。但是在这段时间内运行的程序会出错,随后的计划也会丢失。此外,还有许多其他方法会丢失程序的时间表。大多数情况下,这些问题在很长一段时间甚至几个月内都没有被注意到,这导致了一些问题。是否仍然可以查询计划丢失/跳过/错过的程序?

假设您有日志记录历史记录,作业运行的详细信息将在用户\u计划程序\u作业\u运行\u详细信息中

因此,您需要确定哪些数据应该在其中,而不是

您可能能够找到SYSDATE和上次运行日期之间的差异大于历史作业运行之间的平均差异的作业。我们可以使用滞后分析函数来确定同一作业的两行之间的时间差,然后对其进行平均,然后将该差添加到上次作业运行时,以查看是否超过了时间间隔

我没有使用调度程序,因此没有任何数据来测试这一点,但它在原则上与我拥有的类似表一起工作:

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
任何至少运行了两次的历史作业,如果它们没有再次运行,则应重新运行。您可能需要对其进行一些调整,以允许工作时间的公差