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');