暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 找不到ORA-06508的原因

askTom 2015-09-14
1722

问题描述

虽然我知道ORA-06508错误是由于缺少(或)无效的包而引起的,但我们有这样一种情况-

执行包XXX时抛出“ORA-06508:PL/SQL :找不到正在被调用的程序单元”错误。查看此包执行过程中的日志消息后,我们发现问题是由于从XXX调用的另一个包YYY造成的。但是,软件包YYY存在于数据库中,它是有效的,并且在过去几周内没有被修改过。

我错过了什么?谢谢你的建议。

恐怕我不能给出重现问题的步骤,因为它是不可以随意再现的- -只有一个软件包时有时无,不幸的是只有在实际的实例中。

另一个奇怪的事情是,中间层的反弹似乎解决了这个问题(包XXX后来成功执行) - -希望这能告诉你一些我自己看不到的东西。

我们使用的是单实例Oracle数据库。

专家解答

快速问题-您是运行单实例Oracle还是使用RAC ?

好的( 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论