Cuando hacemos cambios en packages o objetos en Oracle, aquellos objetos que dependen de estos se descompilan.

Si las dependencias no se han roto podemos recompilar ejecutando sentencias tipo:

ALTER PACKAGE my_package COMPILE;
ALTER PACKAGE my_package COMPILE BODY;
ALTER PROCEDURE my_procedure COMPILE;
ALTER FUNCTION my_function COMPILE;
ALTER TRIGGER my_trigger COMPILE;
ALTER VIEW my_view COMPILE; 

O bien hacer uso del paquete DBMS_UTILITY.

EXEC DBMS_UTILITY.compile_schema(schema => 'schema1');
EXEC DBMS_UTILITY.compile_schema(schema => 'schema2');
EXEC DBMS_UTILITY.compile_schema(schema => 'schema3');
(...)

Este sistema de todas formas no compila todos los paquetes, por lo que el procedimiento habitual es ejecutar lo anterior y luego siempre ejecutar el siguiente script:

root@server #> cat compile-invalid.sh
#!/bin/bash
sqlplus -s "/ as sysdba" <<EOF > compile-invalid.tmp
set pages 0
set lines 20
set linesize 9999
set head off
set echo off
set verify off
set feedback off
select 'ALTER '|| object_type||' '||owner||'.'||object_name||' COMPILE;'
from all_objects where status='INVALID' and owner in ('schema1','schema2',
'schema3') and object_type !='PACKAGE BODY'
order by owner, object_name;
select 'ALTER PACKAGE '||owner||'.'||object_name||' COMPILE BODY;'
from all_objects where status='INVALID' and owner in ('schema1','schema2',
'schema3') and object_type ='PACKAGE BODY'
order by owner, object_name;
exit;
EOF
echo "exit;" >> compile-invalid.tmp
sqlplus "/ as sysdba" @compile-invalid.tmp
rm compile-invalid.tmp