2008/12/15

Recompiling Invalid Schema Objects

Identify invalid objects:

SQL> SELECT owner, object_type, object_name
SQL> FROM   dba_objects
SQL> WHERE  status='INVALID';
Compile invalid objects:

1. ALTER object_type owner.object_name COMPILE;
2. EXEC DBMS_DLL.ALTER_COMPILE('OBJECT_TYPE', 'OWNER', 'OBJECT_NAME);
3. EXEC DBMS_UTILITY.COMPILE_SCHEMA(schema => 'OWNER');
4. utlrp.sql and utlprp.sql
The utlrp.sql and utlprp.sql scripts are provided by Oracle to recompile all invalid objects in the database. They are typically run after major database changes such as upgrades or patches. They are located in the $ORACLE_HOME/rdbms/admin directory and provide a wrapper on the UTL_RECOMP package. The utlrp.sql script simply calls the utlprp.sql script with a command line parameter of "0". The utlprp.sql accepts a single integer parameter that indicates the level of parallelism as follows:

* 0 - The level of parallelism is derived based on the CPU_COUNT parameter.
* 1 - The recompilation is run serially, one object at a time.
* N - The recompilation is run in parallel with "N" number of threads.

Both scripts must be run as the SYS user, or another user with SYSDBA, to work correctly.

Show errors in case of compilation warnings:
1. ALTER SESSION SET PLSQL_WARNINGS='enable:all';
2. show error;
3. Query user_errors table;
4. Query dba_errors table;

No comments: