How to recompile all objects in Oracle
Working as a DBA you need to recompile your database objects sometimes.
These is needed when you create new objects or recreate some objects that make reference of others.
A easy way to do this is by using the build-in scripts that Oracle provide in your Oracle installation.
The name of the script is utlrp.sql. let's see how we can use this script.
Locate your utlrp.sql script.
> locate utlrp . sql
/ oracle / app / product / 11 . 1 . 0 / db_1 / rdbms / admin / utlrp . sql
/ oracle / app / product / 11 . 2 . 0 / db_1 / rdbms / admin / utlrp . sql
Now login as sys dba and run the script.
> sqlplus / as sysdba
SQL * Plus : Release 11 . 2 . 0 . 3 . 0 Production on Seg Fev 24 08 : 26 : 24 2014
Copyright ( c ) 1982 , 2011 , Oracle . All rights reserved .
Conectado a :
Oracle Database 11 g Enterprise Edition Release 11 . 2 . 0 . 3 . 0 - 64 bit Production
With the Partitioning , OLAP , Data Mining and Real Application Testing options
SQL > @/ oracle / app / product / 11 . 2 . 0 / db_1 / rdbms / admin / utlrp . sql
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN 2014 - 02 - 24 08 : 26 : 28
DOC > The following PL / SQL block invokes UTL_RECOMP to recompile invalid
DOC > objects in the database . Recompilation time is proportional to the
DOC > number of invalid objects in the database , so this command may take
DOC > a long time to execute on a database with a large number of invalid
DOC > objects .
DOC >
DOC > Use the following queries to track recompilation progress :
DOC >
DOC > 1 . Query returning the number of invalid objects remaining . This
DOC > number should decrease with time .
DOC > SELECT COUNT ( * ) FROM obj $ WHERE status IN ( 4 , 5 , 6 );
DOC >
DOC > 2 . Query returning the number of objects compiled so far . This number
DOC > should increase with time .
DOC > SELECT COUNT ( * ) FROM UTL_RECOMP_COMPILED ;
DOC >
DOC > This script automatically chooses serial or parallel recompilation
DOC > based on the number of CPUs available ( parameter cpu_count ) multiplied
DOC > by the number of threads per CPU ( parameter parallel_threads_per_cpu ).
DOC > On RAC , this number is added across all RAC nodes .
DOC >
DOC > UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC > recompilation . Jobs are created without instance affinity so that they
DOC > can migrate across RAC nodes . Use the following queries to verify
DOC > whether UTL_RECOMP jobs are being created and run correctly :
DOC >
DOC > 1 . Query showing jobs created by UTL_RECOMP
DOC > SELECT job_name FROM dba_scheduler_jobs
DOC > WHERE job_name like 'UTL_RECOMP_SLAVE_%' ;
DOC >
DOC > 2 . Query showing UTL_RECOMP jobs that are running
DOC > SELECT job_name FROM dba_scheduler_running_jobs
DOC > WHERE job_name like 'UTL_RECOMP_SLAVE_%' ;
DOC >#
Procedimento PL / SQL concluido com sucesso .
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END 2014 - 02 - 24 08 : 27 : 00
DOC > The following query reports the number of objects that have compiled
DOC > with errors ( objects that compile with errors have status set to 3 in
DOC > obj $ ). If the number is higher than expected , please examine the error
DOC > messages reported with each object ( using SHOW ERRORS ) to see if they
DOC > point to system misconfiguration or resource constraints that must be
DOC > fixed before attempting to recompile these objects .
DOC >#
OBJECTS WITH ERRORS
-------------------
0
DOC > The following query reports the number of errors caught during
DOC > recompilation . If this number is non - zero , please query the error
DOC > messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC > are due to misconfiguration or resource constraints that must be
DOC > fixed before objects can compile successfully .
DOC >#
ERRORS DURING RECOMPILATION
---------------------------
0
Funcao criada .
Procedimento PL / SQL concluido com sucesso .
Function eliminada .
Procedimento PL / SQL concluido com sucesso .
SQL >
If after you run the script you still have invalid objects you must check the cause for that error.