Este es el método que me resulta más práctico para compilar todos los objetos de Oracle y no tener que recurrir a disponer de permisos SYS o SYSDBA.

SQL para recompilar objetos de Oracle

select 'alter ' || object_type || ' ' || object_name || ' compile;'
from user_objects
where status <> 'VALID'
and object_type in ('VIEW','SYNONYM','PROCEDURE','FUNCTION','PACKAGE','TRIGGER');

Solo hay que lanzar la SQL. Nos mostrará los comandos ALTER que deberemos ejecutar posteriormente. Así conseguiremos que todos los objetos Oracle que se hayan descompilado, vuelvan a estar compilados.