Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
26 juillet 2012 4 26 /07 /juillet /2012 22:25

 

Compiler les objets Invalides.

Comment compiler les objets invalides dans une base Oracle.
Comment lister les objets invalides d'un schéma utilisateur.
Pourquoi compiler ces objets.
Pourquoi sont-ils invalides.

Nous allons voir ici les principales méthodes qui permettent de compiler les objets invalides dans Oracle 10g.
Principalement les objets de type Trigger, Procédure, Fonction, View, Package sont invalidés par exemple suite à un changement opéré par une commande DDL sur une table, laquelle est utilisée dans une vue ou un trigger, le passage d'un patch ou un Upgrade de la base de données.
Il faut savoir qu'Oracle recompile les objets qui ont le statut INVALID lorsqu'ils sont appelés et les passe donc en statut VALID si et seulement si il n'y a pas d'erreurs de recompilation. Si vous supprimez une table qui est utilisée dans une procédure, cette procédure restera INVALID tant que le code PLSQL de celle-ci restera en l'état.
Pourquoi les compiler alors si oracle le fait comme un grand ? Simplement pour éviter une compilation online qui prends des ressources cpu et provoque des événements d'attentes en pleine production c'est dire au moment ou une transaction utilisateur fait appel à cet objet invalide.




Lister les objets invalides de la base Oracle.

 SQL> SELECT owner, object_type, object_name, status FROM dba_objects WHERE status = 'INVALID'; 



Compilation niveau Objet.

 

Trigger.

Commande SQL

 SQL> ALTER TRIGGER nom_trigger COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('TRIGGER', 'nom_schéma', 'nom_trigger'); 

Fonction.

Commande SQL

 SQL> ALTER FUNCTION nom_fonction COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('FUNCTION', 'nom_schéma', 'nom_fonction'); 

Procédure.

Commande SQL

 SQL> ALTER PROCEDURE nom_procedure COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('PROCEDURE', 'nom_schéma', 'nom_procedure'); 

Package et Body.

Commande SQL

 SQL> ALTER PACKAGE nom_package COMPILE; SQL> ALTER PACKAGE nom_package COMPILE BODY; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('PACKAGE', 'nom_schéma', 'nom_package'); - EXECUTE DBMS_DDL.ALTER_COMPILE('PACKAGE BODY', 'nom_schéma', 'nom_package'); 

View.

Commande SQL

 SQL> ALTER VIEW nom_view COMPILE; 



Compilation niveau Schéma.

Executer en AS SYSDBA

 EXECUTE DBMS_UTILITY.COMPILE_SCHEMA(schema => 'nom_schéma'); 
 EXECUTE UTL_RECOMP.RECOMP_SERIAL('nom_schéma'); 



Compilation niveau Database.

Executer en AS SYSDBA

 EXECUTE UTL_RECOMP.RECOMP_SERIAL(); 

Commande SQL*PLUS

 SQL> @?/rdbms/admin/utlrp.sql; 

Haut de Page www.dba-ora.fr

Partager cet article

Repost 0
Published by Oracle SQL - dans PLSQL Packages
commenter cet article

commentaires

Angelilie 02/04/2017 17:58

beau blog. un plaisir de venir flâner sur vos pages. une découverte et un enchantement.N'hésitez pas à venir visiter mon blog. au plaisir

Lucie 28/12/2012 09:34

blog trés intéressant ! bravo et bonne continuation