Инвалидные объекты Oracle. Перекомпиляция.
/* Вывести невалидные схемы и объекты */
select owner, object_type, count(1)
from all_objects
where status = 'INVALID'
GROUP BY owner, object_type
ORDER BY owner;
/* перекомпилирование схемы полностью */
begin
dbms_utility.compile_schema('ваша схема',TRUE);
end
;
/* Компиляция одного конкретного объекта */
BEGIN
dbms_ddl.alter_compile ('ваш тип объекта','ваша схема','ваше имя объекта');
END
;
SQL> select owner, object_type, 'begin dbms_utility.compile_schema('''||owner||''',TRUE); end ;' AS "CommandToRecompil", count(1) AS "Количество объектов"
from all_objects
where status = 'INVALID'
GROUP BY owner, object_type
ORDER BY owner;
/*Компиляция битых объектов в цикле*/
BEGIN
FOR l_crs IN (SELECT owner,
object_name,
object_type
FROM all_objects
WHERE STATUS = 'INVALID' AND owner='WMSYS'
--AND object_type='ваш тип объекта' /*Укажите свой объект*/
)
LOOP
BEGIN
IF l_crs.object_type in ('ваш тип объекта')
THEN
EXECUTE IMMEDIATE 'ALTER ' || l_crs.object_type || ' "' || l_crs.owner || '"."' || l_crs.object_name || '" COMPILE';
END IF;
EXCEPTION
WHEN OTHERS THEN NULL;
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
RETURN;
END;
END LOOP;
END;
Комментарии
Отправить комментарий