在用exp和imp进行数据库回复时,原先建立的数据库快照,可能因为导入时的依附关系,其状态为INVALID(查询 select * from user_objects where status='INVALID'),原先我曾经写过一个重新编译的过程,用到了DBMS_DDL.ALTER包,但是由于快照在上面的查询中返回的OBJECT_TYPE为UNDEFINDED,结果报错为“权限不够或对象不存在”,现在不知如何解决,请高手指点。
大家都没有遇到过这个问题么?这是我写的Produrce
create or replace procedure ExObjectsCompile_P
(V_SchemaName in string
,v_Exec in out integer
) is
cursor cu_package is
select object_name, object_type
from all_objects
where status = 'INVALID'and owner = V_SchemaName and object_type'UNDEFINED'; --不可用对象数据集
v_rec cu_package%rowtype;
v_LastTimes integer;
e_DataBaseHasErr Exception;
begin
v_LastTimes:= -1;
while V_Exec>0 Loop
V_Exec:=0;
for v_rec in cu_package loop
sys.dbms_ddl.alter_compile(type => v_rec.object_type,
schema => V_SchemaName,
name => v_rec.object_name);
V_Exec:=V_Exec+1;
end loop;
if v_LastTimes=v_Exec then
raise
e_DataBaseHasErr;
else
v_LastTimes:=V_Exec;
end if;
end loop;
exception
when e_DataBaseHasErr then
v_Exec:= 1;
end ExObjectsCompile_P;