2012年9月12日星期三

ORA-06058: can't find program unit

最近在运行EBS时遇到了ORA-06058错误, 该错误的提示信息很少: can't find program unit. 一开始以为是forms方面出现了错误, 但是追踪无果. 后来根据同事的提示, 有可能是数据库有invalid的对象. 于是根据以下sql语句进行确认:
select owner, object_name, object_type
from all_objects
where object_type in ('PACKAGE BODY', 'PROCEDURE','FUNCTION',
'TRIGGER','VIEW')
and status = 'INVALID' and object_name like 'GM%'
union all
select owner, object_name, object_type
from all_objects
where object_type in ('PACKAGE BODY', 'PROCEDURE','FUNCTION',
'TRIGGER','VIEW')
and status = 'INVALID' and object_name like 'INV%'
果然发现了大量的invalid对象, 按照以下脚本重新编译之后问题解决.
ALTER PACKAGE my_package COMPILE;
ALTER PACKAGE my_package COMPILE BODY;
ALTER PROCEDURE my_procedure COMPILE;
ALTER FUNCTION my_function COMPILE;
ALTER TRIGGER my_trigger COMPILE;
ALTER VIEW my_view COMPILE;
出现这种情况的原因是, 数据库中某些对象被重新编译导致依赖于它们的其他对象失效, 因此在修改EBS中某些存储过程或者包时一定要谨慎.

--EOF--

没有评论:

发表评论