Oracle 定时Job报错ORA-04068 ORA-06508

今早检查月底Job执行情况,发现一个Job执行失败,错误如下:
ORA-04068: existing state of packages
ORA-04068: existing state of packages has been discarded
ORA-04065: not executed, altered or dropped stored procedure "US.STAT_SC"
ORA-06508: PL/SQL: could not find program unit being called: "US.STAT_SC"
ORA-06512: at line 20 has been discarded
 
检查该job的JOB_ACTION,内容如下:
begin
...
proc_1(yer,mon);
...
stat_sc(yer,mon);
...
end;
 
其中 proc_1 就是为了后面的统计而准备数据,由于数据量比较大,采用了drop table后再 create table 的方式生成中间表。而后面stat_sc之类的procedure都是基于那些drop掉再create的表。由于后面存储过程都是依赖于 proc_1 中所涉及的表,同时当前的存储过程的状态为available,那么当 proc_1 中的表被drop掉后,则后面的存储过程马上被设置为unavailable,即使这时再重新创建了相应的表,此时后面的存储过程也不会自动地设置为available(因为其不会自行编译),除非人工进行编译该存储过程。
 
到了这里,问题应该清楚了,解决办法有三:
1、在 proc_1 中不采用drop再create的方式;
2、在后面依赖的procedure中,通过execute immediate 方式执行相关表的sql;
3、把 proc_1 单独放到一个Job中执行,这个方法最简单,唯一需要注意的是时间顺序。
 
悲剧了,这个job的所有事情都得手动做了,时间点和其他报表还不一致,导致报表之间数据有出入。 
 

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

转载于:http://blog.itpub.net/9399028/viewspace-712524/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值