问题描述
虽然我知道ORA-06508错误是由于缺少(或)无效的包而引起的,但我们有这样一种情况-
执行包XXX时抛出“ORA-06508:PL/SQL :找不到正在被调用的程序单元”错误。查看此包执行过程中的日志消息后,我们发现问题是由于从XXX调用的另一个包YYY造成的。但是,软件包YYY存在于数据库中,它是有效的,并且在过去几周内没有被修改过。
我错过了什么?谢谢你的建议。
恐怕我不能给出重现问题的步骤,因为它是不可以随意再现的- -只有一个软件包时有时无,不幸的是只有在实际的实例中。
另一个奇怪的事情是,中间层的反弹似乎解决了这个问题(包XXX后来成功执行) - -希望这能告诉你一些我自己看不到的东西。
我们使用的是单实例Oracle数据库。
执行包XXX时抛出“ORA-06508:PL/SQL :找不到正在被调用的程序单元”错误。查看此包执行过程中的日志消息后,我们发现问题是由于从XXX调用的另一个包YYY造成的。但是,软件包YYY存在于数据库中,它是有效的,并且在过去几周内没有被修改过。
我错过了什么?谢谢你的建议。
恐怕我不能给出重现问题的步骤,因为它是不可以随意再现的- -只有一个软件包时有时无,不幸的是只有在实际的实例中。
另一个奇怪的事情是,中间层的反弹似乎解决了这个问题(包XXX后来成功执行) - -希望这能告诉你一些我自己看不到的东西。
我们使用的是单实例Oracle数据库。
专家解答
快速问题-您是运行单实例Oracle还是使用RAC ?
好的( RAC问题的原因是,过去PLSQL跨RAC实例存在bug ,但现在我们可以排除这个问题).
检查数据库中对象上的“最后DDL_时间”是确保事物绝对没有变化的一个好方法。别忘了,你可能会在*table*上做一个DDL ,然后将包标记为“无效”(即,需要重新编译)。这应该在下次调用时自动发生,但是如果有某种问题,那么在DDL之后手动检查软件包对象状态可能会解决您的问题。
否则,有一些关于ora-6508的错误报告的支持说明,这些错误报告涉及同义词与其底层对象“不同步”。
建议尝试以下操作(都是SYSDBA )
1)编制
2)检查是否存在同步错误
如果这还没有帮助,我认为您可能需要与支持部门联系。
好的( RAC问题的原因是,过去PLSQL跨RAC实例存在bug ,但现在我们可以排除这个问题).
检查数据库中对象上的“最后DDL_时间”是确保事物绝对没有变化的一个好方法。别忘了,你可能会在*table*上做一个DDL ,然后将包标记为“无效”(即,需要重新编译)。这应该在下次调用时自动发生,但是如果有某种问题,那么在DDL之后手动检查软件包对象状态可能会解决您的问题。
否则,有一些关于ora-6508的错误报告的支持说明,这些错误报告涉及同义词与其底层对象“不同步”。
建议尝试以下操作(都是SYSDBA )
1)编制
declare cursor cur_syn is select do.name d_name, u.name owner from sys.obj$ do, sys.dependency$ d, sys.obj$ po, user$ u 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*/ and do.owner#=u.user# and do.type# = 5 order by 2,1; v_syn_name obj$.name%TYPE; v_tab_own user$.name%TYPE; begin OPEN cur_syn; loop FETCH cur_syn INTO v_syn_name,v_tab_own; exit when cur_syn%notfound; if v_tab_own = 'PUBLIC' then execute immediate 'alter public synonym "'||v_syn_name|| '" compile'; else execute immediate 'alter synonym '||v_tab_own||'.'||v_syn_name|| ' compile'; end if; end loop; CLOSE cur_syn; end; /
2)检查是否存在同步错误
set pagesize 10000 set linesize 140 column d_name format a20 column p_name format a20 select do.obj# d_obj,do.name d_name, u.name owner, 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, user$ u 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*/ and do.owner#=u.user# and do.type# = 5 order by 2,1;
如果这还没有帮助,我认为您可能需要与支持部门联系。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




