Лично я бы избегал «Перекомпилировать все» (в SQL Developer или TOAD) - особенно в любой среде, где у вас есть открытые подключения к базе данных от других пользователей или программного обеспечения.
В большинстве случаев вы, вероятно, просто хотите перекомпилировать недопустимые объекты.
Если вы используете Oracle 10 или выше, есть два встроенных пакета, которые будут делать это (хотя они могут быть недоступны для вашей роли без обращения к администратору базы данных).
UTL_RECOMP.RECOMP_PARALLEL(threads => 4, schema => :schema_owner)
DBMS_UTILITY.COMPILE_SCHEMA(schema => :schema_owner, compile_all => FALSE)
UTL_RECOMP - новый предпочтительный способ сделать это. DBMS_UTILITY существует в более ранних версиях Oracle, но всегда компилирует все - compile_all - это новый необязательный флаг, который позволяет нам указывать компилировать только недопустимые элементы.
Если у вас более ранняя версия, чем 10, я бы предложил развернуть вашу собственную недопустимую процедуру компиляции - я нашел полезным написать это как задание, которое можно отправить через DBMS_JOB, а затем отправить по электронной почте ход выполнения через DBMS_SMTP Ора 10).
Моя работа рекурсивно пытается скомпилировать объекты INVALID, где все зависимости VALID, используя следующий SQL, пока не произойдет изменений между итерациями.
SELECT uo.object_name,uo.object_type
FROM user_objects uo
WHERE uo.status = 'INVALID'
MINUS -- objects with invalid children
SELECT uo.object_name,uo.object_type
FROM user_objects uo,
user_objects uo2,
public_dependency pd
WHERE uo.status = 'INVALID'
AND uo.object_id = pd.object_id
AND pd.referenced_object_id = uo2.object_id
AND uo2.status = 'INVALID'