Após alguma rotina de atualização do ERP ou mesmo migração via expdp/impdp, alguns objetos do banco de dados ficam inválidos, por N motivos, falta de permissão, relacionamento, etc.
Segue abaixo duas querys que utilizo, uma para identificar a quantidade de objetos inválidos por schema, e a outra para recompilar.
-- Identificando objetos invalidados
COLUMN object_name FORMAT A30;
COLUMN owner FORMAT A20;
SELECT owner,
COUNT(status) INVALID_OBJECTS
FROM dba_objects
WHERE status = 'INVALID'
GROUP BY owner
ORDER BY 2;
-- Criando script para recompilar os Objetos
spool rebuild_objects.sql
COLUMN owner FORMAT A20;
SELECT 'EXEC DBMS_UTILITY.compile_schema(schema => ''' || owner || ''');'
FROM dba_objects
WHERE status = 'INVALID'
GROUP BY owner
ORDER BY 1;
spool off;
@rebuild_objects.sql
Abs!