ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 定时Job报错ORA-04068 ORA-06508

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

原创 Linux操作系统 作者:xz43 时间:2011-12-01 10:11:15 0 删除 编辑
今早检查月底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博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-712524/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
鱼儿的学习空间

注册时间:2010-11-16

  • 博文量
    433
  • 访问量
    1863716