Quantcast
Jeudi 26 juillet 2012 4 26 /07 /Juil /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

Par Oracle SQL - Publié dans : PLSQL Packages
Ecrire un commentaire - Voir les 1 commentaires
Retour à l'accueil

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés