Recompiling Invalid Schema Objects
The DBA_OBJECTS view can be used to identify invalid objects using the following query:
SQL> COLUMN object_name FORMAT A30
SQL> SELECT substr(owner,1,18) owner, object_type, substr(object_name,1,30) object_name, status
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;
There are FOUR ways to recompile invalid objects in
schema.
1. DBMS_DDL
2. DBMS_UTILITY
3. UTL_RECOMP
4. UTLRP.SQL
1-      DBMS_DDL.ALTER_COMPILE
Syntax
SQL> EXEC dbms_ddl.alter_compile ( type , schema, name);
Example
SQL> EXEC dbms_ddl.alter_compile ('PROCEDURE' , 'JOHN ' , 'TEST');
Syntax
SQL> EXEC dbms_ddl.alter_compile ( type , schema, name);
Example
SQL> EXEC dbms_ddl.alter_compile ('PROCEDURE' , 'JOHN ' , 'TEST');
2-     
DBMS_UTILITY.COMPILE_SCHEMA
The COMPILE_SCHEMA procedure in the DBMS_UTILITY package compiles all procedures, functions, packages, and triggers in the specified schema.
Example
SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'JOHN');
SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'JOHN');
3-     
UTL_RECOMP
The
UTL_RECOMP package contains two procedures used to recompile invalid objects. 
The RECOMP_SERIAL procedure recompiles all the invalid
objects one at a time.
The RECOMP_PARALLEL procedure performs the same task
in parallel using the specified number of threads.  
Example
: 
--
Schema level.
SQL> EXEC UTL_RECOMP.recomp_serial('JOHN');
SQL> EXEC UTL_RECOMP.recomp_parallel(4, 'JOHN');
-- Database level.
SQL> EXEC UTL_RECOMP.recomp_serial();
SQL> EXEC UTL_RECOMP.recomp_parallel(4);
SQL> EXEC UTL_RECOMP.recomp_serial('JOHN');
SQL> EXEC UTL_RECOMP.recomp_parallel(4, 'JOHN');
-- Database level.
SQL> EXEC UTL_RECOMP.recomp_serial();
SQL> EXEC UTL_RECOMP.recomp_parallel(4);
Restrictions associated with the use of
this package :
- Parallel execution is performed using the job queue. All existing jobs are marked as disabled until the operation is complete.
 - The package must be run from SQL*Plus as the SYS user, or another user with SYSDBA privileges.
 - Running DDL operations at the same time as this package may result in deadlocks.
 
4-     utlrp.sql and utlprp.sql  - - SCRIPTS
·        
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. 
·        
Located in the $ORACLE_HOME/rdbms/admin
directory. 
·        
The utlrp.sql script simply
calls the utlprp.sql script with a command line parameter of "0". 
0 - The level of parallelism is derived based on the CPU_COUNT
parameter.
·        
The utlprp.sql accepts a single
integer parameter that indicates the level of parallelism as follows:
Note : Both scripts must be run as the
SYS user or another user with SYSDBA privilege , to work correctly.
No comments:
Post a Comment