问题描述
一个10203上的bug,这种问题还是第一次碰到。
在10.2.0.3上,存在bug可能导致编译过程或视图失败,而失败的结果并不只是当前视图或过程不可用,而是可能影响整个数据字典,导致存储过程在执行时出现ORA-4068错误。
错误信息如下:
ORA-04068: existing state OF packages has been discarded. ORA-04065: NOT executed, altered OR dropped stored PROCEDURE P_PACKAGE.P_PRO ORA-06508: PL/SQL: could NOT find program unit being called: P_PACKAGE.P_PRO ORA-06512: at line 1
专家解答
这个问题对应的BUG信息为:Bug 6136074 – ORA-4068 / ORA-4065 ORA-6508 on VALID objects [ID 6136074.8],导致问题的原因就是编译对象时导致PLSQL的依赖对象的时间戳发生不一致,从而导致问题的产生。
Oracle文档上给出了检查问题的SQL语句:
SELECT do.obj# d_obj,do.name d_name, do.TYPE# d_type, po.obj# p_obj,po.name p_name, to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp", to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME", decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X FROM sys.obj$ do, sys.dependency$ d, sys.obj$ po WHERE P_OBJ#=po.obj#(+) AND D_OBJ#=do.obj# AND do.STATUS=1 /*dependent is valid*/ AND po.STATUS=1 /*parent is valid*/ AND po.stime!=p_timestamp /*parent timestamp not match*/ ORDER BY 2,1;
通过这个脚本将获取的对象进行重新编译,可以解决这个问题,要避免问题的再次出现,应该将数据库版本升级到10.2.0.4以上。
最后修改时间:2019-04-14 11:05:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。