Меня всегда спасал при Экспорте/Импорте следующий алгоритм:
==== Экспорт ====
set nls_lang=russian_cis.ru8pc866
exp.exe userid=sys/qqq@db2000 FULL=Y feedback=10000 consistent=y сompress=n file=db2000.dmp log=log_e.txt
=== Импорт ====
set nls_lang=russian_cis.ru8pc866
imp.exe userid=sys/qqq@db2000 full=y feedback=10000 ignore=y commit=y file=db2000.dmp log=log_i.txt
От имени SYS нужно запустить
гранты
потом необходимо создать вьюху SVJOBS. Текст можно взять из журнала импорта.
Перекомпилировать все сбойные вьюхи, процедуры, функции и т.д.:
==== Начало ====
prompt ------------ Перекомпиляция представлений -----------;
begin
for c in (select object_name name from user_objects
where object_type = 'VIEW' and status='INVALID')
Loop
begin
execute immediate
'alter VIEW ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
prompt ----- Перекомпиляция хранимых процедур, функций -----;
begin
for c in (select object_type type,object_name name
from user_objects
where object_type in ('FUNCTION','PROCEDURE')
and status='INVALID')
Loop
begin
execute immediate
'alter ' || c.type || ' ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
prompt -------------- Перекомпиляция пакетов ---------------;
begin
for c in (select object_type type, object_name name from user_objects
where object_type in ('PACKAGE','PACKAGE BODY')
and status='INVALID')
Loop
begin
if (c.type='PACKAGE') then
execute immediate
'alter PACKAGE ' || c.name || ' compile PACKAGE';
else
execute immediate
'alter PACKAGE ' || c.name || ' compile BODY';
end if;
exception when others then null;
end;
end loop;
end;
/
prompt ----- Перекомпиляция триггеров -----;
begin
for c in (select object_type type,object_name name
from user_objects
where object_type = 'TRIGGER'
and status='INVALID')
Loop
begin
execute immediate
'alter ' || c.type || ' ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
prompt ------------ Перекомпиляция нескомпилированных объектов -----------;
begin
for c in (select object_name name from user_objects
where object_type = 'VIEW' and status='INVALID')
Loop
begin execute immediate 'alter VIEW ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
begin
for c in (select object_type type,object_name name
from user_objects
where object_type in ('FUNCTION','PROCEDURE')
and status='INVALID')
Loop
begin execute immediate 'alter ' || c.type || ' ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
begin
for c in (select object_type type, object_name name from user_objects
where object_type in ('PACKAGE','PACKAGE BODY')
and status='INVALID')
Loop
begin
if (c.type='PACKAGE') then
execute immediate 'alter PACKAGE ' || c.name || ' compile PACKAGE';
else execute immediate 'alter PACKAGE ' || c.name || ' compile BODY';
end if;
exception when others then null;
end;
end loop;
end;
/
begin
for c in (select object_type type,object_name name from user_objects
where object_type = 'TRIGGER' and status='INVALID')
Loop
begin execute immediate 'alter ' || c.type || ' ' || c.name || ' compile';
exception when others then null;
end;
end loop;
end;
/
prompt ---------- Нескомпилированные представления -----------;
select 'VIEW' type,substr(object_name,1,90) name from user_objects
where object_type = 'VIEW' and status='INVALID'
ORDER BY 2;
prompt ---------- Нескомпилированные функции -----------------;
select 'FUNCTION' type,substr(object_name,1,90) name from user_objects
where object_type = 'FUNCTION' and status='INVALID'
ORDER BY 2;
prompt ---------- Нескомпилированные процедуры ---------------;
select 'PROCEDURE' type,substr(object_name,1,90) name from user_objects
where object_type = 'PROCEDURE' and status='INVALID'
ORDER BY 2;
prompt ----------- Нескомпилированные пакеты -----------------;
select substr(object_type,1,13) type,substr(object_name,1,85) name from user_objects
where object_type in ('PACKAGE','PACKAGE BODY') and status='INVALID'
ORDER BY 2,1;
prompt ----------- Нескомпилированные триггеры -----------------;
select 'TRIGGER' type,substr(object_name,1,90) name from user_objects
where object_type = 'TRIGGER' and status='INVALID'
ORDER BY 2;
commit;
==== Конец ====
Если перекомпиляция не прошла, то как правило, помогает ручная перекомпиляция инвалидных объектов из под SQL Navigator-а.