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 es el siguiente:

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