加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle11g ORA-12005: 不能安排过去时间的自动刷新

发布时间:2020-12-12 16:28:08 所属栏目:百科 来源:网络整理
导读:Tue Aug 29 23:30:04 2017 Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j001_47778152.trc: ORA-12012: 自动执行作业 1214 出错 ORA-12005: 不能安排过去时间的自动刷新 Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1
Tue Aug 29 23:30:04 2017
Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j001_47778152.trc:
ORA-12012: 自动执行作业 1214 出错
ORA-12005: 不能安排过去时间的自动刷新
Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j001_47778152.trc:
ORA-12012: 自动执行作业 1204 出错
ORA-12005: 不能安排过去时间的自动刷新
Tue Aug 29 23:30:04 2017
Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j000_9505648.trc:
ORA-12012: 自动执行作业 1205 出错
ORA-12005: 不能安排过去时间的自动刷新
Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j001_47778152.trc:
ORA-12012: 自动执行作业 1208 出错
ORA-12005: 不能安排过去时间的自动刷新

Errors in file /oracle/app/oracle/diag/rdbms/gg/gg1/trace/gg1_j000_9505648.trc:


官方解释:

Error code: ORA-12005
Description: may not schedule automatic refresh for times in the past
Cause: An attempt was made to schedule an automated materialized view refresh for a time in the past.
Action: Choose a time in the future instead.

分析:INTERVAL的值+JOB开始运行的时间,算出下次执行时间在当前时间之前,所以报错ORA-12005: 不能安排过去时间的自动刷新。要想理解这个得知道JOB内部的工作。

JOB的工作流程:
1.JOB在运行结束之后才会更新next_date,但是计算的方法是JOB刚开始的时间加上interval设定的间隔。
2.如果在执行完JOB之后的时间比按照this_date+interval计算出的时间更晚一些,那么next_date就更新为当前时间,也就是几乎会立刻再重新执行JOB。
3.如果一个job执行failure后,oracle会尝试重新执行,若16次尝试后还是failure,则oracle会将这个job的broken设为true,即停掉这个job。
当job失败后,系统会在1分钟后重新运行这个JOB,如果还是失败,就在和第1次失败间隔2分钟的时候继续运行这个JOB,如果还是失败,就在和 第2次失败相隔4分钟后运行这个JOB,直到 失败间隔时间≥interval(JOB正常工作的时间设置参数)后,系统检测的时间间隔就为interval.直到第16次失败就会将这个job置为 broken。

所以原因也许是interval设置的不合理,也许是JOB执行的时间太长。

解决方案是:

select job,
log_user,
schema_user,
what,
LAST_DATE,
LAST_SEC,
THIS_DATE,
THIS_SEC,
NEXT_DATE,
NEXT_SEC,
INTERVAL
from dba_jobs
where job in
(1214,1204,1205,1208);

如查出来的1214的INTERVALTRUNC(SYSDATE)+20/24 ,修改一下INTERVAL即可。

execdbms_job.interval(1214,'TRUNC(SYSDATE+1)+20/24');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读