ORA-12005 错误的解决

Oracle Job ORA-12005 错误的解决

 

-----最近发现两个数据库每天晚上23:00分都有警告日志的报错信息:

 

ORACLE_HOME = /oracle/oracle/product/10.2.0/db_2

System name:    HP-UX

Node name:      crm2db1

Release:        B.11.31

Version:        U

Machine:        ia64

Instance name: tjcrm2

Redo thread mounted by this instance: 1

Oracle process number: 5104

Unix process pid: 16600, image: oracle@crm2db1 (J002)

 

*** SERVICE NAME:(SYS$USERS) 2013-09-21 23:00:01.532

*** SESSION ID:(4803.7857) 2013-09-21 23:00:01.532

*** 2013-09-21 23:00:01.532

ORA-12012: 自动执行作业 2289 出错

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

 

------查看相关的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=2289;

 

       JOB LOG_USER  SCHEMA_USER    WHAT                 LAST_DATE    LAST_SEC         THIS_DATE    THIS_SEC         NEXT_DATE    NEXT_SEC            INTERVAL

 

---------- --------- -------------- -------------------- ------------ ---------------- ------------ ---------------- ------------ ---------------- ------------------------------

 

      2289 INST      INST           begin                22-SEP-13    00:02:12                                       22-SEP-13    23:00:00             TRUNC(SYSDATE + 1) - 1/24

     

                                 DELETE_KEY_INFO;

                                    end;

                                   

 

 

 

 

                                   

 

发现interval是TRUNC(SYSDATE + 1) - 1/24。在视图all_jobs中,以下列的含义为:                                                                                            

                                                                                                                                                                      

(a)LAST_DATE:Date on which this job last successfully executed——job成功执行的完毕时间                                                                            

                                                                                                                                                                      

(b)LAST_SEC:Same as LAST_DATE. This is when the last successful execution started.--上次成功执行的开始时间                                                        ~

                                                                                                                                                                      

(c)THIS_DATE:Date that this job started executing (usually null if not executing)——没有job在执行的时候,该字段为空。若有job正在运行,这个时间是job的开始执行时间。

                                                                                                                                                                      

(d)THIS_SEC:Same as THIS_DATE. This is when the last successful execution started.                                                                                 

                                                                                                                                                                      

(e)NEXT_DATE:Date that this job will next be executed——job下次执行时间。                                                                                         

                                                                                                                                                                      

(f)NEXT_SEC:Same as NEXT_DATE. This is when the last successful execution started。                                                                                

                                                                                                                                                                      

(g)INTERVAL:A date function, evaluated at the start of execution, becomes next NEXT_DATE  

 

 

------原因分析:

 

job执行的时候是21-SEP-13 23:00:00 因此计划出下一次的执行时间为trunc(21-SEP-13 23:00:00 +1) -1/24=还是等于21-SEP-13 23:00:00但执行job后时间已经是22-SEP-13    00:02:12 ,这时数据库

发现下一次执行的时间小于现在的时间。所以报错。但是job已经执行成功。

 

------解决方案:

修改INTERVAL使下一次执行的时候大于当前执行后的时间。

 

EXEC dbms_ijob.interval(job,interval)

 

exec dbms_ijob.interval(2289,’TRUNC(SYSDATE + 1)+ 23/24’);   =====>在sys用户下执行其它用户下的job时,用dbms_ijob

commit;

 

 

exec dbms_ijob.next_date(2289,to_date('2013-09-23 23:00:00','yyyy-mm-dd hh24:mi:ss'));

 

commit;

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29446986/viewspace-1173585/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29446986/viewspace-1173585/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值